2つのCPU(各CPU)に2つのリアルタイムプロセスを割り当てようとしています。 SCHED_FIFOスケジューリングポリシーを使用しています。私は次のことをしています:
- CPUを分離するには、/etc/default/grubのGRUB_CMDLINE_LINUX_DEFAULTに「quiet Splash isolcpus = 6,7」を追加します。システムを再起動しましたが、6および7 CPUで実行されているいくつかのカーネルスレッドを除いて動作しているようです(これを行うにはtopコマンドを使用します)。
それからこれ:
retval = sched_getattr(0、&attr、sizeof(struct sched_attr)、0);
if(retval < 0){perror("Error in get attr:");return0;}
attr.sched_policy = SCHED_FIFO;
attr.sched_priority = 1;
retval = sched_setattr(0,&attr,0);
if(retval<0) { perror("スケジュールパラメータの設定中にエラーが発生しました:") return 0;
CPU_ZERO(&set); CPU_SET(7,&set); retval = sched_setaffinity(0,sizeof(cpu_set_t),&set); if(retval<0){perror("Affinity Error ");return 0;}
私はこのプロセスをCPU7で実行する予定です。しかし、私はこれを行うことはできません。なぜ失敗したのですか?このアプローチがうまくいかない場合は、他のアプローチを提案できますか?
編集:追加のCPUグループを作成していません。 /sys/fs/cgroup には cpuset ディレクトリが 1 つしかありません。
答え1
どのエラーが返されたかを調べてください。バラより
man 2 sched_setaffinity
それ以外にも、好みを変更するには「CAP_SYS_NICE」機能が必要です。だからあなたはする必要があります
- プログラムをrootとして実行するか
- この機能をバイナリファイルに設定します(注:NFSマウントファイルシステムには適用されません)。
バイナリに必要な機能設定は、次のコマンドで行います。
sudo setcap CAP_SYS_NICE+e <file>