各 CPU をループして値を取得できるようにする必要がありますが、Linux カーネルのバージョン 2.6.26.5 にはマクロper_cpu
がないようです。for_each_cpu(i)
どうすれば次のようなことを達成できますか?
for_each_cpu(i)
per_cpu(vm_event_states, i)
各 CPU をループして値を取得できるようにする必要がありますが、Linux カーネルのバージョン 2.6.26.5 にはマクロper_cpu
がないようです。for_each_cpu(i)
どうすれば次のようなことを達成できますか?
for_each_cpu(i)
per_cpu(vm_event_states, i)
2.6.26 カーネルでfor_each_cpu()
は、 と呼ばれていfor_each_cpu_mask()
ました。これは で定義されてcpumask.h
おり、反復子とマスクの 2 つの引数を取ります。mask は、cpumask_t
反復する CPU のセットを定義する左辺値です。
イテレータを取るヘルパー マクロが 3 つあります。
for_each_possible_cpu(cpu)
for_each_present_cpu(cpu)
for_each_online_cpu(cpu)
for_each_possible_cpu()
カーネルのこのブートに存在する可能性のあるすべての CPU を反復処理します。for_each_present_cpu()
現在存在するすべての CPU を反復します (CPU ホットプラグをサポートしていないシステムでは、これら 2 つは同じです)。for_each_online_cpu()
現在有効でスケジューラーが使用できるすべての CPU を反復処理します。
反復中にオンライン CPU マップが変更されるのを防ぐために、 /セクションfor_each_online_cpu()
内で使用する必要があることに注意してください。get_online_cpus()
put_online_cpus()
for_each_possible_cpu()
それはあなたが望むものである可能性が最も高いです。