CPU의 물리적 소켓 ID를 사용하여 ARM big.LITTLE SoC에 속한 클러스터를 확인할 수 있습니까?

CPU의 물리적 소켓 ID를 사용하여 ARM big.LITTLE SoC에 속한 클러스터를 확인할 수 있습니까?

저는 현재 사용자 공간에서 big.LITTLE 아키텍처에 대한 각 CPU 클러스터의 CPU 수를 확인하려고 합니다.

나는 sysfs의 파일을 조사하여 필요한 정보를 제공하는 파일이 있는지 확인하고 있습니다. 해당 CPU ID에 대한 프로세서 유형을 제공 하므로 /sys/devices/system/cpu/cpuX/uevent이를 구문 분석하여 클러스터 크기를 얻을 수 있습니다.
파일은 다음과 같이 제공됩니다.

OF_NAME=cpu
OF_FULLNAME=/cpus/cpu@100
OF_TYPE=cpu
OF_COMPATIBLE_0=arm,cortex-a53
OF_COMPATIBLE_1=arm,armv8
OF_COMPATIBLE_N=2
MODALIAS=cpu:유형:aarch64:기능:,0000,0001,0002,0003,0004, 0005,0006,0007

이 이름을 어디서 분석할 수 있나요?피질-a53그런 다음 다른 클러스터가 다음을 갖기 때문에 이를 사용하여 클러스터를 정의합니다.피질-a73대신에. 그러나 이는 클러스터 크기를 알아내는 데만 많은 작업이 필요한 것처럼 보입니다.

그것을 보는 동안 매핑이 내 아키텍처의 코어 분포(6개의 작은 코어와 2개의 큰 코어)와 정확하게 일치한다는 /sys/devices/system/cpu/cpuX/topology것을 알았습니다 .physical_package_id

검색 결과, Physical_package_id가 CPU가 속한 물리적 소켓을 나타내는 것으로 나타났습니다.

물리적 소켓을 보고 코어가 속한 big.LITTLE 아키텍처의 클러스터를 확인할 수 있습니까?

편집: CPU 토폴로지를 찾기 위해 이 스크립트를 실행했습니다.

CPU_NUMBER=$(cat /proc/cpuinfo | awk '/^processor/{print $3}' | wc -l)
LAST_INDEX="$(($CPU_NUMBER-1))"

for i in $(seq 0 $LAST_INDEX)
do
    echo "Core $i: "
    cat /sys/devices/system/cpu/cpu$i/topology/physical_package_id
done

답변1

리눅스 소스 코드를 살펴본 후. 내 가정이 정확하다고 생각합니다. 내가 알 수 있는 바로는 그들이 Physical_package_id를 사용하여 클러스터 내의 클러스터를 식별하는 것 같습니다.big.LITTLE 아키텍처용 드라이버다음 두 가지 방법으로.

static inline int raw_cpu_to_cluster(int cpu)
{
    return topology_physical_package_id(cpu);
}
static inline int cpu_to_cluster(int cpu)
{
    return is_bL_switching_enabled() ?
        MAX_CLUSTERS : raw_cpu_to_cluster(cpu);
}

그런 다음 이를 사용하여 다른 방법으로 빈도표를 얻습니다. 이는 제가 원하는 작업의 일부이기도 합니다.

static int bL_cpufreq_init(struct cpufreq_policy *policy)
{
    u32 cur_cluster = cpu_to_cluster(policy->cpu);

   /* Some code here */

   policy->freq_table = freq_table[cur_cluster];

   /* Some more code here */
}

따라서 각 클러스터의 Physical_package_id를 보면 각 클러스터의 CPU 코어 수를 계산할 수 있다고 생각합니다.

관련 정보