programing:linux-programing:linux-cpu-core-shield
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| programing:linux-programing:linux-cpu-core-shield [2022/10/21 08:44] – [スクリプトによる IRQ への CPU アフィニティーの自動割り当て] yoko | programing:linux-programing:linux-cpu-core-shield [2026/07/28 13:16] (現在) – 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | 【Ubuntu/ | + | ====== |
| - | ============================== | + | |
| リアルタイム性が要求されるネットワーク通信を含むプログラムなど、さまざまなイベントに応答する際にレイテンシーを最小限に抑える必要がある。 | リアルタイム性が要求されるネットワーク通信を含むプログラムなど、さまざまなイベントに応答する際にレイテンシーを最小限に抑える必要がある。 | ||
| これを行う為に、割り込み (IRQ) とさまざまな CPU 上のユーザープロセスを相互に分離する手法について備忘録を残す。 | これを行う為に、割り込み (IRQ) とさまざまな CPU 上のユーザープロセスを相互に分離する手法について備忘録を残す。 | ||
| 行 9: | 行 8: | ||
| - | プロセスのCPUコア分離 | + | ===== プロセスのCPUコア分離 |
| - | ----------------- | + | |
| リアルタイム性が必要なユーザプログラム(プロセス)を実行するCPUコアを分離する。 | リアルタイム性が必要なユーザプログラム(プロセス)を実行するCPUコアを分離する。 | ||
| ### コア除外の設定 | ### コア除外の設定 | ||
| 行 54: | 行 52: | ||
| </ | </ | ||
| - | 割り込みのCPUコア固定 | + | ===== 割り込みのCPUコア固定 |
| - | ----------------- | + | |
| 上記でコア分離したプロセスが使用するNICカードの割り込みを、分離したコア側に割り当てる。 | 上記でコア分離したプロセスが使用するNICカードの割り込みを、分離したコア側に割り当てる。 | ||
| 行 73: | 行 70: | ||
| <code bash> | <code bash> | ||
| $ cat / | $ cat / | ||
| + | CPU0 | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | ... | ||
| </ | </ | ||
| 行 141: | 行 144: | ||
| <code bash> | <code bash> | ||
| - | $ sudo ./ | + | $ sudo ./ |
| </ | </ | ||
| - | 参考 | + | ===== その他 ===== |
| - | ---- | + | |
| - | 1. [[https:// | + | ### CPUに負荷をかける |
| - | 2. [[https:// | + | stressコマンドで、CPUのコア# |
| - | 3. [[https:// | + | |
| - | 4. [[https:// | + | <code bash> |
| - | 5. [[https:// | + | $ taskset -c 2 stress -c 1 |
| - | 6. [[https:// | + | </ |
| - | 7. [[https:// | + | |
| - | 8. [[https:// | + | ### CPU負荷状況の確認 |
| - | 9. [[https:// | + | 下記コマンドでCPUの負荷状況を表示。 |
| - | 10. [[https:// | + | |
| - | 11. [[https:// | + | <code bash> |
| - | 12. [[https:// | + | $ dstat -c -C 0,1,2,3 |
| - | 13. [[https:// | + | -----cpu0-usage----------cpu1-usage----------cpu2-usage----------cpu3-usage---- |
| - | 14. [[https:// | + | usr sys idl wai stl:usr sys idl wai stl:usr sys idl wai stl:usr sys idl wai stl |
| - | 15. {{https:// | + | 5 |
| + | | ||
| + | | ||
| + | 9 | ||
| + | 9 | ||
| + | | ||
| + | | ||
| + | 9 | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | ### CPU Affinityの一覧表示 | ||
| + | 全プロセスのCPU Affinityを一覧表示するPerlスクリプト。 | ||
| + | |||
| + | <code perl cpu_pslist.pl> | ||
| + | # | ||
| + | # | ||
| + | # CPU affinityの一覧を表示する。 | ||
| + | # | ||
| + | |||
| + | use strict; | ||
| + | use warnings; | ||
| + | |||
| + | my @result; | ||
| + | my $mode = 0; | ||
| + | |||
| + | if (@ARGV >= 1) { | ||
| + | if ($ARGV[0] eq " | ||
| + | $mode = 1; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | if ($mode == 0) { | ||
| + | @result = `ps aux`; | ||
| + | } | ||
| + | else { | ||
| + | @result = `ps auxf`; | ||
| + | } | ||
| + | |||
| + | foreach my $line(@result) | ||
| + | { | ||
| + | my @a = split(/ | ||
| + | |||
| + | if ($a[1] eq " | ||
| + | print "AFFIN " . $line; | ||
| + | } | ||
| + | else { | ||
| + | my $affi = `taskset -pc $a[1] 2>& | ||
| + | if ($? == 0) { # コマンド実行のリターンコード | ||
| + | my @b = split(/ | ||
| + | my $str = sprintf(" | ||
| + | print $str . $line; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== 参考 ===== | ||
| + | |||
| + | - [[https:// | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | - [[https:// | ||
| + | - {{https:// | ||
programing/linux-programing/linux-cpu-core-shield.1666309447.txt.gz · 最終更新: by yoko
