一見すると、私の質問は些細なことに見えるかもしれません。私と一緒に我慢して、完全に読んでください。
Linux カーネル モジュールでビジー ループを特定しました。このため、他のプロセス (sshd など) は長時間 (20 秒など) の間 CPU 時間を取得していません。私のマシンには単一の CPU しかなく、ビジー ループが他のプロセスをスケジュールする機会を与えていないため、これは理解できます。
実験のために、ビジー ループの各反復の後に schedule() を追加しました。これは CPU をビジー状態に保ちますが、schedule() を呼び出しているため、他のプロセスを実行できるはずです。しかし、これは起こっていないようです。ユーザー レベルのプロセスがまだ長時間 (20 秒) ハングしています。
この場合、カーネル スレッドはナイス値 -5 を取得し、ユーザー レベル スレッドはナイス値 0 を取得しました。ユーザー レベル スレッドの優先度が低くても、20 秒は長すぎて CPU を取得できないと思います。
誰かがなぜこれが起こっているのか説明できますか?
注: ビジー ループを完全に削除する方法を知っています。ただし、ここでカーネルの動作を理解したいと思います。カーネル バージョンは 2.6.18 で、カーネル プリエンプションは無効になっています。