STRUCT EM_PERF_DOMAIN(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

okay so bestie, welcome to the struct em_perf_domain(9) page from the Kernel API Manual β€” no cap, this is the Performance domain struct and we're gonna cover every single member πŸ’…βœ¨

πŸ’– NAME πŸ’–

struct em_perf_domain β€” Performance domain. that's the name, and yes it's giving main-character kernel-struct energy πŸ‘‘

✨ SYNOPSIS ✨

Here's the whole shape, literally, don't touch the code bestie:

struct em_perf_domain {
    struct em_perf_table *em_table;
    struct list_head node;
    int id;
    int nr_perf_states;
    int min_perf_state;
    int max_perf_state;
    unsigned long flags;
    unsigned long cpus[];
};

🌸 Members 🌸

Okay, member-by-member vibe check, bestie β€” every single one is here:

  • em_table β€” Pointer to the runtime modifiable em_perf_table. literally a pointer, and it points at the runtime modifiable table, periodt πŸ’…
  • node β€” node in em_pd_list (in energy_model.c). iykyk πŸŽ€
  • id β€” a unique ID number for each performance domain. every PD gets its own lil ID πŸ¦‹
  • nr_perf_states β€” Number of performance states. not me counting states πŸ’€
  • min_perf_state β€” Minimum allowed Performance State index. lowercase "minimum allowed", iconic boundary behavior ✨
  • max_perf_state β€” Maximum allowed Performance State index. the other boundary, equally iconic ✨
  • flags β€” See "em_perf_domain flags". yes bestie, go look at the flags 🌈
  • cpus β€” Cpumask covering the CPUs of the domain. It's here for performance reasons to avoid potential cache misses during energy calculations in the scheduler and simplifies allocating/freeing that memory region. literally here for speed and memory-management convenience 🫢

πŸ¦‹ Description πŸ¦‹

In case of CPU device, a "performance domain" represents a group of CPUs whose performance is scaled together β€” think squad of CPUs moving as one, but technical πŸ’œ

All CPUs of a performance domain must have the same micro-architecture. that's mandatory, no mixing vibes there.

Performance domains often have a 1-to-1 mapping with CPUFreq policies. yes bestie, often 1-to-1, not always, okay? πŸ™ˆ

In case of other devices the cpus field is unused β€” so don't come for it, it's just sitting there unused in those cases πŸ’€

πŸ”₯ SEE ALSO πŸ”₯

Kernel file ./include/linux/energy_model.h β€” go read these next, bestie:


xoxo bestie, this struct em_perf_domain(9) page came from ./include/linux and it's dated October 2026 β€” mwah πŸ’–πŸ¦‹βœ¨

πŸ“¦ where this page comes from