Skip to content
Snippets Groups Projects
  • Yanan Wang's avatar
    864c3b5c
    hw/core/machine: Introduce CPU cluster topology support · 864c3b5c
    Yanan Wang authored
    
    The new Cluster-Aware Scheduling support has landed in Linux 5.16,
    which has been proved to benefit the scheduling performance (e.g.
    load balance and wake_affine strategy) on both x86_64 and AArch64.
    
    So now in Linux 5.16 we have four-level arch-neutral CPU topology
    definition like below and a new scheduler level for clusters.
    struct cpu_topology {
        int thread_id;
        int core_id;
        int cluster_id;
        int package_id;
        int llc_id;
        cpumask_t thread_sibling;
        cpumask_t core_sibling;
        cpumask_t cluster_sibling;
        cpumask_t llc_sibling;
    }
    
    A cluster generally means a group of CPU cores which share L2 cache
    or other mid-level resources, and it is the shared resources that
    is used to improve scheduler's behavior. From the point of view of
    the size range, it's between CPU die and CPU core. For example, on
    some ARM64 Kunpeng servers, we have 6 clusters in each NUMA node,
    and 4 CPU cores in each cluster. The 4 CPU cores share a separate
    L2 cache and a L3 cache tag, which brings cache affinity advantage.
    
    In virtualization, on the Hosts which have pClusters (physical
    clusters), if we can design a vCPU topology with cluster level for
    guest kernel and have a dedicated vCPU pinning. A Cluster-Aware
    Guest kernel can also make use of the cache affinity of CPU clusters
    to gain similar scheduling performance.
    
    This patch adds infrastructure for CPU cluster level topology
    configuration and parsing, so that the user can specify cluster
    parameter if their machines support it.
    
    Signed-off-by: default avatarYanan Wang <wangyanan55@huawei.com>
    Message-Id: <20211228092221.21068-3-wangyanan55@huawei.com>
    Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
    [PMD: Added '(since 7.0)' to @clusters in qapi/machine.json]
    Signed-off-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
    864c3b5c
    History
    hw/core/machine: Introduce CPU cluster topology support
    Yanan Wang authored
    
    The new Cluster-Aware Scheduling support has landed in Linux 5.16,
    which has been proved to benefit the scheduling performance (e.g.
    load balance and wake_affine strategy) on both x86_64 and AArch64.
    
    So now in Linux 5.16 we have four-level arch-neutral CPU topology
    definition like below and a new scheduler level for clusters.
    struct cpu_topology {
        int thread_id;
        int core_id;
        int cluster_id;
        int package_id;
        int llc_id;
        cpumask_t thread_sibling;
        cpumask_t core_sibling;
        cpumask_t cluster_sibling;
        cpumask_t llc_sibling;
    }
    
    A cluster generally means a group of CPU cores which share L2 cache
    or other mid-level resources, and it is the shared resources that
    is used to improve scheduler's behavior. From the point of view of
    the size range, it's between CPU die and CPU core. For example, on
    some ARM64 Kunpeng servers, we have 6 clusters in each NUMA node,
    and 4 CPU cores in each cluster. The 4 CPU cores share a separate
    L2 cache and a L3 cache tag, which brings cache affinity advantage.
    
    In virtualization, on the Hosts which have pClusters (physical
    clusters), if we can design a vCPU topology with cluster level for
    guest kernel and have a dedicated vCPU pinning. A Cluster-Aware
    Guest kernel can also make use of the cache affinity of CPU clusters
    to gain similar scheduling performance.
    
    This patch adds infrastructure for CPU cluster level topology
    configuration and parsing, so that the user can specify cluster
    parameter if their machines support it.
    
    Signed-off-by: default avatarYanan Wang <wangyanan55@huawei.com>
    Message-Id: <20211228092221.21068-3-wangyanan55@huawei.com>
    Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
    [PMD: Added '(since 7.0)' to @clusters in qapi/machine.json]
    Signed-off-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>