![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
1ms周期のハードウェアの割り込みを受けて、
ブロックしているユーザ空間プロセスを起床させてある処理を行っています。
起床するユーザ空間プロセスの周期を計測(GPIOにて出力)すると概ね、
1.015~1.020ms前後に収まっています。
しかし4秒に1回程度1.2msぐらいに周期が遅延することがあり、
その原因が分からず困っています。
【実施したこと】
・以下3つを変更してカーネルをリビルド
1.CONFIG_PREEMPTを有効
2.CONFIG_PMを無効(パワーマネジメント)
3.CONFIG_HZ_250をCONFIG_HZ_1000に変更
・該当プロセスの優先度を最大のRTに変更 (chrt --fifo 99)
・サービスの停止(動作しているプロセスは該当プロセスとカーネルスレッド以外なし)
・RFSをread onlyでremount
・ハードウェアの割り込み周期は問題ないことは確認済み
・SpeedStepをBIOSで無効
・
【環境】
・ディストリビューション:debian lenny(カーネル2.6.26)
・CPU:Intel AtomZ530
以上なにか情報をお持ちでしたらご教示いただけますでしょうか。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
同じくZ530、Debianでreal time処理を色々試みている者です。
標準で配布されているLinux Kernelはプロセスがkernel空間に入っている間、割り込み応答を禁止している場合があり、たまたま何かのプロセスがKernel Callを行っていると、抜けるまで割り込みが待たされる場合があります。これは、システム全体の平均的なスループットを上げることを、割り込み応答よりも優先しているからです。サーバー系などではこの設定の方が有利だそうです。しかし、その結果として割り込み応答が遅くなる事があります。
で、これを改善するには下記のURLからご自分のKernelにあったパッチを当てて、CONFIG_PREEMPT_RTを有効にします(パッチを当てると、Processor type and featuresのセクションにPreemption modeという項目が現れるので、その中の一番下の項目だったと思います)。これはKernel内でのPreemptionを有効にして、Real time応答性を向上させるパッチですが、Preemption modeを設定しておかないと、割り込み応答は良くなりません。
もしかしたら対応するパッチがないかもしれませんが、そのときはkernelごと入れ替えてしまうのが良いでしょう。私の所ではDebian/Squeezeを入れた上で、linux-2.6.33.7に-rt29パッチを当てたものを使っています。応答時間のばらつきは標準偏差で0.01ms以下になっています。私の所では最大値は少し大きいのですが、あるプロセスが別のプロセスを経由して、特定のプロセスにメッセージを送って、そのプロセスがsleep後もとのプロセスにメッセージを返すという3つのプロセスが絡む時間測定をしているので、シングルプロセスの割り込み待ちはもっと良い結果が出ると思います。シングルプロセスの割り込み待ちも使っているのですが、正確な時間測定はしていないので。すみません。
このパッチが当たっているとsched_otherで動いているプロセスの影響はあまり受けないようです。
なおDebianには無いのですが、ディストリビューションによってはrealtime patchが当たったカーネルを配布している物もあります。
ご参考まで。
参考URL:http://www.kernel.org/pub/linux/kernel/projects/ …
返信遅れまして大変申し訳ありません。
u-kidさんの試された結果、非常に参考になりました。
一度パッチの適応を検討してみたいと思います。
また、その後ftrace にて調査をしたところ遅延が発生する場合
必ずeventsというカーネルスレッドが走っている事が分かりました。
それも併せて調査をしていきたいと思います。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- 消費者問題・詐欺 お金を取り返すことは可能でしょうか? 4 2023/01/07 13:17
- Windows 10 Windows Updateが動作しません 7 2022/08/12 16:26
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- 物理学 風力発電での音 1 2023/04/16 08:55
- Chrome(クローム) 【Google】「同期は有効です」と表示されているがブックマークが同期されていない 2 2022/11/17 13:32
- その他(SNS・コミュニケーションサービス) ツイッターの情報漏洩について 2 2022/09/12 14:46
- バイク車検・修理・メンテナンス 新車バイクでシミー現象? 5 2022/04/27 23:18
- 医学 医学に詳しい方にお尋ね致します。 摂取した水分は最終的には尿になりますが、そのプロセスがよく分かりま 4 2023/01/16 14:57
- CPU・メモリ・マザーボード 今のCPUは2nmプロセスとか何やらで製造されているかと思いますが、このスケールをどんどん大きくして 3 2023/06/07 20:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TOPコマンドで表示するCPU使用...
-
タスクバーの音量アイコンをク...
-
コマンドライン上でファイルを...
-
プロンプトが返らない
-
httpdの子プロセスがゾンビ化す...
-
System Idle Processってなに?...
-
プロセス、サービス、デーモン...
-
Powershell プロセス二重起動
-
killコマンドの終了と強制終了...
-
CPU使用率がすぐに100%になる...
-
アクロバットを終了しても、プ...
-
CPU使用率取得方法について
-
原因不明CPU使用率100%で極端に...
-
強制終了できないプロセスの強...
-
PIDからプロセス・アプリを特定...
-
プロセスがタスクマネージャー...
-
eclipseのworkspaseの削除がで...
-
win10でCPU使用率100% 表示だけ?
-
タスクマネージャのCPU率がおか...
-
ネットワーク使用率約75%維持状...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TOPコマンドで表示するCPU使用...
-
プロセス、サービス、デーモン...
-
System Idle Processってなに?...
-
タスクマネージャのCPU率がおか...
-
タスクバーの音量アイコンをク...
-
コマンドライン上でファイルを...
-
Powershell プロセス二重起動
-
プロセスがタスクマネージャー...
-
【プログラム】 iu14d2n.tmp ...
-
Windows 10のエクスプローラー...
-
実行中のプログラムを調べるには?
-
ps コマンドのステータス。S Ss...
-
プロンプトが返らない
-
タスクマネージャで終了できな...
-
強制終了できないプロセスの強...
-
CPU使用率取得方法について
-
HP-UXでのプロセス別メモリ使用...
-
CPU使用率が常に50~10...
-
killコマンドの終了と強制終了...
-
Windowsで作れるスレッド最大数...
おすすめ情報