多数のカーネル スレッドで CPU アフィニティを設定する際に問題があります。カーネルは、ハイパースレッディングが無効になっている 6 コア Intel 上の 3.19 (SMP 100Hz を使用) のバリアントです。isolcpus=1-5 に設定しました。目的は、これらのコアを dyntick モード (RCU と割り込みをオフロードして) にすることです。
マスク 3f (つまり、CPU は 0 ~ 5 を許可) で実行される多数のスレッドを起動した後...
Cpu にバインドされるべきではない pid を手動で tasketting した後、次のタスクセットが残ります。これに対して、taskset -pc 0 pid は常に「無効なマスク」(EINVAL) を返します。cpusets はカーネルにコンパイルされません:
khelper 、 perf 、 writeback 、 crypto 、 bioset 、 kblockd 、 devfreq_wq 、 rpciod 、 nfsiod 、 deferwq 、 kworker/u12:1 、 scsi_tmf_0 、 scsi_tmf_1 、 scsi_tmf_2 、 scsi_tmf_3 、 kworker/u12:4 、 ext4-rsv-conver-rsv 、 ext4-rsv-conver-rsv変換、ext4-rsv-変換
ディストリビューションは Ubuntu 14.04 です。isolcpus が機能しないように見える理由と、これらのスレッドを特定のコアに移動できない理由を知っている人はいますか?
前もって感謝します。