私は現在のユーザースペースで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コア数を計算できると思います。