Skip to content

Topology

struct cpu_mask {
bool uses_large;
union {
uint64_t small;
uint64_t *large;
};
size_t nbits;
};
struct topology_cache_info {
uint8_t level;
uint8_t type;
uint32_t size_kb;
uint32_t line_size;
uint32_t cores_sharing;
};
struct topology_package_info {
uint32_t package_id;
struct cpu_mask cores;
};

struct topology_package_info referenced types:

struct topology_node {
enum topology_level level;
uint64_t id;
uint64_t parent;
struct topology_node *parent_node;
int32_t first_child;
int32_t nr_children;
struct cpu_mask cpus;
struct cpu_mask idle;
struct cpu_mask rt_shed_rq_active;
struct core *core;
union {
struct numa_node *numa;
struct topology_cache_info *cache;
struct topology_package_info *package;
} data;
};

struct topology_node referenced types:

struct topology {
struct topology_node *level[TOPOLOGY_LEVEL_MAX];
uint16_t count[TOPOLOGY_LEVEL_MAX];
};

struct topology referenced types:

enum topology_level {
TOPOLOGY_LEVEL_SMT,
TOPOLOGY_LEVEL_CORE,
TOPOLOGY_LEVEL_NUMA,
TOPOLOGY_LEVEL_LLC,
TOPOLOGY_LEVEL_PACKAGE,
TOPOLOGY_LEVEL_MACHINE,
TOPOLOGY_LEVEL_MAX,
TOPOLOGY_LEVEL_COUNT = TOPOLOGY_LEVEL_MAX,
};
struct cpu_mask * cpu_mask_create(void);

cpu_mask_create referenced types:

bool cpu_mask_init(struct cpu_mask *m, size_t nbits);

cpu_mask_init referenced types:

void cpu_mask_set(struct cpu_mask *m, size_t cpu);

cpu_mask_set referenced types:

void cpu_mask_set_all(struct cpu_mask *m);

cpu_mask_set_all referenced types:

void cpu_mask_clear(struct cpu_mask *m, size_t cpu);

cpu_mask_clear referenced types:

bool cpu_mask_test(struct cpu_mask *m, size_t cpu);

cpu_mask_test referenced types:

void cpu_mask_or(struct cpu_mask *dst, struct cpu_mask *b);

cpu_mask_or referenced types:

bool cpu_mask_empty(struct cpu_mask *mask);

cpu_mask_empty referenced types:

void cpu_mask_clear_all(struct cpu_mask *m);

cpu_mask_clear_all referenced types:

size_t cpu_mask_popcount(struct cpu_mask *m);

cpu_mask_popcount referenced types:

void cpu_mask_free(struct cpu_mask *m);

cpu_mask_free referenced types:

void cpu_mask_deinit(struct cpu_mask *m);

cpu_mask_deinit referenced types:

void topology_mark_core_idle(size_t cpu_id, bool idle);
struct core * topology_find_idle_core(struct core *local_core, enum topology_level max_search);

topology_find_idle_core referenced types:

struct core * * topology_get_smts_under_numa(struct topology_node *numa, size_t *count);

topology_get_smts_under_numa referenced types:

char * topology_level_name(enum topology_level l);

topology_level_name referenced types:

#define CPU_MASK_WORD_BITS 64
#define CPU_MASK_WORDS(nbits) \ (((nbits) + CPU_MASK_WORD_BITS - 1) / CPU_MASK_WORD_BITS)
#define cpu_mask_for_each(iter, mask) \ for (iter = 0; iter < (mask).nbits; ++iter) \ if ((mask).uses_large \ ? atomic_load(&(mask).large[iter / CPU_MASK_WORD_BITS]) & \ (1ULL << (iter % CPU_MASK_WORD_BITS)) \ : atomic_load(&(mask).small) & (1ULL << iter))