8.3. 単一の CPU を分離して、使用率の高いタスクを実行
cpusets メカニズムを使用すると、SCHED_DEADLINE タスクに一連の CPU とメモリーノードを割り当てることができます。CPU 使用率の高いタスクと低いタスクが混在するタスクセットにおいて、使用率の高いタスクを実行する CPU を分離し、使用率の低いタスクを異なる CPU セットでスケジューリングすることで、すべてのタスクが与えられた runtime を満たすことが可能になります。'cpusets' の設定を手動で追加する必要があります。
前提条件
- システムの root 権限がある。
手順
cluster と partition という 2 つのコントロールグループを作成します。
cd /sys/fs/cgroup echo +cpuset > cgroup.subtree_control mkdir cluster mkdir partition echo +cpuset | tee cluster/cgroup.subtree_control partition/cgroup.subtree_control
# cd /sys/fs/cgroup # echo +cpuset > cgroup.subtree_control # mkdir cluster # mkdir partition # echo +cpuset | tee cluster/cgroup.subtree_control partition/cgroup.subtree_controlCopy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターのコントロールグループでは、使用率の低いタスクを CPU 1 から 7 で実行するようにスケジュールします。メモリーサイズと、名前コントロールグループを排他的として確認します。
cd cluster echo 1-7 | tee cpuset.cpus cpuset.cpus.exclusive echo root > cpuset.cpus.partition
# cd cluster # echo 1-7 | tee cpuset.cpus cpuset.cpus.exclusive # echo root > cpuset.cpus.partitionCopy to Clipboard Copied! Toggle word wrap Toggle overflow すべての使用率の低いタスクをクラスターコントロールグループに移動します。
ps -eLo lwp | while read thread; do echo $thread > cgroup.procs ; done
# ps -eLo lwp | while read thread; do echo $thread > cgroup.procs ; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow パーティションコントロールグループで、使用率の高いタスクを割り当てます。echo 0 | tee cpuset.cpus cpuset.cpus.exclusive echo isolated > cpuset.cpus.partition
# echo 0 | tee cpuset.cpus cpuset.cpus.exclusive # echo isolated > cpuset.cpus.partitionCopy to Clipboard Copied! Toggle word wrap Toggle overflow パーティションコントロールグループにシェルを追加して、以下を開始します。
echo $$ > cgroup.procs
# echo $$ > cgroup.procsCopy to Clipboard Copied! Toggle word wrap Toggle overflow この設定では、
パーティションコントロールグループに分離されたタスクはクラスターコントロールグループ内のタスクに干渉しません。これにより、すべてのリアルタイムタスクがスケジューラーの期限に間に合うようになります。deadline scheduler を使用している場合、通常、期限はこの変更なしで満たされます。他のタスクには独自の期限があることに注意してください。
アプリケーションが適切なピニングを使用する準備がある場合は、cgroups を調整することで、パーティション の cgroup により多くの CPU を提供し、すべてのリアルタイムタスクをこれに割り当てることで、ノイズをさらに削減できます。
cd ..
echo 4-7 | tee cluster/{cpuset.cpus,cpuset.cpus.exclusive}
echo 0-3 | tee partition/{cpuset.cpus,cpuset.cpus.exclusive}
# cd ..
# echo 4-7 | tee cluster/{cpuset.cpus,cpuset.cpus.exclusive}
# echo 0-3 | tee partition/{cpuset.cpus,cpuset.cpus.exclusive}