もちろん時間がかかる重い仕事をするカーネルモジュールを開発しています。問題は、モジュールが 20 秒以上 CPU を使用し、その結果として softlockup_threshold のバグが発生することです。
私の質問は、これを回避する方法はありますか? つまり、しきい値を改ざんできますか? または、スケジューリングを強制して、後で作業を続行できますか? (タイマーを0に設定するため)。
事前にありがとう、パノス
もちろん時間がかかる重い仕事をするカーネルモジュールを開発しています。問題は、モジュールが 20 秒以上 CPU を使用し、その結果として softlockup_threshold のバグが発生することです。
私の質問は、これを回避する方法はありますか? つまり、しきい値を改ざんできますか? または、スケジューリングを強制して、後で作業を続行できますか? (タイマーを0に設定するため)。
事前にありがとう、パノス
新しいカーネルでは、/proc/sys/kernel/watchdog_thresh を調整できます (古いカーネルは /proc/sys/kernel/softlockup_thresh を使用していると思います)。しかし、これは推奨されません。20 秒間のブロックは、コードに何らかの問題があることを意味するためです。たとえば、cond_resched() を呼び出して、CPU を解放する必要があります。
しばらくの間、CPU を明け渡すことを試みることができます。それが許容できる場合は、調べる必要があります。カーネルでのスリープschedule()
に関する素晴らしい記事がここにあります。