.. SPDX-License-Identifier: GPL-2.0 .. include:: ../disclaimer-zh_TW.rst :Original: Documentation/admin-guide/cputopology.rst :çż»čŻ: ĺ”č—ťčź Tang Yizhou <tangyeechou@gmail.com> ========================== 如何通éŽsysfsĺ°‡CPU拓撲導出 ========================== CPU拓撲信ćŻé€šéŽsysfsĺ°Žĺ‡şă€‚éˇŻç¤şçš„é …ďĽĺ±¬ć€§ďĽ‰ĺ’Śćźäş›ćž¶ć§‹çš„/proc/cpuinfo輸出相似。ĺ®ĺ€‘位於 /sys/devices/system/cpu/cpuX/topology/。請閱讀ABI文件: Documentation/ABI/stable/sysfs-devices-system-cpu。 drivers/base/topology.cćŻé«”çł»çµć§‹ä¸ć€§çš„,ĺ®ĺ°Žĺ‡şäş†é€™äş›ĺ±¬ć€§ă€‚然而,dieă€clusteră€book〠draw這些層次çµć§‹ç›¸é—śçš„文件ĺ…在體系çµć§‹ćŹäľ›äş†ä¸‹ć–‡ćŹŹčż°çš„ĺ®Źçš„ć˘ťä»¶ä¸‹č˘«ĺ‰µĺ»şă€‚ 對於支ćŚé€™ĺ€‹ç‰ąć€§çš„體系çµć§‹ďĽŚĺ®ĺż…é 在include/asm-XXX/topology.hä¸ĺ®šçľ©é€™äş›ĺ®Źä¸çš„一é¨ĺ†:: #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) ``**_id macros`` 的類型ćŻint。 ``**_cpumask macros`` çš„éˇžĺž‹ćŻ ``(const) struct cpumask *`` 。後者和ć°ç•¶çš„ ``**_siblings`` sysfs屬性對應ďĽé™¤äş†topology_sibling_cpumask(),ĺ®ĺ’Śthread_siblings 對應)。 ç˛äş†ĺś¨ć‰€ćś‰é«”çł»çµć§‹ä¸ŠäżťćŚä¸€č‡´ďĽŚinclude/linux/topology.hćŹäľ›äş†ä¸Ščż°ć‰€ćś‰ĺ®Źçš„é»čŞŤĺ®šçľ©ďĽŚä»Ąé˛ ĺ®ĺ€‘未在include/asm-XXX/topology.hä¸ĺ®šçľ©: 1) topology_physical_package_id: -1 2) topology_die_id: -1 3) topology_cluster_id: -1 4) topology_core_id: 0 5) topology_book_id: -1 6) topology_drawer_id: -1 7) topology_sibling_cpumask: ĺ…ĺ…ĄĺŹCPU 8) topology_core_cpumask: ĺ…ĺ…ĄĺŹCPU 9) topology_cluster_cpumask: ĺ…ĺ…ĄĺŹCPU 10) topology_die_cpumask: ĺ…ĺ…ĄĺŹCPU 11) topology_book_cpumask: ĺ…ĺ…ĄĺŹCPU 12) topology_drawer_cpumask: ĺ…ĺ…ĄĺŹCPU ć¤ĺ¤–,CPU拓撲信ćŻç”±/sys/devices/system/cpućŹäľ›ďĽŚĺŚ…ĺ«ä¸‹čż°ć–‡ä»¶ă€‚輸出對應的內é¨ć•¸ć“šćşć”ľĺś¨ 方括號ďĽ"[]")ä¸ă€‚ =========== ================================================================== 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] =========== ================================================================== ä¸Ščż°čĽ¸ĺ‡şçš„ć ĽĺĽŹĺ’Ścpulist_parse()兼容[ĺŹč¦‹ <linux/cpumask.h>]。下面給些例ĺ。 在本例ä¸ďĽŚçł»çµ±ä¸ćś‰64個CPU,但ćŻCPU 32-63č¶…éŽäş†kernel_maxĺ€ĽďĽŚĺ› ç˛NR_CPUSé…Ťç˝®é …ćŻ32, 取值範圍被é™ĺ¶ç˛0..31。ć¤ĺ¤–注意CPU2ĺ’Ś4-31未上線,但ćŻĺŹŻä»Ąä¸Šç·šďĽŚĺ› ç˛ĺ®ĺ€‘ĺŚć™‚ĺ在於 presentĺ’Śpossible:: kernel_max: 31 offline: 2,4-31,32-63 online: 0-1,3 possible: 0-31 present: 0-31 在本例ä¸ďĽŚNR_CPUSé…Ťç˝®é …ćŻ128ďĽŚä˝†ĺ…§ć ¸ĺ•“ĺ‹•ć™‚č¨ç˝®possible_cpus=144。系統ä¸ćś‰4個CPU, CPU2被手動č¨ç˝®ä¸‹ç·šďĽäąźćŻĺ”Żä¸€ä¸€ĺ€‹ĺŹŻä»Ąä¸Šç·šçš„CPU):: kernel_max: 127 offline: 2,4-127,128-143 online: 0-1,3 possible: 0-127 present: 0-3 閱讀Documentation/core-api/cpu_hotplug.rst可çžč§Łé–‹ć©źĺŹć•¸possible_cpus=NUM,ĺŚć™‚é‚„ 可以çžč§Łĺ„種cpumask的信ćŻă€‚