使用下列配置設定做為 Android 核心的基礎
此外還會從 0 自動調整資源配置
您完全不必調整資源調度設定系統已將「android-base
」的設定整理成 .cfg
個檔案。
android-base-ARCH
和
android-recommended
:
android-base
選項可啟用 Android 核心功能,以及 都應根據所有裝置指定設定。android-base-ARCH
選項可啟用核心指標 Android 功能,且應依照 架構 ARCH並非所有架構都有對應的檔案 架構專屬必要選項如果您的架構 則沒有額外的架構專屬核心設定 Android 的需求條件。android-recommended
。這些選項可用來啟用進階 Android 這些功能對裝置而言是選用項目。
這些設定檔位於
kernel/configs
使用與
執行指令碼
如要進一步瞭解強化核心已採用的控管措施 裝置,請參閱系統和 核心安全性如要進一步瞭解必要設定,請參閱 Android 相容性定義說明文件 (CDD)。
產生核心設定
對於採用極簡風 defconfig
格式的裝置,請使用
核心樹狀結構中的 merge_config.sh
指令碼啟用選項:
ARCH=ARCH scripts/kconfig/merge_config.sh <...>/device_defconfig <...>/android-base.cfg <...>/android-base-ARCH.cfg <...>/android-recommended.cfg
這項操作會產生 .config
檔案,可用於儲存新的
defconfig
檔案,或編譯含有 Android 功能的新核心
其他核心設定需求
在某些情況下,平台維護人員可以從多個核心中選擇 才能滿足 Android 依附元件的需求這類依附元件無法 您在核心設定片段檔案 (如上所述) 中表示的,因為 格式不支援邏輯運算式。在 Android 9 和 Compatibility Test Suite (CTS) 供應商測試套件 (VTS) 驗證 滿足下列需求:
CONFIG_OF=y
或CONFIG_ACPI=y
- 4.4 和 4.9 核心有
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
或同時包含CONFIG_MEMCG=y
和CONFIG_MEMCG_SWAP=y
CONFIG_DEBUG_RODATA=y
或CONFIG_STRICT_KERNEL_RWX=y
CONFIG_DEBUG_SET_MODULE_RONX=y
或CONFIG_STRICT_MODULE_RWX=y
- 僅適用於 ARM64:
CONFIG_ARM64_SW_TTBR0_PAN=y
或CONFIG_ARM64_PAN=y
此外,CONFIG_INET_UDP_DIAG
選項必須設為
Android 9 以上版本中的 4.9 核心為 y
。
啟用 USB 主機模式選項
針對 USB 主機模式音訊,啟用下列選項:
CONFIG_SND_USB=y CONFIG_SND_USB_AUDIO=y # CONFIG_USB_AUDIO is for a peripheral mode (gadget) driver
針對 USB 主機模式 MIDI,啟用下列選項:
CONFIG_SND_USB_MIDI=y
使用 TSYNC 的 Seccomp BPF
安全運算 Berkeley 封包篩選器 (Seccomp BPF) 是核心安全性 這項技術可以協助建立能定義情境的沙盒 處理程序可能會發出系統呼叫執行緒同步處理 (TSYNC) 功能啟用多執行緒程式的 Seccomp BPF。這個 只有支援 Seccomp 上游 (ARM) 的架構 ARM64、x86 和 x86_64)。
Android 即時鎖定 Daemon
Android 10 包含 Android 即時鎖定 Daemon
(llkd
),用於擷取及減少核心死結。
如要進一步瞭解如何使用 llkd
,請參閱
Android 即時鎖定 Daemon。
ARM64 上的 vDSO32
虛擬動態共用物件 (vDSO) 是系統呼叫的替代選項,
只要正確使用並經過設定,週期成本就能降低。Android 版
10 開始在 64 位元核心 (Android) 上支援 vDSO32
已經在 64 位元核心上支援 vDSO64,以及在 32 位元核心上支援 vDSO32)。使用
ARM64 架構上的 vDSO32 (CONFIG_VDSO_COMPAT
) 可提供
電池續航時間增加 0.4%,其他效能提升。
Linux 社群目前積極參與
統一 vDSO
跨架構如要在 Linux kernel 中設定 vDSO,請啟用
包含 CONFIG_COMPAT
和 vDSO32 的 vDSO32
CONFIG_CROSS_COMPILE_COMPAT_VDSO
包含 arm32 編譯器三元組。
Android 核心團隊已將舊版 vDSO 修補程式系列向後移植
到 Pixel 裝置,您可以在這些 Pixel 核心版本的幾個
(LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN
路徑,
CROSS_COMPILE_ARM32
參考資料,以及
CONFIG_CROSS_COMPILE_ARM32
設定)。
RAM 設定偏低
調整核心和 ActivityManager 以減少直接收回
當程序或核心嘗試分配頁面時,會發生直接重新取得
(直接或因新頁面錯誤而造成),核心
已使用所有可用的可用記憶體。這需要核心封鎖分配作業
則會釋放網頁因此通常需要透過磁碟 I/O 清除
支援的檔案有問題,或等待 lowmemorykiller
停止
上傳資料集之後,您可以運用 AutoML
自動完成部分資料準備工作這可能會導致任何執行緒 (包括 UI 執行緒) 中出現額外的 I/O。
為了避免直接回收,核心會有會觸發浮水印
kswapd
或背景收回。這個執行緒會嘗試
釋出頁面,因此下次實際分配的執行緒分配時,速度就會更快。
觸發背景重新聲明的預設門檻很低,約 裝置大小為 2 MB,512 MB 裝置則為 636 KB。 核心只會在背景回收一些 MB 的記憶體。也就是說 任何快速配置超過數 MB 的處理程序都會 按下「直接放棄」
Android-3.4 核心分支版本新增了對核心可微調項目的支援,如
修補程式 92189d47f66c67e5fd92eafaa287e153197a454f ("新增其他免費 KB
可微調」)。從裝置的核心選擇這個修補程式
ActivityManager
會指示核心嘗試保持三個全螢幕
32 bpp 緩衝區沒有記憶體。
您可以使用 config.xml
設定這些門檻
這個架構的重點在於
<!-- Device configuration setting the /proc/sys/vm/extra_free_kbytes tunable in the kernel (if it exists). A high value increases the amount of memory that the kernel tries to keep free, reducing allocation time and causing the lowmemorykiller to kill earlier. A low value allows more memory to be used by processes but may cause more allocations to block waiting on disk I/O or lowmemorykiller. Overrides the default value chosen by ActivityManager based on screen size. 0 prevents keeping any extra memory over what the kernel keeps by default. -1 keeps the default. --> <integer name="config_extraFreeKbytesAbsolute">-1</integer>
<!-- Device configuration adjusting the /proc/sys/vm/extra_free_kbytes tunable in the kernel (if it exists). 0 uses the default value chosen by ActivityManager. A positive value increases the amount of memory that the kernel tries to keep free, reducing allocation time and causing the lowmemorykiller to kill earlier. A negative value allows more memory to be used by processes but may cause more allocations to block waiting on disk I/O or lowmemorykiller. Directly added to the default value chosen by ActivityManager based on screen size. --> <integer name="config_extraFreeKbytesAdjust">0</integer>
調整低記憶體清除工具
ActivityManager
會設定
LowMemoryKiller
符合其預期
依個別優先順序執行程序所需的檔案提供支援網頁 (快取網頁)
級別值區如果裝置有高度需求而用於工作組,例如
如果供應商 UI 需要更多記憶體,或如果已新增更多服務,則
執行個體門檻可能會提高
如果預留過多記憶體,可降低這個門檻 以便讓背景處理程序在很久之前就終止 會發生磁碟輾轉現象。
<!-- Device configuration setting the minfree tunable in the lowmemorykiller in the kernel. A high value causes the lowmemorykiller to fire earlier, keeping more memory in the file cache and preventing I/O thrashing, but allowing fewer processes to stay in memory. A low value keeps more processes in memory but may cause thrashing if set too low. Overrides the default value chosen by ActivityManager based on screen size and total memory for the largest lowmemorykiller bucket, and scaled proportionally to the smaller buckets. -1 keeps the default. --> <integer name="config_lowMemoryKillerMinFreeKbytesAbsolute">-1</integer>
<!-- Device configuration adjusting the minfree tunable in the lowmemorykiller in the kernel. A high value causes the lowmemorykiller to fire earlier, keeping more memory in the file cache and preventing I/O thrashing, but allowing fewer processes to stay in memory. A low value keeps more processes in memory but may cause thrashing if set too low. Directly added to the default value chosen by ActivityManager based on screen size and total memory for the largest lowmemorykiller bucket, and scaled proportionally to the smaller buckets. 0 keeps the default. --> <integer name="config_lowMemoryKillerMinFreeKbytesAdjust">0</integer>