8.3. 単一の CPU を分離して、使用率の高いタスクを実行
cpusets
メカニズムを使用すると、SCHED_DEADLINE
タスクに一連の CPU とメモリーノードを割り当てることができます。CPU 使用率の高いタスクと低いタスクが混在するタスクセットにおいて、使用率の高いタスクを実行する CPU を分離し、使用率の低いタスクを異なる CPU セットでスケジューリングすることで、すべてのタスクが与えられた runtime
を満たすことが可能になります。
前提条件
- システムの root 権限がある。
手順
cpuset
という名前の 2 つのディレクトリーを作成します。# cd /sys/fs/cgroup/cpuset/ # mkdir cluster # mkdir partition
ルート
cpuset
の負荷分散を無効にして、cpuset
ディレクトリーに 2 つの新しいルートドメインを作成します。# echo 0 > cpuset.sched_load_balance
クラスター
cpuset
で、利用率の低いタスクが CPU 1 から 7 で実行されるようにスケジュールし、メモリーサイズを確認し、CPU に exclusive という名前を付けます。# cd cluster/ # echo 1-7 > cpuset.cpus # echo 0 > cpuset.mems # echo 1 > cpuset.cpu_exclusive
使用率の低いすべてのタスクを cpuset ディレクトリーに移動します。
# ps -eLo lwp | while read thread; do echo $thread > tasks ; done
cpuset
という名前のパーティションを作成し、使用率の高いタスクを割り当てます。# cd ../partition/ # echo 1 > cpuset.cpu_exclusive # echo 0 > cpuset.mems # echo 0 > cpuset.cpus
シェルを cpuset に設定し、期限ワークロードを開始します。
# echo $$ > tasks # /root/d &
この設定では、パーティション化された
cpuset
ディレクトリーに分離されたタスクは、クラスターcpuset
ディレクトリー内のタスクに干渉しません。これにより、すべてのリアルタイムタスクがスケジューラーの期限に間に合うようになります。