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:タイプ:aarch00,00:0 4、 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

Linuxのソースコードを見た後。私の仮定は正しいと思います。私が知っているのは、Physical_package_idを使用してクラスタ内のクラスタを識別するようです。big.LITTLEアーキテクチャ用ドライバ次の2つの方法で。

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コア数を計算できると思います。

おすすめ記事