我正在嘗試爲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. 如何知道核心是否已被綁定
- 7. GPU中的內存綁定內核和計算綁定內核
- 8. 如何知道某個特定的內核是否基於linux?
- 9. 如何確定LDAP服務器是否允許匿名綁定?
- 10. Linux內核模塊中的定期任務
- 11. 如何確定特定的內存位置是否在Linux中未分配
- 12. 如何確定定時任務是否已經完成
- 13. 如何找出內核是內存綁定還是計算綁定?
- 14. 如何確定是否Gearman的服務器是Linux
- 15. 確定是否在外部build.gradle文件中定義了任務
- 16. 在IE6中,如何確定window.open是否被重新定義?
- 17. Linux內核模塊是否有任何內存限制?
- 18. 是否有任何標準來決定在Linux內核中通過內聯還是宏來實現函數?
- 19. Java的fork-and-join線程池是否適合執行IO綁定任務?
- 20. 確定任務是否已被刪除GAE Python
- 21. 有沒有辦法確定任務是否被重新分配?
- 22. 如何確定F15是否被按下?
- 23. 如何確定PDF是否被標記?
- 24. 如何確定Linux套接字在C++中綁定的接口
- 25. 如何確定當前請求是否是任務 - GAE
- 26. 如何確定內核對象文件編譯的Linux內核版本?
- 27. 如何確定函數是否不返回任何內容?
- 28. 確定屬性是否是EF內核中的導航屬性
- 29. java.io.File.toURI()IO綁定?
- 30. 確定設備是否在linux