Como as informações de topologia de CPU são exportadas via sysfs¶
As informações de topologia de CPU são exportadas via sysfs. Os itens (atributos) são semelhantes à saída de /proc/cpuinfo em algumas arquiteturas. Eles residem em /sys/devices/system/cpu/cpuX/topology/. Por favor, consulte o arquivo de ABI: ABI file stable/sysfs-devices-system-cpu.
O arquivo independente de arquitetura, drivers/base/topology.c, exporta esses atributos. No entanto, os arquivos do sysfs relacionados à hierarquia de die, cluster, book e drawer só serão criados se uma arquitetura fornecer as macros relacionadas, conforme descrito abaixo.
Para que uma arquitetura ofereça suporte a esse recurso, ela deve definir algumas dessas macros em 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)
O tipo das macros **_id é int.
O tipo das macros **_cpumask é (const) struct cpumask *. Estas últimas
correspondem aos atributos apropriados **_siblings do sysfs (exceto por
topology_sibling_cpumask(), que corresponde a thread_siblings).
Para manter a consistência em todas as arquiteturas, include/linux/topology.h fornece definições padrão para qualquer uma das macros acima que não estejam definidas em include/asm-XXX/topology.h:
topology_physical_package_id: -1
topology_die_id: -1
topology_cluster_id: -1
topology_core_id: 0
topology_book_id: -1
topology_drawer_id: -1
topology_sibling_cpumask: apenas a CPU fornecida
topology_core_cpumask: apenas a CPU fornecida
topology_cluster_cpumask: apenas a CPU fornecida
topology_die_cpumask: apenas a CPU fornecida
topology_book_cpumask: apenas a CPU fornecida
topology_drawer_cpumask: apenas a CPU fornecida
Além disso, as informações de topologia de CPU são fornecidas sob /sys/devices/system/cpu e incluem estes arquivos. A fonte interna para a saída está entre colchetes (“[]”).
kernel_max:
o índice máximo de CPU permitido pela configuração do kernel. [NR_CPUS-1]
offline:
CPUs que não estão online porque foram desligadas via HOTPLUG ou excedem o limite de CPUs permitido pela configuração do kernel (kernel_max acima). [~cpu_online_mask + cpus >= NR_CPUS]
online:
CPUs que estão online e sendo escalonadas [cpu_online_mask]
possible:
CPUs para as quais foram alocados recursos e que podem ser colocadas online se estiverem presentes. [cpu_possible_mask]
present:
CPUs que foram identificadas como presentes no sistema. [cpu_present_mask]
O formato para a saída acima é compatível com cpulist_parse()
[veja <linux/cpumask.h>]. Alguns exemplos a seguir.
Neste exemplo, existem 64 CPUs no sistema, mas as cpus 32-63 excedem o máximo do kernel, que está limitado a 0..31 devido à opção de configuração NR_CPUS ser 32. Observe também que as CPUs 2 e 4-31 não estão online, mas poderiam ser colocadas online, pois estão tanto presentes quanto possíveis:
kernel_max: 31
offline: 2,4-31,32-63
online: 0-1,3
possible: 0-31
present: 0-31
Neste exemplo, a opção de configuração NR_CPUS é 128, mas o kernel foi iniciado com possible_cpus=144. Existem 4 CPUs no sistema e a cpu2 foi colocada offline manualmente (e é a única CPU que pode ser colocada online.):
kernel_max: 127
offline: 2,4-127,128-143
online: 0-1,3
possible: 0-127
present: 0-3
Consulte CPU hotplug in the Kernel para o parâmetro de inicialização do kernel possible_cpus=NUM, bem como para obter mais informações sobre as várias cpumasks.