轉自:http://book.2cto.com/201302/16291.html
RT Throttling是對分配給實時進程的CPU時間進行限制的功能。使用實時調度策略的進程由於bug等出現不可控錯誤時,完全不調度其他進程,系統就會無響應。通過限制分配給實時進程的每個單位時間的CPU時間,就可以防止使用實時調度策略的進程出現bug。
還可以指定單位時間內分配多少CPU時間給實時進程。標准設置的單位時間是1秒,CPU分配時間是0.95秒,非實時進程每1秒也可以使用CPU 0.05秒。
可是對分配給實時進程的CPU時間進行限制,會不會對實時處理造成影響呢?答案是不會。正如在關於實時性的介紹中提到的,對某個處理使用實時策略,是為了滿足實時限制,即在一定時間內完成處理。如果對實時性有要求的進程占用CPU時間,就不能實現實時性。
為使用實時調度策略的進程的處理分配所必需的或實時限制量的CPU時間,就可以防止系統的實時進程出現不可控錯誤等意外情況。
系統的整體設置
整個系統的CPU時間設置可以使用sysctl來獲取、設置。最近的內核都可以通過sysctl來限制實時進程能夠使用的CPU時間。
下列為獲取當前值的例子。這個例子中使用的是標准設置,單位時間為1秒,CPU分配時間為0.95秒。
$ sysctl -n kernel.sched_rt_period_us
1000000
$ sysctl -n kernel.sched_rt_runtime_us
950000
設置示例
要將CPU分配時間改為0.9秒,可以執行下列操作。
# sysctl -w kernel.sched_rt_runtimes_us=900000
另外,將CPU分配時間指定為–1,對實時進程的CPU時間限制就會消失。這與內核導入該功能之前的行為是一樣的。
# sysctl -w kernel.sched_rt_runtime_us=-1
當然,也可以從proc文件系統存取。
/proc/sys/kernel/sched_rt_period_us
/proc/sys/kernel/sched_rt_runtime_us
當CONFIG_RT_GROUP_SCHED有效時,受到Cgroup設置值的限制,不能進行與Cgroup中的有效值相矛盾的設置。但是在這里,將sched_rt_runtime_us設置為–1,是用來使RT Throttling失效的設置。
一般來說,sysctl中的設置僅用於有效(啟用)與無效(關閉)的切換,單個設置需要使用Cgroup來進行。
Cgroup中的設置
RT Group Scheduling是Cgroup的子系統。要使用RT Group Scheduling,必須啟用CONFIG_RT_GROUP_SCHED。可以與其他Cgroup一樣通過cgroup文件系統進行設置(參考Hack #7)。
# mount -t cgroup cgroup /cgroup
與RT Group Scheduling相關的項目有下面兩個。可以對每個分組分別設置RT throttling的單位時間與CPU分配時間。
cpu.rt_period_us
cpu.rt_runtime_us