調整內核的任務調度程序以提高在Android [第1部分]

上的性能,人們普遍認為,Android是一個具有自定義配置空間的操作系統。這部分是因為Linux內核在其核心中使用。今天,我們將討論Android內核最低部分之一的配置:其任務調度程序。使用正確的任務調度程序配置,您可以在Android上提高性能。繼續閱讀以確切發現如何修改小工具以獲得最大的性能。

但是,內核的任務調度程序是什麼?

系統的任務調度程序負責在大量運行任務中分配CPU。它可以通過在CPU上提供一定的運行時間來提供每個任務,並在特定時間間隔中再用一個任務交換。通常,有兩種任務計劃:先發製人的安排以及合作計劃。

在先發製人的計劃中,內核決定何時搶占(= swap)運行任務。基於復雜的佈置算法,它幾乎可以在任何類型的時間做到這一點。相反,與合作計劃相比,每個任務都在不再需要CPU的情況下通知內核,因此可以將其換成。在這種情況下,內核僅負責確定安排和將其放在CPU上的最佳候選人。

另請參閱:Android神話和事實:破壞10個大都會傳奇

在Android上安排任務

Android在Linux的頂部運行,這是一種先發製人的內核。任務調度程序以硬編碼的恆定間隔(安排間隔)觸發。通常,這是Android設備上的10毫秒。當調度程序運行時,它會決定是否應先享受運行任務,以及等待運行的人員的哪些任務應在CPU上佔據位置。由於版本2.6.23,Linux內核採用了非常高級的任務調度程序,即完全公平的調度程序(CFS)。 CFS試圖根據許多因素(包括任務重量和優先級)在CPU上提供大量運行時間。該調度程序的算法相當複雜。這就是為什麼幾乎沒有數量的內核設計師為其開發做出了貢獻的原因。

調整CFS調度程序

先決條件

根訪問權限

終端模擬器應用程序

儘管具有復雜性,CFS調度程序仍提供了一些配置選項。調整這些選擇可能會極大地影響系統性能。傳統上,SYSCTL命令行工具用於檢查和在運行時更改內核參數,包括調度程序參數。我們將在指南中使用此工具,因為它已預安裝在大多數Android上。但是,首先,我們要求對其進行一些介紹:

如何利用sysctl

列表參數及其當前值
要列出所有帶有其分配值的內核參數,請在終端應用程序中提供符合命令:

sysctl -a
為了僅獲取任務調度程序相關的參數,我們可能會提供符合命令:

sysctl -a | GREP“計劃”
這為我們的示例設備上的輸出提供了遵守:

參數列表非常大。我們將僅討論下面的一些參數,這些參數是最重要的。

更改參數
我們可以在類型sysctl -w [parameter] =值中修改參數,其中參數為內核參數名稱,而值是新值。例如:

sysctl -w kernel.sched_scaling_enable = 1

在下面閱讀以獲取更多SYSCTL使用示例。請記住,修改不會通過重新啟動進行。您可以在啟動時使用init.d腳本應用任何需要的修改。最後,確保您運行具有root特權的sysctl命令。您可以通過提供符合命令:

su
基本任務調度程序參數

不要錯過:移動設備上Linux內核的過去和未來

kernel.sched_min_granularity_ns
在處理器的最短時間之前,可以保證在處理器的任務被搶占之前運行。當總共僅取決於處理器速度時,任務被認為是處理器結合的。例如,在捆綁包上出現的任務並不是處理器綁定的任務。通常,增加此值將提高系統的吞吐量。另一方面,值和高值也可能會降低小工具的響應能力。該參數在納秒中採用值。例如,要將其設置為4000000納秒(4毫秒),我們可以提供符合命令:

sysctl -w kernel.sched_min_granularity_ns = 4000000
根據官方的Linux內核文檔,這是中央CFS調度程序可調。

kernel.sched_latency_ns
CFS運行隊列上的所有任務至少在此期間內都可以安排。null

Leave a Reply

Your email address will not be published. Required fields are marked *