€•1Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ'/translations/zh_CN/admin-guide/mm/slab”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/zh_TW/admin-guide/mm/slab”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/it_IT/admin-guide/mm/slab”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/ja_JP/admin-guide/mm/slab”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/ko_KR/admin-guide/mm/slab”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/pt_BR/admin-guide/mm/slab”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/sp_SP/admin-guide/mm/slab”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ(Short users guide for the slab allocator”h]”hŒ(Short users guide for the slab allocator”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒA/var/lib/git/docbuild/linux/Documentation/admin-guide/mm/slab.rst”h´KubhŒ paragraph”“”)�”}”(hX6The slab allocator includes full debugging support (when built with CONFIG_SLUB_DEBUG=y) but it is off by default (unless built with CONFIG_SLUB_DEBUG_ON=y). You can enable debugging only for selected slabs in order to avoid an impact on overall system performance which may make a bug more difficult to find.”h]”hX6The slab allocator includes full debugging support (when built with CONFIG_SLUB_DEBUG=y) but it is off by default (unless built with CONFIG_SLUB_DEBUG_ON=y). You can enable debugging only for selected slabs in order to avoid an impact on overall system performance which may make a bug more difficult to find.”…”�”}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hŒ�In order to switch debugging on one can add an option ``slab_debug`` to the kernel command line. That will enable full debugging for all slabs.”h]”(hŒ6In order to switch debugging on one can add an option ”…”�”}”(hhÛh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``slab_debug``”h]”hŒ slab_debug”…”�”}”(hhåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhhÛubhŒK to the kernel command line. That will enable full debugging for all slabs.”…”�”}”(hhÛh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubhÌ)�”}”(hXTypically one would then use the ``slabinfo`` command to get statistical data and perform operation on the slabs. By default ``slabinfo`` only lists slabs that have data in them. See "slabinfo -h" for more options when running the command. ``slabinfo`` can be compiled with ::”h]”(hŒ!Typically one would then use the ”…”�”}”(hhýh²hh³Nh´Nubhä)�”}”(hŒ ``slabinfo``”h]”hŒslabinfo”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhhýubhŒP command to get statistical data and perform operation on the slabs. By default ”…”�”}”(hhýh²hh³Nh´Nubhä)�”}”(hŒ ``slabinfo``”h]”hŒslabinfo”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhhýubhŒk only lists slabs that have data in them. See “slabinfo -hâ€� for more options when running the command. ”…”�”}”(hhýh²hh³Nh´Nubhä)�”}”(hŒ ``slabinfo``”h]”hŒslabinfo”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhhýubhŒ can be compiled with”…”�”}”(hhýh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhŒ literal_block”“”)�”}”(hŒ#gcc -o slabinfo tools/mm/slabinfo.c”h]”hŒ#gcc -o slabinfo tools/mm/slabinfo.c”…”�”}”hjCsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jAh³hÊh´Khh·h²hubhÌ)�”}”(hŒÿSome of the modes of operation of ``slabinfo`` require that slub debugging be enabled on the command line. F.e. no tracking information will be available without debugging on and validation can only partially be performed if debugging was not switched on.”h]”(hŒ"Some of the modes of operation of ”…”�”}”(hjSh²hh³Nh´Nubhä)�”}”(hŒ ``slabinfo``”h]”hŒslabinfo”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjSubhŒÑ require that slub debugging be enabled on the command line. F.e. no tracking information will be available without debugging on and validation can only partially be performed if debugging was not switched on.”…”�”}”(hjSh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ+Some more sophisticated uses of slab_debug:”h]”hŒ+Some more sophisticated uses of slab_debug:”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjsh²hh³hÊh´KubhÌ)�”}”(hŒgParameters may be given to ``slab_debug``. If none is specified then full debugging is enabled. Format:”h]”(hŒParameters may be given to ”…”�”}”(hj„h²hh³Nh´Nubhä)�”}”(hŒ``slab_debug``”h]”hŒ slab_debug”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhj„ubhŒ>. If none is specified then full debugging is enabled. Format:”…”�”}”(hj„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khjsh²hubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ8slab_debug= Enable options for all slabs ”h]”(hŒterm”“”)�”}”(hŒslab_debug=”h]”hŒslab_debug=”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯h³hÊh´K#hj«ubhŒ definition”“”)�”}”(hhh]”hÌ)�”}”(hŒEnable options for all slabs”h]”hŒEnable options for all slabs”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K#hjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´K#hj¦ubjª)�”}”(hŒxslab_debug=,,,... Enable options only for select slabs (no spaces after a comma) ”h]”(j°)�”}”(hŒ8slab_debug=,,,...”h]”hŒ8slab_debug=,,,...”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯h³hÊh´K'hjÞubjÀ)�”}”(hhh]”hÌ)�”}”(hŒ>Enable options only for select slabs (no spaces after a comma)”h]”hŒ>Enable options only for select slabs (no spaces after a comma)”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K&hjðubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´K'hj¦h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¤hjsh²hh³hÊh´NubhÌ)�”}”(hX6Multiple blocks of options for all slabs or selected slabs can be given, with blocks of options delimited by ';'. The last of "all slabs" blocks is applied to all slabs except those that match one of the "select slabs" block. Options of the first "select slabs" blocks that matches the slab's name are applied.”h]”hXHMultiple blocks of options for all slabs or selected slabs can be given, with blocks of options delimited by ‘;’. The last of “all slabsâ€� blocks is applied to all slabs except those that match one of the “select slabsâ€� block. Options of the first “select slabsâ€� blocks that matches the slab’s name are applied.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K)hjsh²hubhÌ)�”}”(hŒPossible debug options are::”h]”hŒPossible debug options are:”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K.hjsh²hubjB)�”}”(hXFF Sanity checks on (enables SLAB_DEBUG_CONSISTENCY_CHECKS Sorry SLAB legacy issues) Z Red zoning P Poisoning (object and padding) U User tracking (free and alloc) T Trace (please only use on single slabs) A Enable failslab filter mark for the cache O Switch debugging off for caches that would have caused higher minimum slab orders - Switch all debugging off (useful if the kernel is configured with CONFIG_SLUB_DEBUG_ON)”h]”hXFF Sanity checks on (enables SLAB_DEBUG_CONSISTENCY_CHECKS Sorry SLAB legacy issues) Z Red zoning P Poisoning (object and padding) U User tracking (free and alloc) T Trace (please only use on single slabs) A Enable failslab filter mark for the cache O Switch debugging off for caches that would have caused higher minimum slab orders - Switch all debugging off (useful if the kernel is configured with CONFIG_SLUB_DEBUG_ON)”…”�”}”hj/sbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´K0hjsh²hubhÌ)�”}”(hŒPF.e. in order to boot just with sanity checks and red zoning one would specify::”h]”hŒOF.e. in order to boot just with sanity checks and red zoning one would specify:”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khjsh²hubhÌ)�”}”(hŒ2Trying to find an issue in the dentry cache? Try::”h]”hŒ1Trying to find an issue in the dentry cache? Try:”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K@hjsh²hubjB)�”}”(hŒslab_debug=,dentry”h]”hŒslab_debug=,dentry”…”�”}”hjgsbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´KBhjsh²hubhÌ)�”}”(hŒíto only enable debugging on the dentry cache. You may use an asterisk at the end of the slab name, in order to cover all slabs with the same prefix. For example, here's how you can poison the dentry cache as well as all kmalloc slabs::”h]”hŒîto only enable debugging on the dentry cache. You may use an asterisk at the end of the slab name, in order to cover all slabs with the same prefix. For example, here’s how you can poison the dentry cache as well as all kmalloc slabs:”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KDhjsh²hubjB)�”}”(hŒslab_debug=P,kmalloc-*,dentry”h]”hŒslab_debug=P,kmalloc-*,dentry”…”�”}”hjƒsbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´KIhjsh²hubhÌ)�”}”(hŒiRed zoning and tracking may realign the slab. We can just apply sanity checks to the dentry cache with::”h]”hŒhRed zoning and tracking may realign the slab. We can just apply sanity checks to the dentry cache with:”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KKhjsh²hubjB)�”}”(hŒslab_debug=F,dentry”h]”hŒslab_debug=F,dentry”…”�”}”hjŸsbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´KNhjsh²hubhÌ)�”}”(hXeDebugging options may require the minimum possible slab order to increase as a result of storing the metadata (for example, caches with PAGE_SIZE object sizes). This has a higher likelihood of resulting in slab allocation errors in low memory situations or if there's high fragmentation of memory. To switch off debugging for such caches by default, use::”h]”hXfDebugging options may require the minimum possible slab order to increase as a result of storing the metadata (for example, caches with PAGE_SIZE object sizes). This has a higher likelihood of resulting in slab allocation errors in low memory situations or if there’s high fragmentation of memory. To switch off debugging for such caches by default, use:”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KPhjsh²hubjB)�”}”(hŒ slab_debug=O”h]”hŒ slab_debug=O”…”�”}”hj»sbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´KVhjsh²hubhÌ)�”}”(hŒÔYou can apply different options to different list of slab names, using blocks of options. This will enable red zoning for dentry and user tracking for kmalloc. All other slabs will not get any debugging enabled::”h]”hŒÓYou can apply different options to different list of slab names, using blocks of options. This will enable red zoning for dentry and user tracking for kmalloc. All other slabs will not get any debugging enabled:”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KXhjsh²hubjB)�”}”(hŒslab_debug=Z,dentry;U,kmalloc-*”h]”hŒslab_debug=Z,dentry;U,kmalloc-*”…”�”}”hj×sbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´K\hjsh²hubhÌ)�”}”(hŒúYou can also enable options (e.g. sanity checks and poisoning) for all caches except some that are deemed too performance critical and don't need to be debugged by specifying global debug options followed by a list of slab names with "-" as options::”h]”hŒÿYou can also enable options (e.g. sanity checks and poisoning) for all caches except some that are deemed too performance critical and don’t need to be debugged by specifying global debug options followed by a list of slab names with “-â€� as options:”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K^hjsh²hubjB)�”}”(hŒ slab_debug=FZ;-,zs_handle,zspage”h]”hŒ slab_debug=FZ;-,zs_handle,zspage”…”�”}”hjósbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´Kchjsh²hubhÌ)�”}”(hŒVThe state of each debug option for a slab can be found in the respective files under::”h]”hŒUThe state of each debug option for a slab can be found in the respective files under:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kehjsh²hubjB)�”}”(hŒ/sys/kernel/slab//”h]”hŒ/sys/kernel/slab//”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´Khhjsh²hubhÌ)�”}”(hŒ—If the file contains 1, the option is enabled, 0 means disabled. The debug options from the ``slab_debug`` parameter translate to the following files::”h]”(hŒ\If the file contains 1, the option is enabled, 0 means disabled. The debug options from the ”…”�”}”(hjh²hh³Nh´Nubhä)�”}”(hŒ``slab_debug``”h]”hŒ slab_debug”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjubhŒ, parameter translate to the following files:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kjhjsh²hubjB)�”}”(hŒgF sanity_checks Z red_zone P poison U store_user T trace A failslab”h]”hŒgF sanity_checks Z red_zone P poison U store_user T trace A failslab”…”�”}”hj=sbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´Kmhjsh²hubhÌ)�”}”(hŒêfailslab file is writable, so writing 1 or 0 will enable or disable the option at runtime. Write returns -EINVAL if cache is an alias. Careful with tracing: It may spew out lots of information and never stop if used on the wrong slab.”h]”hŒêfailslab file is writable, so writing 1 or 0 will enable or disable the option at runtime. Write returns -EINVAL if cache is an alias. Careful with tracing: It may spew out lots of information and never stop if used on the wrong slab.”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kthjsh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ Slab merging”h]”hŒ Slab merging”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjYh²hh³hÊh´KzubhÌ)�”}”(hŒÊIf no debug options are specified then SLUB may merge similar slabs together in order to reduce overhead and increase cache hotness of objects. ``slabinfo -a`` displays which slabs were merged together.”h]”(hŒ�If no debug options are specified then SLUB may merge similar slabs together in order to reduce overhead and increase cache hotness of objects. ”…”�”}”(hjjh²hh³Nh´Nubhä)�”}”(hŒ``slabinfo -a``”h]”hŒ slabinfo -a”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjjubhŒ+ displays which slabs were merged together.”…”�”}”(hjjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K|hjYh²hubeh}”(h]”Œ slab-merging”ah ]”h"]”Œ slab merging”ah$]”h&]”uh1hµhjsh²hh³hÊh´Kzubh¶)�”}”(hhh]”(h»)�”}”(hŒSlab validation”h]”hŒSlab validation”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj’h²hh³hÊh´K�ubhÌ)�”}”(hŒ�SLUB can validate all object if the kernel was booted with slab_debug. In order to do so you must have the ``slabinfo`` tool. Then you can do ::”h]”(hŒkSLUB can validate all object if the kernel was booted with slab_debug. In order to do so you must have the ”…”�”}”(hj£h²hh³Nh´Nubhä)�”}”(hŒ ``slabinfo``”h]”hŒslabinfo”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhj£ubhŒ tool. Then you can do”…”�”}”(hj£h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kƒhj’h²hubjB)�”}”(hŒ slabinfo -v”h]”hŒ slabinfo -v”…”�”}”hjÃsbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´K‡hj’h²hubhÌ)�”}”(hŒDwhich will test all objects. Output will be generated to the syslog.”h]”hŒDwhich will test all objects. Output will be generated to the syslog.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‰hj’h²hubhÌ)�”}”(hŒýThis also works in a more limited way if boot was without slab debug. In that case ``slabinfo -v`` simply tests all reachable objects. Usually these are in the cpu slabs and the partial slabs. Full slabs are not tracked by SLUB in a non debug situation.”h]”(hŒSThis also works in a more limited way if boot was without slab debug. In that case ”…”�”}”(hjßh²hh³Nh´Nubhä)�”}”(hŒ``slabinfo -v``”h]”hŒ slabinfo -v”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjßubhŒ› simply tests all reachable objects. Usually these are in the cpu slabs and the partial slabs. Full slabs are not tracked by SLUB in a non debug situation.”…”�”}”(hjßh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‹hj’h²hubeh}”(h]”Œslab-validation”ah ]”h"]”Œslab validation”ah$]”h&]”uh1hµhjsh²hh³hÊh´K�ubh¶)�”}”(hhh]”(h»)�”}”(hŒGetting more performance”h]”hŒGetting more performance”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´K‘ubhÌ)�”}”(hŒúTo some degree SLUB's performance is limited by the need to take the list_lock once in a while to deal with partial slabs. That overhead is governed by the order of the allocation for each slab. The allocations can be influenced by kernel parameters:”h]”hŒüTo some degree SLUB’s performance is limited by the need to take the list_lock once in a while to deal with partial slabs. That overhead is governed by the order of the allocation for each slab. The allocations can be influenced by kernel parameters:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K“hjh²hubhŒcomment”“”)�”}”(hŒNslab_min_objects=x (default: automatically scaled by number of cpus)”h]”hŒNslab_min_objects=x (default: automatically scaled by number of cpus)”…”�”}”hj(sbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1j&hjh²hh³hÊh´K˜ubj')�”}”(hŒ(slab_min_order=x (default 0)”h]”hŒ(slab_min_order=x (default 0)”…”�”}”hj6sbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1j&hjh²hh³hÊh´K™ubj')�”}”(hŒBslab_max_order=x (default 3 (PAGE_ALLOC_COSTLY_ORDER))”h]”hŒBslab_max_order=x (default 3 (PAGE_ALLOC_COSTLY_ORDER))”…”�”}”hjDsbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1j&hjh²hh³hÊh´K›ubj¥)�”}”(hhh]”(jª)�”}”(hX+``slab_min_objects`` allows to specify how many objects must at least fit into one slab in order for the allocation order to be acceptable. In general slub will be able to perform this number of allocations on a slab without consulting centralized resources (list_lock) where contention may occur. ”h]”(j°)�”}”(hŒ``slab_min_objects``”h]”hä)�”}”(hj[h]”hŒslab_min_objects”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯h³hÊh´K¡hjUubjÀ)�”}”(hhh]”hÌ)�”}”(hXallows to specify how many objects must at least fit into one slab in order for the allocation order to be acceptable. In general slub will be able to perform this number of allocations on a slab without consulting centralized resources (list_lock) where contention may occur.”h]”hXallows to specify how many objects must at least fit into one slab in order for the allocation order to be acceptable. In general slub will be able to perform this number of allocations on a slab without consulting centralized resources (list_lock) where contention may occur.”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K�hjpubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´K¡hjRubjª)�”}”(hŒc``slab_min_order`` specifies a minimum order of slabs. A similar effect like ``slab_min_objects``. ”h]”(j°)�”}”(hŒ``slab_min_order``”h]”hä)�”}”(hj“h]”hŒslab_min_order”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯h³hÊh´K¥hj�ubjÀ)�”}”(hhh]”hÌ)�”}”(hŒOspecifies a minimum order of slabs. A similar effect like ``slab_min_objects``.”h]”(hŒ:specifies a minimum order of slabs. A similar effect like ”…”�”}”(hj«h²hh³Nh´Nubhä)�”}”(hŒ``slab_min_objects``”h]”hŒslab_min_objects”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhj«ubhŒ.”…”�”}”(hj«h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¤hj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´K¥hjRh²hubjª)�”}”(hX®``slab_max_order`` specified the order at which ``slab_min_objects`` should no longer be checked. This is useful to avoid SLUB trying to generate super large order pages to fit ``slab_min_objects`` of a slab cache with large object sizes into one high order page. Setting command line parameter ``debug_guardpage_minorder=N`` (N > 0), forces setting ``slab_max_order`` to 0, what cause minimum possible order of slabs allocation. ”h]”(j°)�”}”(hŒ``slab_max_order``”h]”hä)�”}”(hjÝh]”hŒslab_max_order”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯h³hÊh´K¯hj×ubjÀ)�”}”(hhh]”hÌ)�”}”(hXšspecified the order at which ``slab_min_objects`` should no longer be checked. This is useful to avoid SLUB trying to generate super large order pages to fit ``slab_min_objects`` of a slab cache with large object sizes into one high order page. Setting command line parameter ``debug_guardpage_minorder=N`` (N > 0), forces setting ``slab_max_order`` to 0, what cause minimum possible order of slabs allocation.”h]”(hŒspecified the order at which ”…”�”}”(hjõh²hh³Nh´Nubhä)�”}”(hŒ``slab_min_objects``”h]”hŒslab_min_objects”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjõubhŒm should no longer be checked. This is useful to avoid SLUB trying to generate super large order pages to fit ”…”�”}”(hjõh²hh³Nh´Nubhä)�”}”(hŒ``slab_min_objects``”h]”hŒslab_min_objects”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjõubhŒb of a slab cache with large object sizes into one high order page. Setting command line parameter ”…”�”}”(hjõh²hh³Nh´Nubhä)�”}”(hŒ``debug_guardpage_minorder=N``”h]”hŒdebug_guardpage_minorder=N”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjõubhŒ (N > 0), forces setting ”…”�”}”(hjõh²hh³Nh´Nubhä)�”}”(hŒ``slab_max_order``”h]”hŒslab_max_order”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjõubhŒ= to 0, what cause minimum possible order of slabs allocation.”…”�”}”(hjõh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¨hjòubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´K¯hjRh²hubjª)�”}”(hX˜``slab_strict_numa`` Enables the application of memory policies on each allocation. This results in more accurate placement of objects which may result in the reduction of accesses to remote nodes. The default is to only apply memory policies at the folio level when a new folio is acquired or a folio is retrieved from the lists. Enabling this option reduces the fastpath performance of the slab allocator. ”h]”(j°)�”}”(hŒ``slab_strict_numa``”h]”hä)�”}”(hj]h]”hŒslab_strict_numa”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯h³hÊh´K¸hjWubjÀ)�”}”(hhh]”hÌ)�”}”(hX‚Enables the application of memory policies on each allocation. This results in more accurate placement of objects which may result in the reduction of accesses to remote nodes. The default is to only apply memory policies at the folio level when a new folio is acquired or a folio is retrieved from the lists. Enabling this option reduces the fastpath performance of the slab allocator.”h]”hX‚Enables the application of memory policies on each allocation. This results in more accurate placement of objects which may result in the reduction of accesses to remote nodes. The default is to only apply memory policies at the folio level when a new folio is acquired or a folio is retrieved from the lists. Enabling this option reduces the fastpath performance of the slab allocator.”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K²hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjWubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´K¸hjRh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¤hjh²hh³hÊh´Nubeh}”(h]”Œgetting-more-performance”ah ]”h"]”Œgetting more performance”ah$]”h&]”uh1hµhjsh²hh³hÊh´K‘ubh¶)�”}”(hhh]”(h»)�”}”(hŒSLUB Debug output”h]”hŒSLUB Debug output”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj�h²hh³hÊh´K»ubhÌ)�”}”(hŒ'Here is a sample of slub debug output::”h]”hŒ&Here is a sample of slub debug output:”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K½hj�h²hubjB)�”}”(hX4==================================================================== BUG kmalloc-8: Right Redzone overwritten -------------------------------------------------------------------- INFO: 0xc90f6d28-0xc90f6d2b. First byte 0x00 instead of 0xcc INFO: Slab 0xc528c530 flags=0x400000c3 inuse=61 fp=0xc90f6d58 INFO: Object 0xc90f6d20 @offset=3360 fp=0xc90f6d58 INFO: Allocated in get_modalias+0x61/0xf5 age=53 cpu=1 pid=554 Bytes b4 (0xc90f6d10): 00 00 00 00 00 00 00 00 5a 5a 5a 5a 5a 5a 5a 5a ........ZZZZZZZZ Object (0xc90f6d20): 31 30 31 39 2e 30 30 35 1019.005 Redzone (0xc90f6d28): 00 cc cc cc . Padding (0xc90f6d50): 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZ [] dump_trace+0x63/0x1eb [] show_trace_log_lvl+0x1a/0x2f [] show_trace+0x12/0x14 [] dump_stack+0x16/0x18 [] object_err+0x143/0x14b [] check_object+0x66/0x234 [] __slab_free+0x239/0x384 [] kfree+0xa6/0xc6 [] get_modalias+0xb9/0xf5 [] dmi_dev_uevent+0x27/0x3c [] dev_uevent+0x1ad/0x1da [] kobject_uevent_env+0x20a/0x45b [] kobject_uevent+0xa/0xf [] store_uevent+0x4f/0x58 [] dev_attr_store+0x29/0x2f [] sysfs_write_file+0x16e/0x19c [] vfs_write+0xd1/0x15a [] sys_write+0x3d/0x72 [] sysenter_past_esp+0x5f/0x99 [] 0xb7f7b410 ======================= FIX kmalloc-8: Restoring Redzone 0xc90f6d28-0xc90f6d2b=0xcc”h]”hX4==================================================================== BUG kmalloc-8: Right Redzone overwritten -------------------------------------------------------------------- INFO: 0xc90f6d28-0xc90f6d2b. First byte 0x00 instead of 0xcc INFO: Slab 0xc528c530 flags=0x400000c3 inuse=61 fp=0xc90f6d58 INFO: Object 0xc90f6d20 @offset=3360 fp=0xc90f6d58 INFO: Allocated in get_modalias+0x61/0xf5 age=53 cpu=1 pid=554 Bytes b4 (0xc90f6d10): 00 00 00 00 00 00 00 00 5a 5a 5a 5a 5a 5a 5a 5a ........ZZZZZZZZ Object (0xc90f6d20): 31 30 31 39 2e 30 30 35 1019.005 Redzone (0xc90f6d28): 00 cc cc cc . Padding (0xc90f6d50): 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZ [] dump_trace+0x63/0x1eb [] show_trace_log_lvl+0x1a/0x2f [] show_trace+0x12/0x14 [] dump_stack+0x16/0x18 [] object_err+0x143/0x14b [] check_object+0x66/0x234 [] __slab_free+0x239/0x384 [] kfree+0xa6/0xc6 [] get_modalias+0xb9/0xf5 [] dmi_dev_uevent+0x27/0x3c [] dev_uevent+0x1ad/0x1da [] kobject_uevent_env+0x20a/0x45b [] kobject_uevent+0xa/0xf [] store_uevent+0x4f/0x58 [] dev_attr_store+0x29/0x2f [] sysfs_write_file+0x16e/0x19c [] vfs_write+0xd1/0x15a [] sys_write+0x3d/0x72 [] sysenter_past_esp+0x5f/0x99 [] 0xb7f7b410 ======================= FIX kmalloc-8: Restoring Redzone 0xc90f6d28-0xc90f6d2b=0xcc”…”�”}”hj¼sbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´K¿hj�h²hubhÌ)�”}”(hŒ¡If SLUB encounters a corrupted object (full detection requires the kernel to be booted with slab_debug) then the following output will be dumped into the syslog:”h]”hŒ¡If SLUB encounters a corrupted object (full detection requires the kernel to be booted with slab_debug) then the following output will be dumped into the syslog:”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kåhj�h²hubhŒenumerated_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hXçDescription of the problem encountered This will be a message in the system log starting with:: =============================================== BUG : ----------------------------------------------- INFO: - INFO: Slab
INFO: Object
INFO: Allocated in age= cpu= pid= INFO: Freed in age= cpu= pid= (Object allocation / free information is only available if SLAB_STORE_USER is set for the slab. slab_debug sets that option) ”h]”(hÌ)�”}”(hŒ&Description of the problem encountered”h]”hŒ&Description of the problem encountered”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KéhjßubhÌ)�”}”(hŒ8This will be a message in the system log starting with::”h]”hŒ7This will be a message in the system log starting with:”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KëhjßubjB)�”}”(hXò=============================================== BUG : ----------------------------------------------- INFO: - INFO: Slab
INFO: Object
INFO: Allocated in age= cpu= pid= INFO: Freed in age= cpu= pid=”h]”hXò=============================================== BUG : ----------------------------------------------- INFO: - INFO: Slab
INFO: Object
INFO: Allocated in age= cpu= pid= INFO: Freed in age= cpu= pid=”…”�”}”hjÿsbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´KíhjßubhÌ)�”}”(hŒ|(Object allocation / free information is only available if SLAB_STORE_USER is set for the slab. slab_debug sets that option)”h]”hŒ|(Object allocation / free information is only available if SLAB_STORE_USER is set for the slab. slab_debug sets that option)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kùhjßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÝhjÚh²hh³hÊh´NubjÞ)�”}”(hXcThe object contents if an object was involved. Various types of lines can follow the BUG SLUB line: Bytes b4
: Shows a few bytes before the object where the problem was detected. Can be useful if the corruption does not stop with the start of the object. Object
: The bytes of the object. If the object is inactive then the bytes typically contain poison values. Any non-poison value shows a corruption by a write after free. Redzone
: The Redzone following the object. The Redzone is used to detect writes after the object. All bytes should always have the same value. If there is any deviation then it is due to a write after the object boundary. (Redzone information is only available if SLAB_RED_ZONE is set. slab_debug sets that option) Padding
: Unused data to fill up the space in order to get the next object properly aligned. In the debug case we make sure that there are at least 4 bytes of padding. This allows the detection of writes before the object. ”h]”(hÌ)�”}”(hŒ.The object contents if an object was involved.”h]”hŒ.The object contents if an object was involved.”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kühj!ubhÌ)�”}”(hŒ4Various types of lines can follow the BUG SLUB line:”h]”hŒ4Various types of lines can follow the BUG SLUB line:”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kþhj!ubj¥)�”}”(hhh]”(jª)�”}”(hŒ­Bytes b4
: Shows a few bytes before the object where the problem was detected. Can be useful if the corruption does not stop with the start of the object. ”h]”(j°)�”}”(hŒBytes b4
”h]”hŒBytes b4
”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯h³hÊh´MhjDubhŒ classifier”“”)�”}”(hŒ”h]”hŒ”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjDh³hÊubjÀ)�”}”(hhh]”hÌ)�”}”(hŒ�Shows a few bytes before the object where the problem was detected. Can be useful if the corruption does not stop with the start of the object.”h]”hŒ�Shows a few bytes before the object where the problem was detected. Can be useful if the corruption does not stop with the start of the object.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjDubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´MhjAubjª)�”}”(hŒ½Object
: The bytes of the object. If the object is inactive then the bytes typically contain poison values. Any non-poison value shows a corruption by a write after free. ”h]”(j°)�”}”(hŒObject
”h]”hŒObject
”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯h³hÊh´MhjƒubjW)�”}”(hŒ”h]”hŒ”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjƒh³hÊubjÀ)�”}”(hhh]”hÌ)�”}”(hŒ¡The bytes of the object. If the object is inactive then the bytes typically contain poison values. Any non-poison value shows a corruption by a write after free.”h]”hŒ¡The bytes of the object. If the object is inactive then the bytes typically contain poison values. Any non-poison value shows a corruption by a write after free.”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´MhjAubjª)�”}”(hXORedzone
: The Redzone following the object. The Redzone is used to detect writes after the object. All bytes should always have the same value. If there is any deviation then it is due to a write after the object boundary. (Redzone information is only available if SLAB_RED_ZONE is set. slab_debug sets that option) ”h]”(j°)�”}”(hŒRedzone
”h]”hŒRedzone
”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯h³hÊh´MhjÀubjW)�”}”(hŒ”h]”hŒ”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÀh³hÊubjÀ)�”}”(hhh]”(hÌ)�”}”(hŒÔThe Redzone following the object. The Redzone is used to detect writes after the object. All bytes should always have the same value. If there is any deviation then it is due to a write after the object boundary.”h]”hŒÔThe Redzone following the object. The Redzone is used to detect writes after the object. All bytes should always have the same value. If there is any deviation then it is due to a write after the object boundary.”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjàubhÌ)�”}”(hŒ\(Redzone information is only available if SLAB_RED_ZONE is set. slab_debug sets that option)”h]”hŒ\(Redzone information is only available if SLAB_RED_ZONE is set. slab_debug sets that option)”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjàubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´MhjAubjª)�”}”(hŒñPadding
: Unused data to fill up the space in order to get the next object properly aligned. In the debug case we make sure that there are at least 4 bytes of padding. This allows the detection of writes before the object. ”h]”(j°)�”}”(hŒPadding
”h]”hŒPadding
”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯h³hÊh´Mhj ubjW)�”}”(hŒ”h]”hŒ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj h³hÊubjÀ)�”}”(hhh]”hÌ)�”}”(hŒÔUnused data to fill up the space in order to get the next object properly aligned. In the debug case we make sure that there are at least 4 bytes of padding. This allows the detection of writes before the object.”h]”hŒÔUnused data to fill up the space in order to get the next object properly aligned. In the debug case we make sure that there are at least 4 bytes of padding. This allows the detection of writes before the object.”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´MhjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¤hj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÝhjÚh²hh³Nh´NubjÞ)�”}”(hŒÇA stackdump The stackdump describes the location where the error was detected. The cause of the corruption is may be more likely found by looking at the function that allocated or freed the object. ”h]”(hÌ)�”}”(hŒ A stackdump”h]”hŒ A stackdump”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjTubhÌ)�”}”(hŒ¹The stackdump describes the location where the error was detected. The cause of the corruption is may be more likely found by looking at the function that allocated or freed the object.”h]”hŒ¹The stackdump describes the location where the error was detected. The cause of the corruption is may be more likely found by looking at the function that allocated or freed the object.”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÝhjÚh²hh³hÊh´NubjÞ)�”}”(hX®Report on how the problem was dealt with in order to ensure the continued operation of the system. These are messages in the system log beginning with:: FIX : In the above sample SLUB found that the Redzone of an active object has been overwritten. Here a string of 8 characters was written into a slab that has the length of 8 characters. However, a 8 character string needs a terminating 0. That zero has overwritten the first byte of the Redzone field. After reporting the details of the issue encountered the FIX SLUB message tells us that SLUB has restored the Redzone to its proper value and then system operations continue. ”h]”(hÌ)�”}”(hŒbReport on how the problem was dealt with in order to ensure the continued operation of the system.”h]”hŒbReport on how the problem was dealt with in order to ensure the continued operation of the system.”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjzubhÌ)�”}”(hŒ5These are messages in the system log beginning with::”h]”hŒ4These are messages in the system log beginning with:”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M"hjzubjB)�”}”(hŒ4FIX : ”h]”hŒ4FIX : ”…”�”}”hjšsbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´M$hjzubhÌ)�”}”(hX×In the above sample SLUB found that the Redzone of an active object has been overwritten. Here a string of 8 characters was written into a slab that has the length of 8 characters. However, a 8 character string needs a terminating 0. That zero has overwritten the first byte of the Redzone field. After reporting the details of the issue encountered the FIX SLUB message tells us that SLUB has restored the Redzone to its proper value and then system operations continue.”h]”hX×In the above sample SLUB found that the Redzone of an active object has been overwritten. Here a string of 8 characters was written into a slab that has the length of 8 characters. However, a 8 character string needs a terminating 0. That zero has overwritten the first byte of the Redzone field. After reporting the details of the issue encountered the FIX SLUB message tells us that SLUB has restored the Redzone to its proper value and then system operations continue.”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M&hjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÝhjÚh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1jØhj�h²hh³hÊh´Kéubeh}”(h]”Œslub-debug-output”ah ]”h"]”Œslub debug output”ah$]”h&]”uh1hµhjsh²hh³hÊh´K»ubh¶)�”}”(hhh]”(h»)�”}”(hŒEmergency operations”h]”hŒEmergency operations”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÏh²hh³hÊh´M/ubhÌ)�”}”(hŒHMinimal debugging (sanity checks alone) can be enabled by booting with::”h]”hŒGMinimal debugging (sanity checks alone) can be enabled by booting with:”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M1hjÏh²hubjB)�”}”(hŒ slab_debug=F”h]”hŒ slab_debug=F”…”�”}”hjîsbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´M3hjÏh²hubhÌ)�”}”(hXŽThis will be generally be enough to enable the resiliency features of slub which will keep the system running even if a bad kernel component will keep corrupting objects. This may be important for production systems. Performance will be impacted by the sanity checks and there will be a continual stream of error messages to the syslog but no additional memory will be used (unlike full debugging).”h]”hXŽThis will be generally be enough to enable the resiliency features of slub which will keep the system running even if a bad kernel component will keep corrupting objects. This may be important for production systems. Performance will be impacted by the sanity checks and there will be a continual stream of error messages to the syslog but no additional memory will be used (unlike full debugging).”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M5hjÏh²hubhÌ)�”}”(hŒ½No guarantees. The kernel component still needs to be fixed. Performance may be optimized further by locating the slab that experiences corruption and enabling debugging only for that cache”h]”hŒ½No guarantees. The kernel component still needs to be fixed. Performance may be optimized further by locating the slab that experiences corruption and enabling debugging only for that cache”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M<hjÏh²hubhÌ)�”}”(hŒI.e.::”h]”hŒI.e.:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M@hjÏh²hubjB)�”}”(hŒslab_debug=F,dentry”h]”hŒslab_debug=F,dentry”…”�”}”hj&sbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´MBhjÏh²hubhÌ)�”}”(hŒ¡If the corruption occurs by writing after the end of the object then it may be advisable to enable a Redzone to avoid corrupting the beginning of other objects::”h]”hŒ If the corruption occurs by writing after the end of the object then it may be advisable to enable a Redzone to avoid corrupting the beginning of other objects:”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MDhjÏh²hubjB)�”}”(hŒslab_debug=FZ,dentry”h]”hŒslab_debug=FZ,dentry”…”�”}”hjBsbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´MHhjÏh²hubeh}”(h]”Œemergency-operations”ah ]”h"]”Œemergency operations”ah$]”h&]”uh1hµhjsh²hh³hÊh´M/ubh¶)�”}”(hhh]”(h»)�”}”(hŒ#Extended slabinfo mode and plotting”h]”hŒ#Extended slabinfo mode and plotting”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjXh²hh³hÊh´MKubj¥)�”}”(hhh]”jª)�”}”(hŒÏThe ``slabinfo`` tool has a special 'extended' ('-X') mode that includes: - Slabcache Totals - Slabs sorted by size (up to -N slabs, default 1) - Slabs sorted by loss (up to -N slabs, default 1) ”h]”(j°)�”}”(hŒIThe ``slabinfo`` tool has a special 'extended' ('-X') mode that includes:”h]”(hŒThe ”…”�”}”(hjph²hh³Nh´Nubhä)�”}”(hŒ ``slabinfo``”h]”hŒslabinfo”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjpubhŒA tool has a special ‘extended’ (‘-X’) mode that includes:”…”�”}”(hjph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¯h³hÊh´MPhjlubjÀ)�”}”(hhh]”hŒ bullet_list”“”)�”}”(hhh]”(jÞ)�”}”(hŒSlabcache Totals”h]”hÌ)�”}”(hjšh]”hŒSlabcache Totals”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MNhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝhj•ubjÞ)�”}”(hŒ6Slabs sorted by size (up to -N slabs, default 1)”h]”hÌ)�”}”(hj±h]”hŒ6Slabs sorted by size (up to -N slabs, default 1)”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MOhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝhj•ubjÞ)�”}”(hŒ7Slabs sorted by loss (up to -N slabs, default 1) ”h]”hÌ)�”}”(hŒ6Slabs sorted by loss (up to -N slabs, default 1)”h]”hŒ6Slabs sorted by loss (up to -N slabs, default 1)”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MPhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝhj•ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j“h³hÊh´MNhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¿hjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´MPhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤hjXh²hh³Nh´NubhÌ)�”}”(hX Additionally, in this mode ``slabinfo`` does not dynamically scale sizes (G/M/K) and reports everything in bytes (this functionality is also available to other slabinfo modes via '-B' option) which makes reporting more precise and accurate. Moreover, in some sense the `-X' mode also simplifies the analysis of slabs' behaviour, because its output can be plotted using the ``slabinfo-gnuplot.sh`` script. So it pushes the analysis from looking through the numbers (tons of numbers) to something easier -- visual analysis.”h]”(hŒAdditionally, in this mode ”…”�”}”(hjøh²hh³Nh´Nubhä)�”}”(hŒ ``slabinfo``”h]”hŒslabinfo”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjøubhŒê does not dynamically scale sizes (G/M/K) and reports everything in bytes (this functionality is also available to other slabinfo modes via ‘-B’ option) which makes reporting more precise and accurate. Moreover, in some sense the ”…”�”}”(hjøh²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ`-X' mode also simplifies the analysis of slabs' behaviour, because its output can be plotted using the ``slabinfo-gnuplot.sh``”h]”hŒ�-X’ mode also simplifies the analysis of slabs’ behaviour, because its output can be plotted using the ``slabinfo-gnuplot.sh`”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjøubhŒ} script. So it pushes the analysis from looking through the numbers (tons of numbers) to something easier -- visual analysis.”…”�”}”(hjøh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MRhjXh²hubhÌ)�”}”(hŒTo generate plots:”h]”hŒTo generate plots:”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M[hjXh²hubjÙ)�”}”(hhh]”(jÞ)�”}”(hŒocollect slabinfo extended records, for example:: while [ 1 ]; do slabinfo -X >> FOO_STATS; sleep 1; done ”h]”(hÌ)�”}”(hŒ0collect slabinfo extended records, for example::”h]”hŒ/collect slabinfo extended records, for example:”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M]hj= ubjB)�”}”(hŒ7while [ 1 ]; do slabinfo -X >> FOO_STATS; sleep 1; done”h]”hŒ7while [ 1 ]; do slabinfo -X >> FOO_STATS; sleep 1; done”…”�”}”hjO sbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´M_hj= ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÝhj: h²hh³hÊh´NubjÞ)�”}”(hX¢pass stats file(-s) to ``slabinfo-gnuplot.sh`` script:: slabinfo-gnuplot.sh FOO_STATS [FOO_STATS2 .. FOO_STATSN] The ``slabinfo-gnuplot.sh`` script will pre-processes the collected records and generates 3 png files (and 3 pre-processing cache files) per STATS file: - Slabcache Totals: FOO_STATS-totals.png - Slabs sorted by size: FOO_STATS-slabs-by-size.png - Slabs sorted by loss: FOO_STATS-slabs-by-loss.png ”h]”(hÌ)�”}”(hŒ7pass stats file(-s) to ``slabinfo-gnuplot.sh`` script::”h]”(hŒpass stats file(-s) to ”…”�”}”(hjg h²hh³Nh´Nubhä)�”}”(hŒ``slabinfo-gnuplot.sh``”h]”hŒslabinfo-gnuplot.sh”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjg ubhŒ script:”…”�”}”(hjg h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mahjc ubjB)�”}”(hŒ8slabinfo-gnuplot.sh FOO_STATS [FOO_STATS2 .. FOO_STATSN]”h]”hŒ8slabinfo-gnuplot.sh FOO_STATS [FOO_STATS2 .. FOO_STATSN]”…”�”}”hj‡ sbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´Mchjc ubhÌ)�”}”(hX)The ``slabinfo-gnuplot.sh`` script will pre-processes the collected records and generates 3 png files (and 3 pre-processing cache files) per STATS file: - Slabcache Totals: FOO_STATS-totals.png - Slabs sorted by size: FOO_STATS-slabs-by-size.png - Slabs sorted by loss: FOO_STATS-slabs-by-loss.png”h]”(hŒThe ”…”�”}”(hj• h²hh³Nh´Nubhä)�”}”(hŒ``slabinfo-gnuplot.sh``”h]”hŒslabinfo-gnuplot.sh”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhj• ubhX script will pre-processes the collected records and generates 3 png files (and 3 pre-processing cache files) per STATS file: - Slabcache Totals: FOO_STATS-totals.png - Slabs sorted by size: FOO_STATS-slabs-by-size.png - Slabs sorted by loss: FOO_STATS-slabs-by-loss.png”…”�”}”(hj• h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mehjc ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÝhj: h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jÂŒ loweralpha”jÄhjÅŒ)”uh1jØhjXh²hh³hÊh´M]ubhÌ)�”}”(hX6Another use case, when ``slabinfo-gnuplot.sh`` can be useful, is when you need to compare slabs' behaviour "prior to" and "after" some code modification. To help you out there, ``slabinfo-gnuplot.sh`` script can 'merge' the `Slabcache Totals` sections from different measurements. To visually compare N plots:”h]”(hŒAnother use case, when ”…”�”}”(hjà h²hh³Nh´Nubhä)�”}”(hŒ``slabinfo-gnuplot.sh``”h]”hŒslabinfo-gnuplot.sh”…”�”}”(hjË h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjà ubhŒŽ can be useful, is when you need to compare slabs’ behaviour “prior toâ€� and “afterâ€� some code modification. To help you out there, ”…”�”}”(hjà h²hh³Nh´Nubhä)�”}”(hŒ``slabinfo-gnuplot.sh``”h]”hŒslabinfo-gnuplot.sh”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjà ubhŒ script can ‘merge’ the ”…”�”}”(hjà h²hh³Nh´Nubj )�”}”(hŒ`Slabcache Totals`”h]”hŒSlabcache Totals”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjà ubhŒC sections from different measurements. To visually compare N plots:”…”�”}”(hjà h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MlhjXh²hubjÙ)�”}”(hhh]”(jÞ)�”}”(hŒ{Collect as many STATS1, STATS2, .. STATSN files as you need:: while [ 1 ]; do slabinfo -X >> STATS; sleep 1; done ”h]”(hÌ)�”}”(hŒ=Collect as many STATS1, STATS2, .. STATSN files as you need::”h]”hŒ> STATS; sleep 1; done”h]”hŒ6while [ 1 ]; do slabinfo -X >> STATS; sleep 1; done”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´Mthj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÝhj h²hh³hÊh´NubjÞ)�”}”(hŒRPre-process those STATS files:: slabinfo-gnuplot.sh STATS1 STATS2 .. STATSN ”h]”(hÌ)�”}”(hŒPre-process those STATS files::”h]”hŒPre-process those STATS files:”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mvhj0 ubjB)�”}”(hŒ+slabinfo-gnuplot.sh STATS1 STATS2 .. STATSN”h]”hŒ+slabinfo-gnuplot.sh STATS1 STATS2 .. STATSN”…”�”}”hjB sbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´Mxhj0 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÝhj h²hh³hÊh´NubjÞ)�”}”(hX¥Execute ``slabinfo-gnuplot.sh`` in '-t' mode, passing all of the generated pre-processed \*-totals:: slabinfo-gnuplot.sh -t STATS1-totals STATS2-totals .. STATSN-totals This will produce a single plot (png file). Plots, expectedly, can be large so some fluctuations or small spikes can go unnoticed. To deal with that, ``slabinfo-gnuplot.sh`` has two options to 'zoom-in'/'zoom-out': a) ``-s %d,%d`` -- overwrites the default image width and height b) ``-r %d,%d`` -- specifies a range of samples to use (for example, in ``slabinfo -X >> FOO_STATS; sleep 1;`` case, using a ``-r 40,60`` range will plot only samples collected between 40th and 60th seconds). ”h]”(hÌ)�”}”(hŒdExecute ``slabinfo-gnuplot.sh`` in '-t' mode, passing all of the generated pre-processed \*-totals::”h]”(hŒExecute ”…”�”}”(hjZ h²hh³Nh´Nubhä)�”}”(hŒ``slabinfo-gnuplot.sh``”h]”hŒslabinfo-gnuplot.sh”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjZ ubhŒH in ‘-t’ mode, passing all of the generated pre-processed *-totals:”…”�”}”(hjZ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MzhjV ubjB)�”}”(hŒCslabinfo-gnuplot.sh -t STATS1-totals STATS2-totals .. STATSN-totals”h]”hŒCslabinfo-gnuplot.sh -t STATS1-totals STATS2-totals .. STATSN-totals”…”�”}”hjz sbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´M}hjV ubhÌ)�”}”(hŒ+This will produce a single plot (png file).”h]”hŒ+This will produce a single plot (png file).”…”�”}”(hjˆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjV ubhÌ)�”}”(hŒªPlots, expectedly, can be large so some fluctuations or small spikes can go unnoticed. To deal with that, ``slabinfo-gnuplot.sh`` has two options to 'zoom-in'/'zoom-out':”h]”(hŒjPlots, expectedly, can be large so some fluctuations or small spikes can go unnoticed. To deal with that, ”…”�”}”(hj– h²hh³Nh´Nubhä)�”}”(hŒ``slabinfo-gnuplot.sh``”h]”hŒslabinfo-gnuplot.sh”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhj– ubhŒ1 has two options to ‘zoom-in’/’zoom-out’:”…”�”}”(hj– h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M�hjV ubjÙ)�”}”(hhh]”(jÞ)�”}”(hŒ=``-s %d,%d`` -- overwrites the default image width and height”h]”hÌ)�”}”(hj» h]”(hä)�”}”(hŒ ``-s %d,%d``”h]”hŒ-s %d,%d”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhj½ ubhŒ1 -- overwrites the default image width and height”…”�”}”(hj½ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M…hj¹ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝhj¶ ubjÞ)�”}”(hŒÏ``-r %d,%d`` -- specifies a range of samples to use (for example, in ``slabinfo -X >> FOO_STATS; sleep 1;`` case, using a ``-r 40,60`` range will plot only samples collected between 40th and 60th seconds). ”h]”hÌ)�”}”(hŒÍ``-r %d,%d`` -- specifies a range of samples to use (for example, in ``slabinfo -X >> FOO_STATS; sleep 1;`` case, using a ``-r 40,60`` range will plot only samples collected between 40th and 60th seconds).”h]”(hä)�”}”(hŒ ``-r %d,%d``”h]”hŒ-r %d,%d”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjâ ubhŒ9 -- specifies a range of samples to use (for example, in ”…”�”}”(hjâ h²hh³Nh´Nubhä)�”}”(hŒ&``slabinfo -X >> FOO_STATS; sleep 1;``”h]”hŒ"slabinfo -X >> FOO_STATS; sleep 1;”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjâ ubhŒ case, using a ”…”�”}”(hjâ h²hh³Nh´Nubhä)�”}”(hŒ ``-r 40,60``”h]”hŒ-r 40,60”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãhjâ ubhŒG range will plot only samples collected between 40th and 60th seconds).”…”�”}”(hjâ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M†hjÞ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÝhj¶ ubeh}”(h]”h ]”h"]”h$]”h&]”jÂjÁ jÄhjÅj uh1jØhjV ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÝhj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jÂjÁ jÄhjÅj uh1jØhjXh²hh³hÊh´Mrubeh}”(h]”Œ#extended-slabinfo-mode-and-plotting”ah ]”h"]”Œ#extended slabinfo mode and plotting”ah$]”h&]”uh1hµhjsh²hh³hÊh´MKubh¶)�”}”(hhh]”(h»)�”}”(hŒDebugFS files for SLUB”h]”hŒDebugFS files for SLUB”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjB h²hh³hÊh´M�ubhÌ)�”}”(hX.For more information about current state of SLUB caches with the user tracking debug option enabled, debugfs files are available, typically under /sys/kernel/debug/slab// (created only for caches with enabled user tracking). There are 2 types of these files with the following debug information:”h]”hX.For more information about current state of SLUB caches with the user tracking debug option enabled, debugfs files are available, typically under /sys/kernel/debug/slab// (created only for caches with enabled user tracking). There are 2 types of these files with the following debug information:”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M�hjB h²hubjÙ)�”}”(hhh]”(jÞ)�”}”(hXzalloc_traces:: Prints information about unique allocation traces of the currently allocated objects. The output is sorted by frequency of each trace. Information in the output: Number of objects, allocating function, possible memory wastage of kmalloc objects(total/per-object), minimal/average/maximal jiffies since alloc, pid range of the allocating processes, cpu mask of allocating cpus, numa node mask of origins of memory, and stack trace. Example::: 338 pci_alloc_dev+0x2c/0xa0 waste=521872/1544 age=290837/291891/293509 pid=1 cpus=106 nodes=0-1 __kmem_cache_alloc_node+0x11f/0x4e0 kmalloc_trace+0x26/0xa0 pci_alloc_dev+0x2c/0xa0 pci_scan_single_device+0xd2/0x150 pci_scan_slot+0xf7/0x2d0 pci_scan_child_bus_extend+0x4e/0x360 acpi_pci_root_create+0x32e/0x3b0 pci_acpi_scan_root+0x2b9/0x2d0 acpi_pci_root_add.cold.11+0x110/0xb0a acpi_bus_attach+0x262/0x3f0 device_for_each_child+0xb7/0x110 acpi_dev_for_each_child+0x77/0xa0 acpi_bus_attach+0x108/0x3f0 device_for_each_child+0xb7/0x110 acpi_dev_for_each_child+0x77/0xa0 acpi_bus_attach+0x108/0x3f0 ”h]”(hÌ)�”}”(hŒalloc_traces::”h]”hŒ alloc_traces:”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M•hjd ubjB)�”}”(hXPPrints information about unique allocation traces of the currently allocated objects. The output is sorted by frequency of each trace. Information in the output: Number of objects, allocating function, possible memory wastage of kmalloc objects(total/per-object), minimal/average/maximal jiffies since alloc, pid range of the allocating processes, cpu mask of allocating cpus, numa node mask of origins of memory, and stack trace. Example::: 338 pci_alloc_dev+0x2c/0xa0 waste=521872/1544 age=290837/291891/293509 pid=1 cpus=106 nodes=0-1 __kmem_cache_alloc_node+0x11f/0x4e0 kmalloc_trace+0x26/0xa0 pci_alloc_dev+0x2c/0xa0 pci_scan_single_device+0xd2/0x150 pci_scan_slot+0xf7/0x2d0 pci_scan_child_bus_extend+0x4e/0x360 acpi_pci_root_create+0x32e/0x3b0 pci_acpi_scan_root+0x2b9/0x2d0 acpi_pci_root_add.cold.11+0x110/0xb0a acpi_bus_attach+0x262/0x3f0 device_for_each_child+0xb7/0x110 acpi_dev_for_each_child+0x77/0xa0 acpi_bus_attach+0x108/0x3f0 device_for_each_child+0xb7/0x110 acpi_dev_for_each_child+0x77/0xa0 acpi_bus_attach+0x108/0x3f0”h]”hXPPrints information about unique allocation traces of the currently allocated objects. The output is sorted by frequency of each trace. Information in the output: Number of objects, allocating function, possible memory wastage of kmalloc objects(total/per-object), minimal/average/maximal jiffies since alloc, pid range of the allocating processes, cpu mask of allocating cpus, numa node mask of origins of memory, and stack trace. Example::: 338 pci_alloc_dev+0x2c/0xa0 waste=521872/1544 age=290837/291891/293509 pid=1 cpus=106 nodes=0-1 __kmem_cache_alloc_node+0x11f/0x4e0 kmalloc_trace+0x26/0xa0 pci_alloc_dev+0x2c/0xa0 pci_scan_single_device+0xd2/0x150 pci_scan_slot+0xf7/0x2d0 pci_scan_child_bus_extend+0x4e/0x360 acpi_pci_root_create+0x32e/0x3b0 pci_acpi_scan_root+0x2b9/0x2d0 acpi_pci_root_add.cold.11+0x110/0xb0a acpi_bus_attach+0x262/0x3f0 device_for_each_child+0xb7/0x110 acpi_dev_for_each_child+0x77/0xa0 acpi_bus_attach+0x108/0x3f0 device_for_each_child+0xb7/0x110 acpi_dev_for_each_child+0x77/0xa0 acpi_bus_attach+0x108/0x3f0”…”�”}”hjv sbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´M—hjd ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÝhja h²hh³hÊh´NubjÞ)�”}”(hXØfree_traces:: Prints information about unique freeing traces of the currently allocated objects. The freeing traces thus come from the previous life-cycle of the objects and are reported as not available for objects allocated for the first time. The output is sorted by frequency of each trace. Information in the output: Number of objects, freeing function, minimal/average/maximal jiffies since free, pid range of the freeing processes, cpu mask of freeing cpus, and stack trace. Example::: 1980 age=4294912290 pid=0 cpus=0 51 acpi_ut_update_ref_count+0x6a6/0x782 age=236886/237027/237772 pid=1 cpus=1 kfree+0x2db/0x420 acpi_ut_update_ref_count+0x6a6/0x782 acpi_ut_update_object_reference+0x1ad/0x234 acpi_ut_remove_reference+0x7d/0x84 acpi_rs_get_prt_method_data+0x97/0xd6 acpi_get_irq_routing_table+0x82/0xc4 acpi_pci_irq_find_prt_entry+0x8e/0x2e0 acpi_pci_irq_lookup+0x3a/0x1e0 acpi_pci_irq_enable+0x77/0x240 pcibios_enable_device+0x39/0x40 do_pci_enable_device.part.0+0x5d/0xe0 pci_enable_device_flags+0xfc/0x120 pci_enable_device+0x13/0x20 virtio_pci_probe+0x9e/0x170 local_pci_probe+0x48/0x80 pci_device_probe+0x105/0x1c0 ”h]”(hÌ)�”}”(hŒ free_traces::”h]”hŒ free_traces:”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M´hjŠ ubjB)�”}”(hX®Prints information about unique freeing traces of the currently allocated objects. The freeing traces thus come from the previous life-cycle of the objects and are reported as not available for objects allocated for the first time. The output is sorted by frequency of each trace. Information in the output: Number of objects, freeing function, minimal/average/maximal jiffies since free, pid range of the freeing processes, cpu mask of freeing cpus, and stack trace. Example::: 1980 age=4294912290 pid=0 cpus=0 51 acpi_ut_update_ref_count+0x6a6/0x782 age=236886/237027/237772 pid=1 cpus=1 kfree+0x2db/0x420 acpi_ut_update_ref_count+0x6a6/0x782 acpi_ut_update_object_reference+0x1ad/0x234 acpi_ut_remove_reference+0x7d/0x84 acpi_rs_get_prt_method_data+0x97/0xd6 acpi_get_irq_routing_table+0x82/0xc4 acpi_pci_irq_find_prt_entry+0x8e/0x2e0 acpi_pci_irq_lookup+0x3a/0x1e0 acpi_pci_irq_enable+0x77/0x240 pcibios_enable_device+0x39/0x40 do_pci_enable_device.part.0+0x5d/0xe0 pci_enable_device_flags+0xfc/0x120 pci_enable_device+0x13/0x20 virtio_pci_probe+0x9e/0x170 local_pci_probe+0x48/0x80 pci_device_probe+0x105/0x1c0”h]”hX®Prints information about unique freeing traces of the currently allocated objects. The freeing traces thus come from the previous life-cycle of the objects and are reported as not available for objects allocated for the first time. The output is sorted by frequency of each trace. Information in the output: Number of objects, freeing function, minimal/average/maximal jiffies since free, pid range of the freeing processes, cpu mask of freeing cpus, and stack trace. Example::: 1980 age=4294912290 pid=0 cpus=0 51 acpi_ut_update_ref_count+0x6a6/0x782 age=236886/237027/237772 pid=1 cpus=1 kfree+0x2db/0x420 acpi_ut_update_ref_count+0x6a6/0x782 acpi_ut_update_object_reference+0x1ad/0x234 acpi_ut_remove_reference+0x7d/0x84 acpi_rs_get_prt_method_data+0x97/0xd6 acpi_get_irq_routing_table+0x82/0xc4 acpi_pci_irq_find_prt_entry+0x8e/0x2e0 acpi_pci_irq_lookup+0x3a/0x1e0 acpi_pci_irq_enable+0x77/0x240 pcibios_enable_device+0x39/0x40 do_pci_enable_device.part.0+0x5d/0xe0 pci_enable_device_flags+0xfc/0x120 pci_enable_device+0x13/0x20 virtio_pci_probe+0x9e/0x170 local_pci_probe+0x48/0x80 pci_device_probe+0x105/0x1c0”…”�”•Å }”hjœ sbah}”(h]”h ]”h"]”h$]”h&]”jQjRuh1jAh³hÊh´M¶hjŠ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÝhja h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jÂjÃjÄhjÅjÆuh1jØhjB h²hh³hÊh´M•ubhÌ)�”}”(hŒDChristoph Lameter, May 30, 2007 Sergey Senozhatsky, October 23, 2015”h]”hŒDChristoph Lameter, May 30, 2007 Sergey Senozhatsky, October 23, 2015”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÔhjB h²hubeh}”(h]”Œdebugfs-files-for-slub”ah ]”h"]”Œdebugfs files for slub”ah$]”h&]”uh1hµhjsh²hh³hÊh´M�ubeh}”(h]”Œ*some-more-sophisticated-uses-of-slab-debug”ah ]”h"]”Œ+some more sophisticated uses of slab_debug:”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubeh}”(h]”Œ(short-users-guide-for-the-slab-allocator”ah ]”h"]”Œ(short users guide for the slab allocator”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jÿ Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jÙ jÖ jÑ jÎ j�jŒjjjšj—jÌjÉjUjRj? j< jÉ jÆ uŒ nametypes”}”(jÙ ‰jÑ ‰j�‰j‰jš‰j̉jU‰j? ‰jÉ ‰uh}”(jÖ h·jÎ jsjŒjYjj’j—jjÉj�jRjÏj< jXjÆ jB uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.