Solaris
讓應用程序以與 cpu idle 相同的優先級執行
我有一個需要盡可能快地執行時間關鍵型應用程序的 Solaris 伺服器,儘管將其設置為 RT 優先級似乎不是一個好主意,因為它可能需要 100 個 CPU 長時間。
我想使用空閒的 cpu 時間來處理另一個程序,但是如果時間關鍵的程序有事要做,這個程序根本不應該收到任何 cpu 時間。我怎樣才能做到這一點,使用 nice -19 不會將 100% cpu 分配給時間關鍵的 CPU。
在固定優先級下執行您的第二個應用程序,並使用盡可能低的優先級。如果它已經在執行,你可以使用它的 pid 來設置它:
priocntl -c FX -m 0 -p 0 -s -i pid <pid>
或者在啟動時執行:
priocntl -c FX -m 0 -p 0 -e command [arguments ...]
編輯:
請注意,FX 調度類不應與 RT 類混淆。雖然 RT(實時)優先級也是固定優先級,但被授予 RT 優先級的程序將搶占系統執行緒(即核心),因此只能與計算活動週期相對較短的程序一起使用。對於像您描述的那樣需要 100 個 CPU 執行緒的程序,絕對不建議使用 RT 類。FX 類不存在此問題,其(預設)優先級範圍與正常分時相同。
正如 Yedric 在他的回復中指出的那樣,將低優先級程序優先級設置為 0 不足以確保當高優先級程序處於活動狀態時它根本不會執行。
原因是後者屬於分時類,調度程序會注意到一個程序已經等待了一段時間,因此會將關鍵程序的實際優先級降低到 0,從而允許低優先級程序的小活動突發。
為避免這種情況,您可以將關鍵程序設置為具有中等優先級的 FX 類。在這種情況下,它永遠不會屈服於另一個:
priocntl -c FX -m 30 -p 30 -c critical_command ...