簡體   English   中英

優先於SCHED_DEADLINE?

[英]What has priority over SCHED_DEADLINE?

在嘗試調度高速線程時,我注意到有時不進行線程調度的時間段較長(數毫秒)。 我想知道在我正在使用的配置中,什么可以對調度程序執行此操作。

  • 帶有RT(i686)的最新Debian拉伸(穩定)
  • 雙核Intel(2237MHz)
  • PS2鍵盤和鼠標
  • 保留CPU 1(通過grub)
  • 用來將我的測試流程置於核心1上的任務集
  • 禁用SMI,禁用速度步進等(典型的RT BIOS設置)
  • USB端口未禁用,但未插入任何端口
  • IRQ余額已停用

我確認CPU1上只有工作程序,計時器等內容。 其他所有內容都在CPU0上。

我的線程是SCHED_DEADLINE(唯一這樣安排的線程),周期為300us。 我使用了schedules_yield()來釋放線程,而預留時間已經很久了(只是一個測試循環),所以我確定它不會過度運行。

我得到的是幾乎完美的3333Hz輸出(通過一個o形示波器),該輸出不時地被阻塞一次,持續15ms以上。 我已經研究了中斷(除了計時器之外,該CPU上沒有遞增),我禁用了NMI中斷,依此類推,因此無法找到干擾的過程。 我不認為我完全理解可以優先考慮的事情並導致調度程序跳過句點,所以我希望有人可能有想法嗎?

我以為可能是磁盤IO,但這似乎與差距不符(有時確實如此)。 使用VGA /控制台似乎會使情況變得更糟,但是即使不使用該間隙,仍然會出現間隙。

是的,在您問...之​​前。...這只是一個實驗,看它是否可以可靠地完成。 我的實際代碼在QNX上運行,在相同的硬件上以這種速率穩定運行。 我正在嘗試查看是否可以使用PREEMPT_RT將其移植到Debian。

謝謝!

與具有不同優先級(即SCHED_RRSCHED_FIFOSCHED_OTHER )的所有其他用戶級任務相比, SCHED_DEADLINE任務具有更高的優先級。

請注意,從內核4.16開始,可以通過使用SCHED_FLAG_DL_OVERRUNSIGXCPU信號上的用戶級處理程序來檢查SCHED_FLAG_DL_OVERRUN (請參見此處 )。

如果需要檢查CPU的功能, ftrace可能是最好的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM