一連の分離されたCPUでマルチスレッドベンチマークを実行しようとしています。長い話を短くカットするには、私が最初にしてみましたisolcpusとtaskset、しかし、ヒットの問題を。今、私はcgroups / csetsで遊んでいます。
「単純な」cset shieldユースケースはうまく機能すると思います。私は4つのコアを持っているので、ベンチマークにコア1〜3を使用します(これらのコアもアダプティブティックモードに設定しました)。その後、コア0を他のすべてに使用できます。
ここのチュートリアルに従うと、次のように簡単になります。
$ sudo cset shield -c 1-3
cset: --> shielding modified with:
cset: "system" cpuset of CPUSPEC(0) with 105 tasks running
cset: "user" cpuset of CPUSPEC(1-3) with 0 tasks running
これで、分離された「シールド」(ユーザーcset)があり、コア0はそれ以外のもの(システムcset)用です。
よし、これまでのところよさそうだ。では、を見てみましょうhtop。プロセスはすべてCPU 0に移行されているはずです。
え?一部のプロセスは、シールドされたコアで実行されているように示されています。htopにバグがあるというケースを除外tasksetするために、シールドに表示されているプロセスのアフィニティマスクを調べてみました。
多分それらのタスクは移動できませんでしたか?CPU3(シールド内にあるはずです)で実行されていると示されている任意のプロセスを取り出しhtopて、システムのcgroupに表示されるかどうかを確認しますcset。
$ cset shield -u -v | grep 864
root 864 1 Soth [gmain]
vext01 2412 2274 Soth grep 864
うん、それはによるとシステムcgroupで実行されていますcset。だから、htopとcset反対します。
ここで何が起こっているのでしょうか?私は誰を信頼しますか:CPUアフィニティ(htop/ taskset)またはcset?
あなたcsetとアフィニティを一緒に使用することは想定されていません。おそらくシールドは正常に機能しており、アフィニティマスクとhtop出力は無視する必要があります。いずれにしても、これは混乱を招きます。誰かが光を当てることはできますか?
numactl、cgconfigandとcgrules/ cgredを使用して、あなたがやっていることを合理化します。これらはDebianで使用できる場合があります。
