我正在嘗試爲Linux內核實現調度程序(version 2.4.27
),並試圖找出一個任務是CPU綁定還是I/O綁定。有沒有我可以用來獲取這些信息的變量/函數?如何確定任務是否在linux內核中被I/O綁定?
1
A
回答
1
如果談論O(1) 調度程序:
的方法可以如CPU結合或I/O綁定基於它運行在CPU上的時間片來確定。
每個進程在允許在處理器上進行調度之前都會設置其默認時間片(100ms)。
如果進程佔用全部時間片(爲處理器上的整個時間片運行),則進程稱爲CPU綁定進程。
同樣,不消耗其整個時間片,但會打電話甚至在它的時間片已經運行了SCHED_YIELD,或,如果進程等待/休眠發生的任何事件的任何處理,那麼調度會被調用來將其推入睡眠隊列,這意味着它正在等待一些I/O發生,是一個I/O綁定進程。
每個這樣的CPU綁定進程都將受到優先處罰,保持時間片相同,並且每個這樣的I/O綁定進程都將獲得優先獎金,並保持時間片相同。因此,在GPOS(通用操作系統)上,它是effective_priority或dynamic_priority,它會告訴你該進程是否良好(I/O限制)或不良行爲(CPU限制進程),因爲新流程的默認優先級爲20,除非另有更改。
有一些參數基於哪個,你可以確定相同。
effective_prio:返回任務的有效優先級(基於靜態優先級,但包含任何獎勵或懲罰)。
recalc_task_prio:根據空閒時間確定任務的獎金或懲罰。
Ref:https://www.cs.columbia.edu/~smb/classes/s06-4118/l13.pdf
相關問題
- 1. 如何確定Linux內核模塊是否泄漏內存
- 2. 如何確定是否在Linux內核中加載了特定的模塊
- 3. 如何輕鬆確定函數是否可以在Linux內核中休眠?
- 4. 如何將進程綁定到freebsd/linux中的特定內核
- 5. 如何知道某個特定的內核是否基於linux?
- 6. Linux內核模塊中的定期任務
- 7. 如何確定是否Gearman的服務器是Linux
- 8. 在IE6中,如何確定window.open是否被重新定義?
- 9. Linux內核模塊是否有任何內存限制?
- 10. Java的fork-and-join線程池是否適合執行IO綁定任務?
- 11. 有沒有辦法確定任務是否被重新分配?
- 12. 如何確定當前請求是否是任務 - GAE
- 13. 如何確定內核對象文件編譯的Linux內核版本?
- 14. 確定屬性是否是EF內核中的導航屬性
- 15. 確定設備是否在linux
- 16. 最小穩定Linux內核
- 17. 如何確定哪些多個按鍵綁定是被解僱
- 18. 是否有任何libc項目不需要linux內核
- 19. 如何確定複選框是否在asp.net中被選中
- 20. Javascript:確定對象是否在內存中被複制
- 21. 如何確定設備是否支持多任務處理?
- 22. 如何確定使用「任務」的循環是否並行化?
- 23. 綁定在IPV6環回 - IPV4被綁定到任何?
- 24. Spring.Net是否有任何基於約定的綁定(如Ninject.Extensions.Conventions)
- 25. 如何確定dispatch_queue_t在iOS中是否被暫停?
- 26. 如何確定孩子是否在Jquery中被點擊
- 27. 任何方式來確定一個元素是否被包裝?
- 28. Ninject內核綁定覆蓋
- 29. 是否有任何技巧在linux內核中故意換出一個頁面?
- 30. 如何確定$ match是否在$ string中?