Nsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/admin-guide/cputopologymodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/zh_TW/admin-guide/cputopologymodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/it_IT/admin-guide/cputopologymodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ja_JP/admin-guide/cputopologymodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ko_KR/admin-guide/cputopologymodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/sp_SP/admin-guide/cputopologymodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhX/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/admin-guide/cputopology.rsthKubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h*Documentation/admin-guide/cputopology.rst h]h)}(h)Documentation/admin-guide/cputopology.rsth]h)Documentation/admin-guide/cputopology.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhKubh)}(h.唐艺舟 Tang Yizhou h]h)}(h-唐艺舟 Tang Yizhou h](h唐艺舟 Tang Yizhou <}(hj hhhNhNubh reference)}(htangyeechou@gmail.comh]htangyeechou@gmail.com}(hj*hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:tangyeechou@gmail.comuh1j(hj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhsection)}(hhh](htitle)}(h#如何通过sysfs将CPU拓扑导出h]h#如何通过sysfs将CPU拓扑导出}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjXhhhhhK ubh)}(hCPU拓扑信息通过sysfs导出。显示的项(属性)和某些架构的/proc/cpuinfo输出相似。它们位于 /sys/devices/system/cpu/cpuX/topology/。请阅读ABI文件: Documentation/ABI/stable/sysfs-devices-system-cpu。h]hCPU拓扑信息通过sysfs导出。显示的项(属性)和某些架构的/proc/cpuinfo输出相似。它们位于 /sys/devices/system/cpu/cpuX/topology/。请阅读ABI文件: Documentation/ABI/stable/sysfs-devices-system-cpu。}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubh)}(hdrivers/base/topology.c是体系结构中性的,它导出了这些属性。然而,die、cluster、book、 draw这些层次结构相关的文件仅在体系结构提供了下文描述的宏的条件下被创建。h]hdrivers/base/topology.c是体系结构中性的,它导出了这些属性。然而,die、cluster、book、 draw这些层次结构相关的文件仅在体系结构提供了下文描述的宏的条件下被创建。}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubh)}(hs对于支持这个特性的体系结构,它必须在include/asm-XXX/topology.h中定义这些宏中的一部分::h]hr对于支持这个特性的体系结构,它必须在include/asm-XXX/topology.h中定义这些宏中的一部分:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubh literal_block)}(hX#define topology_physical_package_id(cpu) #define topology_die_id(cpu) #define topology_cluster_id(cpu) #define topology_core_id(cpu) #define topology_book_id(cpu) #define topology_drawer_id(cpu) #define topology_sibling_cpumask(cpu) #define topology_core_cpumask(cpu) #define topology_cluster_cpumask(cpu) #define topology_die_cpumask(cpu) #define topology_book_cpumask(cpu) #define topology_drawer_cpumask(cpu)h]hX#define topology_physical_package_id(cpu) #define topology_die_id(cpu) #define topology_cluster_id(cpu) #define topology_core_id(cpu) #define topology_book_id(cpu) #define topology_drawer_id(cpu) #define topology_sibling_cpumask(cpu) #define topology_core_cpumask(cpu) #define topology_cluster_cpumask(cpu) #define topology_die_cpumask(cpu) #define topology_book_cpumask(cpu) #define topology_drawer_cpumask(cpu)}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjXhhubh)}(h``**_id macros`` 的类型是int。 ``**_cpumask macros`` 的类型是 ``(const) struct cpumask *`` 。后者和恰当的 ``**_siblings`` sysfs属性对应(除了topology_sibling_cpumask(),它和thread_siblings 对应)。h](hliteral)}(h``**_id macros``h]h **_id macros}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 的类型是int。 }(hjhhhNhNubj)}(h``**_cpumask macros``h]h**_cpumask macros}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 的类型是 }(hjhhhNhNubj)}(h``(const) struct cpumask *``h]h(const) struct cpumask *}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 。后者和恰当的 }(hjhhhNhNubj)}(h``**_siblings``h]h **_siblings}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhZ sysfs属性对应(除了topology_sibling_cpumask(),它和thread_siblings 对应)。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK$hjXhhubh)}(h为了在所有体系结构上保持一致,include/linux/topology.h提供了上述所有宏的默认定义,以防 它们未在include/asm-XXX/topology.h中定义:h]h为了在所有体系结构上保持一致,include/linux/topology.h提供了上述所有宏的默认定义,以防 它们未在include/asm-XXX/topology.h中定义:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjXhhubhenumerated_list)}(hhh](h list_item)}(h topology_physical_package_id: -1h]h)}(hjh]h topology_physical_package_id: -1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hjubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(htopology_die_id: -1h]h)}(hj'h]htopology_die_id: -1}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hj%ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(htopology_cluster_id: -1h]h)}(hj>h]htopology_cluster_id: -1}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hj<ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(htopology_core_id: 0h]h)}(hjUh]htopology_core_id: 0}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjSubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(htopology_book_id: -1h]h)}(hjlh]htopology_book_id: -1}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hjjubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(htopology_drawer_id: -1h]h)}(hjh]htopology_drawer_id: -1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h&topology_sibling_cpumask: 仅入参CPUh]h)}(hjh]h&topology_sibling_cpumask: 仅入参CPU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h#topology_core_cpumask: 仅入参CPUh]h)}(hjh]h#topology_core_cpumask: 仅入参CPU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h&topology_cluster_cpumask: 仅入参CPUh]h)}(hjh]h&topology_cluster_cpumask: 仅入参CPU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK4hjubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h"topology_die_cpumask: 仅入参CPUh]h)}(hjh]h"topology_die_cpumask: 仅入参CPU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h$topology_book_cpumask: 仅入参CPUh]h)}(hjh]h$topology_book_cpumask: 仅入参CPU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hjubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(h&topology_drawer_cpumask: 仅入参CPU h]h)}(h%topology_drawer_cpumask: 仅入参CPUh]h%topology_drawer_cpumask: 仅入参CPU}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix)uh1jhjXhhhhhK,ubh)}(h此外,CPU拓扑信息由/sys/devices/system/cpu提供,包含下述文件。输出对应的内部数据源放在 方括号("[]")中。h]h此外,CPU拓扑信息由/sys/devices/system/cpu提供,包含下述文件。输出对应的内部数据源放在 方括号(”[]”)中。}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK9hjXhhubh block_quote)}(hX=========== ================================================================== kernel_max: 内核配置允许的最大CPU下标值。[NR_CPUS-1] offline: 由于热插拔移除或者超过内核允许的CPU上限(上文描述的kernel_max) 导致未上线的CPU。[~cpu_online_mask + cpus >= NR_CPUS] online: 在线的CPU,可供调度使用。[cpu_online_mask] possible: 已被分配资源的CPU,如果它们CPU实际存在,可以上线。 [cpu_possible_mask] present: 被系统识别实际存在的CPU。[cpu_present_mask] =========== ================================================================== h]htable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jLhjIubjM)}(hhh]h}(h]h ]h"]h$]h&]colwidthKBuh1jLhjIubhtbody)}(hhh](hrow)}(hhh](hentry)}(hhh]h)}(h kernel_max:h]h kernel_max:}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK=hjnubah}(h]h ]h"]h$]h&]uh1jlhjiubjm)}(hhh]h)}(h5内核配置允许的最大CPU下标值。[NR_CPUS-1]h]h5内核配置允许的最大CPU下标值。[NR_CPUS-1]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK=hjubah}(h]h ]h"]h$]h&]uh1jlhjiubeh}(h]h ]h"]h$]h&]uh1jghjdubjh)}(hhh](jm)}(hhh]h)}(hoffline:h]hoffline:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK?hjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(h由于热插拔移除或者超过内核允许的CPU上限(上文描述的kernel_max) 导致未上线的CPU。[~cpu_online_mask + cpus >= NR_CPUS]h]h由于热插拔移除或者超过内核允许的CPU上限(上文描述的kernel_max) 导致未上线的CPU。[~cpu_online_mask + cpus >= NR_CPUS]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK?hjubah}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjdubjh)}(hhh](jm)}(hhh]h)}(honline:h]honline:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKBhjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(h5在线的CPU,可供调度使用。[cpu_online_mask]h]h5在线的CPU,可供调度使用。[cpu_online_mask]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKBhjubah}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjdubjh)}(hhh](jm)}(hhh]h)}(h possible:h]h possible:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKDhjubah}(h]h ]h"]h$]h&]uh1jlhjubjm)}(hhh]h)}(h\已被分配资源的CPU,如果它们CPU实际存在,可以上线。 [cpu_possible_mask]h]h\已被分配资源的CPU,如果它们CPU实际存在,可以上线。 [cpu_possible_mask]}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKDhj*ubah}(h]h ]h"]h$]h&]uh1jlhjubeh}(h]h ]h"]h$]h&]uh1jghjdubjh)}(hhh](jm)}(hhh]h)}(hpresent:h]hpresent:}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhjJubah}(h]h ]h"]h$]h&]uh1jlhjGubjm)}(hhh]h)}(h6被系统识别实际存在的CPU。[cpu_present_mask]h]h6被系统识别实际存在的CPU。[cpu_present_mask]}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhjaubah}(h]h ]h"]h$]h&]uh1jlhjGubeh}(h]h ]h"]h$]h&]uh1jghjdubeh}(h]h ]h"]h$]h&]uh1jbhjIubeh}(h]h ]h"]h$]h&]colsKuh1jGhjDubah}(h]h ]h"]h$]h&]uh1jBhj>ubah}(h]h ]h"]h$]h&]uh1j<hhhK]。下面给些例子。h]h_上述输出的格式和cpulist_parse()兼容[参见 ]。下面给些例子。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKJhjXhhubh)}(h在本例中,系统中有64个CPU,但是CPU 32-63超过了kernel_max值,因为NR_CPUS配置项是32, 取值范围被限制为0..31。此外注意CPU2和4-31未上线,但是可以上线,因为它们同时存在于 present和possible::h]h在本例中,系统中有64个CPU,但是CPU 32-63超过了kernel_max值,因为NR_CPUS配置项是32, 取值范围被限制为0..31。此外注意CPU2和4-31未上线,但是可以上线,因为它们同时存在于 present和possible:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhjXhhubj)}(h[kernel_max: 31 offline: 2,4-31,32-63 online: 0-1,3 possible: 0-31 present: 0-31h]h[kernel_max: 31 offline: 2,4-31,32-63 online: 0-1,3 possible: 0-31 present: 0-31}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKPhjXhhubh)}(h在本例中,NR_CPUS配置项是128,但内核启动时设置possible_cpus=144。系统中有4个CPU, CPU2被手动设置下线(也是唯一一个可以上线的CPU)::h]h在本例中,NR_CPUS配置项是128,但内核启动时设置possible_cpus=144。系统中有4个CPU, CPU2被手动设置下线(也是唯一一个可以上线的CPU):}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhjXhhubj)}(h_kernel_max: 127 offline: 2,4-127,128-143 online: 0-1,3 possible: 0-127 present: 0-3h]h_kernel_max: 127 offline: 2,4-127,128-143 online: 0-1,3 possible: 0-127 present: 0-3}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKYhjXhhubh)}(h阅读Documentation/core-api/cpu_hotplug.rst可了解开机参数possible_cpus=NUM,同时还 可以了解各种cpumask的信息。h]h阅读Documentation/core-api/cpu_hotplug.rst可了解开机参数possible_cpus=NUM,同时还 可以了解各种cpumask的信息。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK_hjXhhubeh}(h]sysfscpuah ]h"]#如何通过sysfs将cpu拓扑导出ah$]h&]uh1jVhhhhhhhK ubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(j[N generatorN datestampN source_linkN source_urlN toc_backlinksjlfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}jjs nametypes}jsh}jjXs footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log]