LinuxでCPUアフィニティはcgroupとどのように相互作用しますか?
一連の分離された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 …