そのsched_fair.c
中には:
unsigned int sysctl_sched_latency = 5000000ULL //5m
unsigned int sysctl_sched_min_granularity = 1000000ULL //1ms
Linux の公正なタイムスライスは、nr_running とこの公正なタスクの相対的な重みによって異なることは理解していますが、コードを研究することで、タイムスライスを 1 ~ 5 ミリ秒に保つことが主なアイデアであることがわかりました。理解が間違っていたら訂正してください。私はここで間違っているに違いありませんが、方法がわかりません!
また、HZ、または 1 秒あたりのシステム ティック数、または 1 秒あたりのタイマー割り込み数は、通常、アーム マシン (およびほとんどの非デスクトップ マシンも) で 200 または 100 であり、5 ~ 10 ミリ秒のティックが得られます。レート。
set_next_entity()
タイムスライスは、公平なタスクの実行がスケジュールされるたびに rq->hrtick_timer を開始しresched_task()
、タイムアウト コールバック関数を呼び出すことによって動作しますhrtick()
。このタイマーは、ティックごとにタイマー irq ハンドラーによって処理されるキューに入れられたタイマーの 1 つtimer_tick()
ですrun_local_timer()
。他に隠された秘密はないようです。
では、5 ミリ秒よりも短いタイムスライスを取得するにはどうすればよいでしょうか? これを理解するのを手伝ってください。どうもありがとうございました!