簡體   English   中英

軟實時Linux調度

[英]Soft Real Time Linux Scheduling

我有一個具有一些軟實時要求的項目。 我有兩個進程(我編寫的程序)進行一些數據采集。 在任何一種情況下,我都需要不斷讀入正在進入並處理它的數據。

第一個程序是嚴格的線程,第二個程序使用一個應該是線程的庫,但我不知道幕后發生了什么。 每個程序都由用戶執行,並且(默認情況下)我看到每個程序的優先級為20,漂亮的值為0.每個程序使用大約30%的CPU。

就目前而言,兩個進程都必須與一些后台進程爭用,我想盡可能地為我的兩個程序提供最好的CPU。 我的主要問題是我有一個與之交談的設備,它有一個64字節的硬件緩沖區,如果我沒有及時讀取它,我會得到溢出。 我注意到這種情況每運行2-3小時就會發生一次。

根據我的研究( http://oreilly.com/catalog/linuxkernel/chapter/ch10.html ),似乎有三種方法可以優先使用:

  1. 將nice值設置為較小的數字,因此為每個進程提供更多優先級。 我可以使用nice命令在不對代碼進行任何修改(或使用系統調用)的情況下執行此操作。

  2. 將sched_setscheduler()用於特定調度策略的整個過程。

  3. 使用pthread_setschedparam()分別設置每個pthread。

我遇到了以下障礙:

  1. 假設我選擇3,如何防止低優先級線程被餓死? 是否還有一種方法可以確保共享鎖將優先級較低的線程提升到更高的優先級? 假設我有一個實時的線程,SCHED_RR並且它與默認的SCHED_OTHER線程共享一個鎖。 當SCHED_OTHER線程獲得鎖定時,我希望它執行@更高優先級來釋放鎖定。 我如何確保這一點?

  2. 如果SCHED_RR的一個線程創建另一個線程,新線程是自動SCHED_RR,還是我需要指定它? 如果我有一個我已設置為SCHED_RR的進程,它的所有線程是否自動遵循此策略怎么辦? 如果SCHED_RR的進程產生子進程怎么辦,它是否太自動SCHED_RR?

  3. 鑒於代碼僅占用CPU的60%,這是否有任何問題? 或者是否存在CPU與后台進程共享的問題,我應該關注並可能導致我的緩沖區溢出?

抱歉這個冗長的問題,但我覺得它需要一些背景信息。 先謝謝您的幫助。

(1) pthread_mutex_setprioceiling

(2)新創建的線程繼承其創建線程的調度和優先級,除非在調用pthread_create時指向其他線程屬性(例如pthread_attr_setschedparam / pthread_attr_setschedpolicy )。

(3)既然你現在不知道是什么原因造成的,那么任何人都應該保證公平。

暫無
暫無

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

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