.. SPDX-License-Identifier: GPL-2.0 .. include:: ../disclaimer-zh_CN.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çš„ä¿¡æ¯ã€‚