3

各 CPU をループして値を取得できるようにする必要がありますが、Linux カーネルのバージョン 2.6.26.5 にはマクロper_cpuがないようです。for_each_cpu(i)

どうすれば次のようなことを達成できますか?

for_each_cpu(i)
    per_cpu(vm_event_states, i)
4

1 に答える 1

10

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()それはあなたが望むものである可能性が最も高いです。

于 2012-11-19T03:03:23.587 に答える