所有機器的通用選項
aslr.disable=<bool>
預設值: false
如果設定這個選項,系統就不會使用位址空間配置隨機化。
aslr.entropy_bits=<uint8_t>
預設值: 0x1e
對於使用 ASLR 的位址空間,這項設定可控制隨機化中的熵位元數。熵值越高,位址空間就越稀疏,且頁面表格會使用更多記憶體。有效值介於 0 至 36 之間。
kernel.cprng-reseed-require.hw-rng=<bool>
預設值: false
啟用後,如果硬體 RNG 在重新植入時失敗,CPRNG 就會恐慌。
kernel.cprng-reseed-require.jitterentropy=<bool>
預設值: false
啟用後,如果 jitterentropy 無法重新播種,CPRNG 就會恐慌。
kernel.cprng-seed-require.hw-rng=<bool>
預設值: false
啟用後,如果 HW RNG 在初始播種時失敗,CPRNG 會發生恐慌。
kernel.cprng-disable.jitterentropy=<bool>
預設值: false
決定是否使用 jitterentropy 做為熵來源 (用於測試)
kernel.cprng-disable.hw-rng=<bool>
預設值: false
決定是否使用硬體 RNG 做為熵來源 (用於測試)
kernel.cprng-seed-require.jitterentropy=<bool>
預設值: false
啟用後,如果 jitterentropy 無法完成初始播種,CPRNG 就會恐慌。
kernel.cprng-seed-require.cmdline=<bool>
預設值: false
啟用後,如果您未透過核心指令列提供熵輸入,CPRNG 就會恐慌。
kernel.entropy-mixin=<hexadecimal>
提供要混入核心 CPRNG 的資訊熵。此值必須是小寫十六進位數字字串。
系統會盡快從記憶體清除原始值,並從所有診斷輸出內容中刪除。
kernel.jitterentropy.bs=<uint32_t>
預設值: 0x40
設定 jitterentropy 的「記憶體區塊大小」參數。當 jitterentropy 執行記憶體作業 (以增加 CPU 時序的變異性) 時,系統會以這個大小的區塊存取記憶體。
kernel.jitterentropy.bc=<uint32_t>
預設值: 0x200
設定 jitterentropy 的「記憶體區塊計數」參數。當 jitterentropy 執行記憶體作業 (以增加 CPU 時序的變異性) 時,這項設定會控管存取的區塊數量 (大小為 kernel.jitterentropy.bs
)。
kernel.jitterentropy.ml=<uint32_t>
預設值: 0x20
設定 jitterentropy 的「記憶體迴圈」參數。當 jitterentropy 執行記憶體作業 (以增加 CPU 時序的變異性) 時,這項設定會控管記憶體存取常式重複的次數。只有在 kernel.jitterentropy.raw
為 true 時,才會使用這個參數。如果這個參數的值為 0
,或 kernel.jitterentropy.raw
為 false
,jitterentropy 會以隨機方式選擇迴圈數。
kernel.jitterentropy.ll=<uint32_t>
預設值: 0x1
為 jitterentropy 設定「LFSR 迴圈」參數。當 jitterentropy 執行耗用大量 CPU 資源的 LFSR 作業 (以增加 CPU 時間的變異),這項設定會控管 LFSR 常式重複的次數。只有在 kernel.jitterentropy.raw
為 true 時,才會使用這個參數。如果這個參數的值為 0
,或 kernel.jitterentropy.raw
為 false
,jitterentropy 會以隨機方式選擇迴圈數。
kernel.jitterentropy.raw=<bool>
預設值: true
如果為 true,jitterentropy 熵收集器會傳回未經處理的原始樣本。如果為 false,系統會使用 jitterentropy 處理原始樣本,產生更接近均勻隨機的輸出資料。請注意,即使設為 false,CPRNG 仍會重新處理樣本,因此 jitterentropy 內部的處理作業會有些多餘。
kernel.lockup-detector.critical-section-threshold-ms=<uint64_t>
預設值: 0xbb8
如果 CPU 在指定的重要區段中停留的時間超過這個門檻,系統就會發出 KERNEL OOPS。
另請參閱 k lockup status
和鎖定偵測器。
如果設為 0,系統就會停用嚴重區段鎖死偵測功能。
當 kernel.lockup-detector.heartbeat-period-ms 為 0 時,系統會停用重要區段鎖死偵測功能。
kernel.lockup-detector.critical-section-fatal-threshold-ms=<uint64_t>
預設值: 0x2710
如果 CPU 在指定的重要區段中停留的時間超過這個門檻,系統就會產生當機記錄並重新啟動,並指出重新啟動的原因為 SOFTWARE_WATCHDOG
。
另請參閱 k lockup status
和鎖定偵測器。
如果設為 0,系統就不會產生重要區段的當機記錄,也不會重新啟動。
當 kernel.lockup-detector.heartbeat-period-ms 為 0 時,系統會停用重要區段鎖死偵測功能。
kernel.lockup-detector.heartbeat-period-ms=<uint64_t>
預設值: 0x3e8
次要 CPU 應透過核心計時器發出心跳訊號的頻率。這個值應夠大,不會影響系統效能,但應小於心跳間隔時間門檻。1000 是合理的值。
另請參閱「鎖定偵測器」。
如果設為 0,系統會停用心跳偵測功能。
kernel.lockup-detector.heartbeat-age-threshold-ms=<uint64_t>
預設值: 0xbb8
次要 CPU 最後一次心跳的年齡上限,超過這個上限即視為鎖定。這個值應大於心跳週期,但要夠小,以免錯過短暫的鎖定事件。3000 是合理的值。
另請參閱「鎖定偵測器」。
如果設為 0,系統會停用心跳偵測功能。
kernel.lockup-detector.heartbeat-age-fatal-threshold-ms=<uint64_t>
預設值: 0x2710
CPU 最後一次心跳訊號的年齡上限,超過這個上限就會視為鎖定,並觸發產生當機記錄,指出重新啟動的原因為 SOFTWARE_WATCHDOG
,然後重新啟動。
另請參閱「鎖定偵測器」。
如果設為 0,系統就不會產生心跳崩潰記錄,也不會重新啟動。
kernel.lockup-detector.diagnostic-query-timeout-ms=<uint64_t>
預設值: 0x64
嘗試從無回應的 CPU 取得診斷資料時,最多可花費的時間,超過此時間即會放棄。
如果設為 0,系統會停用診斷資料查詢功能。
kernel.oom.behavior=[reboot | jobkill]
預設值: reboot
這個選項可用於設定核心在遇到記憶體不足 (OOM) 情況時的行為。有效值為 jobkill
和 reboot
。
如果設為 jobkill
,當遇到 OOM 時,核心會嘗試終止設有 ZX_PROP_JOB_KILL_ON_OOM
位元的工作,以回收記憶體。
如果設為 reboot
,當系統遇到 OOM 時,核心會發出記憶體不足事件的信號 (請參閱 zx_system_get_event()
),等待一段時間,然後重新啟動系統。等待時間長度由 kernel.oom.reboot-timeout-ms
開機選項設定,預期在等待期間,使用者空間會在收到 OOM 訊號時觸發關機。
kernel.oom.reboot-timeout-ms=<uint32_t>
預設值: 0xc350
這個選項會設定核心在發出記憶體不足 (OOM) 事件後,重新啟動系統前要等待的時間。只有在 kernel.oom.behavior
設為 reboot
時,這個選項才適用。
kernel.mexec-force-high-ramdisk=<bool>
預設值: false
這項選項僅供測試之用。設為 true
時,會強制 mexec 系統呼叫將下列核心的 ramdisk 放在高記憶體中 (64 位元位址空間,>= 4GiB 偏移)。
kernel.mexec-pci-shutdown=<bool>
預設值: true
如果為 false,這個選項會在呼叫 mexec 時讓 PCI 裝置保持運作。
kernel.oom.enable=<bool>
預設值: true
這個選項會開啟核心中的記憶體不足 (OOM) 監控功能,當 PMM 的可用記憶體少於 kernel.oom.outofmemory-mb
,且無法回收任何記憶體時,就會根據 kernel.oom.behavior
採取行動。
您可以使用 k mem oom
指令手動觸發 OOM,導致可用記憶體低於 kernel.oom.outofmemory-mb
門檻。您可以透過 k mem oom <rate>
提供分配率,其中 <rate>
的單位為 MB。這會導致系統每秒配置指定量的記憶體,有助於觀察記憶體壓力狀態轉換。
如要進一步瞭解記憶體壓力狀態轉換,請參閱 kernel.oom.outofmemory-mb
、kernel.oom.critical-mb
、kernel.oom.warning-mb
和 zx_system_get_event()
。
您可以使用 k mem dump
指令查詢目前的可用記憶體狀態。
kernel.oom.outofmemory-mb=<uint64_t>
預設值: 0x32
這個選項會指定核心發出記憶體不足事件的可用記憶體門檻,並在沒有可釋放的記憶體時,根據 kernel.oom.behavior
指定的動作採取行動。
kernel.oom.critical-mb=<uint64_t>
預設值: 0x96
這個選項會指定核心發出「記憶體嚴重不足」事件的免除記憶體門檻,表示程序應釋出記憶體。
kernel.oom.warning-mb=<uint64_t>
預設值: 0x12c
這個選項會指定核心發出「記憶體壓力警告」事件的可用記憶體門檻,表示程序應減緩記憶體配置。
kernel.oom.debounce-mb=<uint64_t>
預設值: 0x1
這個選項會指定計算記憶體壓力狀態時使用的記憶體去抖動值,計算依據是可用記憶體門檻 (kernel.oom.outofmemory-mb
、kernel.oom.critical-mb
和 kernel.oom.warning-mb
)。記憶體可用性狀態之間的轉換會去抖動,也就是說,只有在可用記憶體量至少超出該狀態 kernel.oom.debounce-mb
時,才會離開該狀態。
舉例來說,假設 kernel.oom.critical-mb
設為 100 MB,kernel.oom.debounce-mb
設為 5 MB。如果系統目前有 90 MB 的可用記憶體,也就是處於「嚴重」狀態,可用記憶體就必須增加至至少 105 MB (100 MB + 5 MB),狀態才會從「嚴重」變更為「警告」。
kernel.oom.evict-at-warning=<bool>
預設值: false
如果設為 true
,這個選項會在記憶體壓力狀態為「警告」時,觸發可回收記憶體的排空作業。如果設為 false
,系統會在記憶體壓力達到「嚴重」狀態時觸發逐出作業。
kernel.oom.evict-continuous=<bool>
預設值: false
這個選項會設定核心逐出作業,讓這項作業持續在背景執行,盡量避免系統記憶體不足,而不是只在記憶體不足狀態轉換時觸發一次性逐出作業。
kernel.oom.eviction-delay-ms=<uint64_t>
預設值: 0x1388
這個選項會指定核心延遲驅逐的時間長度 (以毫秒為單位),當記憶體壓力狀態發生變化而需要驅逐時,核心會延遲驅逐。這項延遲可讓使用者空間元件先回收記憶體,避免因干擾核心逐出作業而導致資源耗盡。
kernel.oom.evict-with-min-target=<bool>
預設值: true
這個選項會指定核心是否也應一併逐出最少量的記憶體,同時嘗試達到目標可用記憶體。如果使用者空間也會釋放記憶體來回應記憶體壓力,這可確保核心逐出作業分攤負擔,進而達到某種程度的公平性。
kernel.oom.eviction-delta-at-oom-mb=<uint64_t>
預設值: 0xa
這個選項會指定核心嘗試同步逐出記憶體的精細度 (以 MB 為單位),避免進入記憶體不足狀態。請注意,這個值與 kernel.oom.evict-with-min-target 無關,兩者不會相互影響。
kernel.oom.hysteresis-seconds=<uint64_t>
預設值: 0xa
這個選項會指定記憶體壓力狀態轉換之間的磁滯間隔 (以秒為單位)。請注意,遲滯僅適用於從可用記憶體較少的狀態轉換為可用記憶體較多的狀態;反向轉換不會延遲。
kernel.oom.imminent-oom-delta-mb=<uint64_t>
預設值: 0xa
這個選項會指定超出記憶體不足門檻的增量 (以 MB 為單位),系統會在達到這個增量時發出記憶體即將不足的事件信號。這項信號用於擷取接近 OOM 的診斷記憶體資訊,因為可能無法在 OOM 發生時準確擷取狀態。
舉例來說,如果 kernel.oom.outofmemory-mb
設為 50,而 kernel.oom.imminent-oom-delta-mb
設為 20,則系統會在可用記憶體為 70 MB (即 50 MB + 20 MB) 時發出記憶體即將不足的信號,並在可用記憶體為 50 MB 時發出記憶體不足的信號。
將這個值設為 0 可停用即將記憶體不足事件。
kernel.oom.trigger-on-alloc-failure=<bool>
預設值: true
這項選項可控管是否要針對可能導致 PMM 分配失敗 (使用者可見) 的記憶體不足問題,觸發 OOM 回應。
kernel.phys.next=<string>
預設值: physboot
核心儲存檔案系統中 physload 將載入的檔案名稱。
kernel.phys.verbose=<bool>
預設值: true
這項設定可控制核心在早期開機階段記錄到序列主控台的程度;如果設為 false,系統只會記錄與錯誤相關的內容。
這個選項的其中一個用途是進行基準測試:同步單一執行緒 UART 寫入作業的成本相對較高 (10 個字元/毫秒),會計入 physboot 中花費的總時間,因此最好將這類工作排除在整體時間測量之外。
kernel.phys.backtrace-max=<uint32_t>
預設值: 0x40
如果核心在早期啟動階段發生當機情形,可以在序列控制台上列印回溯追蹤;系統會根據影格指標列印回溯追蹤,並在建構時使用陰影呼叫堆疊,根據陰影呼叫堆疊列印平行回溯追蹤。每個回溯追蹤最多會列印這麼多影格。(大多數回溯追蹤會在達到限制前,以最外層的影格結尾。) 將限制設為零會列印無限個影格,這可能會導致影格指標回溯出現無限迴圈。
kernel.phys.print-stack-max=<uint32_t>
預設值: 0x400
如果核心在啟動初期階段發生當機情形,可以在序列主控台上列印堆疊內容。這是要傾印的堆疊記憶體大小上限 (以位元組為單位);實際傾印量取決於堆疊深度。每個 16 位元組的堆疊會印在一行上,最多可使用 75 個字元。
kernel.ppb.borrow-on-mru=<bool>
預設值: false
這項政策可控制非借用頁面移至 MRU 佇列時,是否要以借用頁面取代非借用頁面 (如有任何借用頁面)。在正常情況下,這項移動作業會延遲執行,但在 OOM 附近,隨著清除作業進行,任何應位於 MRU 佇列中的頁面都會移至 MRU 佇列。
kernel.ppb.loan=<bool>
預設值: false
這項設定可控制是否要在連續 VMO 上啟用 ZX_VMO_OP_DECOMMIT。如果為 true,則可對連續 VMO 執行取消配置作業,並傳回 ZX_OK。這些頁面會借給系統的其餘部分,供其借用。如果為 false,取消認可會傳回 ZX_ERR_NOT_SUPPORTED。
kernel.ppb.replace-on-unloan=<bool>
預設值: false
這項設定可控管將借出的頁面重新提交至原始連續 VMO 時的行為。如果為 false,系統會將網頁從借用位置逐出,因此需要將內容錯誤地放回。若為 true,系統會將內容複製到新頁面,並替換借用的頁面。
kernel.render-dlog-to-crashlog=<bool>
預設值: false
如果設為 true,系統會在核心恐慌期間,將盡可能多的近期核心偵錯記錄附加至產生的當機記錄,以利偵錯。
kernel.serial=[none | legacy | qemu | <type>,<base>,<irq>]
預設值: 來自 ZBI 項目
這項設定可控管使用的序列埠。核心偵錯序列埠是保留資源,只能在核心內使用。
如果設為 none
,核心偵錯序列埠就會停用,且不會保留,因此預設序列埠可在核心外部使用。
如果沒有明確設定這個選項,系統會從最後一個 ZBI_TYPE_KERNEL_DRIVER
類型的 ZBI 項目推導出對等值,該項目具有其中一個 ZBI_KERNEL_DRIVER_*_UART
子類型,可能是原始 ZBI 中提供的項目,也可能是開機載入器 (或開機墊片) 附加的項目。明確的開機選項一律會覆寫 ZBI 項目,即使是 none
也不例外。(ZBI_TYPE_CMDLINE
項目相對於 ZBI_TYPE_KERNEL_DRIVER
項目的順序無關緊要)。
設定字串格式如下:
* 適用於 MMIO UART:
- kernel.serial=UART_MODEL,MMIO_ADDR,IRQ,FLAGS
* 適用於 PIO UART:
- kernel.serial=UART_MODEL,IOPORT,IRQ
* 適用於此架構上常見 QEMU 虛擬機使用的預設值:
- qemu
* 適用於 x86 上的傳統 COM1
設定:
- legacy
kernel.vdso.always_use_next=<bool>
預設值: false
如果設定這個選項,核心會提供「下一個」vDSO 給使用者空間,而非預設的「穩定」vDSO。
vdso.ticks_get_force_syscall=<bool>
預設值: false
如果設定這個選項,即使可從使用者模式存取硬體週期計數器暫存器,系統仍會強制將 zx_ticks_get
vDSO 呼叫設為真正的系統呼叫。
vdso.clock_get_force_syscall=<bool>
預設值: false
如果設定這個選項,系統會強制 zx_clock_get_monotonic
和 zx_clock_get_boot
vDSO 呼叫成為真正的系統呼叫,而不是單純在使用者模式中轉換刻度計數器。
kernel.userpager.overtime_wait_seconds=<uint64_t>
預設值: 0x14
這個選項會設定使用者分頁錯誤可封鎖的時間長度,超過這個時間就會視為超時,並將資訊訊息列印到 debuglog,然後繼續等待。如果值為 0,表示等待時間一律不會視為超時。
kernel.userpager.overtime_timeout_seconds=<uint64_t>
預設值: 0x12c
這項選項會設定使用者分頁錯誤可封鎖的時間長度,超過這個時間就會中止。如果是硬體頁面錯誤,發生錯誤的執行緒會以嚴重頁面錯誤例外狀況終止。如果是系統呼叫觸發的軟體頁面錯誤,系統呼叫會失敗並傳回 ZX_ERR_TIMED_OUT
。值為 0 表示頁面錯誤不會因逾時而中止。
kernel.userpager.overtime_printout_limit=<uint32_t>
預設值: 0x4
這個選項會設定要發出至 debuglog 的待處理要求數量上限,以回報超時狀況。如果待處理的要求數量龐大,所有要求的詳細資料可能都沒用,而且會造成偵錯記錄負載過重。
kernel.heap-max-size-mb=<uint64_t>
預設值: 0x800
這個選項可設定堆積的大小上限。只有在核心已編譯為使用虛擬堆積時,才會生效。
kernel.heap.alloc_fill_threshold=<uint64_t>
預設值: 0x0
設定後,核心堆積會填滿低於此大小 (以位元組為單位) 的分配項目。
kernel.bufferchain.reserve-pages=<uint64_t>
預設值: 0x20
指定每個 CPU 要保留的頁面數量,用於緩衝區鏈結分配 (管道訊息)。系統負載時,較高的值會減少 PMM 上的爭用,但系統閒置時會使用更多記憶體。
TODO(https://fxbug.dev/42147481):判斷這個值的上限,避免耗用過多記憶體。
kernel.bypass-debuglog=<bool>
預設值: false
啟用後,系統會強制將輸出內容傳送至控制台,而非緩衝處理。我們同時提供編譯切換和指令列參數,是為了在剖析指令列之前,方便核心中的列印作業強制前往控制台。如果同時存在編譯切換設定和 cmdline 參數,編譯切換設定會覆寫 cmdline 參數。 請注意,編譯切換和 cmdline 參數都會產生副作用,導致系統停用 irq 驅動的 uart Tx。
kernel.debug_uart_poll=<bool>
預設值: false
如果設為 true,系統會定期輪詢 UART,並將內容轉送至控制台。
kernel.enable-debugging-syscalls=<bool>
預設值: false
停用後,與偵錯相關的特定系統呼叫會失敗,並顯示 ZX_ERR_NOT_SUPPORTED
。這兩種網址格式分別如下:
zx_debug_send_command()
zx_ktrace_control()
zx_ktrace_init()
zx_ktrace_read()
zx_mtrace_control()
- 附有
ZX_PROP_PROCESS_HW_TRACE_CONTEXT_ID
的zx_object_get_property()
zx_process_write_memory()
zx_system_mexec()
zx_system_mexec_payload_get()
zx_thread_write_state()
(使用ZX_THREAD_STATE_DEBUG_REGS
類型時)。- 附有
ZX_VMO_OP_CACHE_INVALIDATE
的zx_vmo_op_range()
kernel.enable-serial-syscalls=[false | true | output-only]
預設值: false
如果 false
,zx_debug_read()
和 zx_debug_write()
都會失敗,並顯示 ZX_ERR_NOT_SUPPORTED
。
當 output-only
時,zx_debug_read()
會因 ZX_ERR_NOT_SUPPORTED
而失敗,但 zx_debug_write()
會正常運作。
true
時,兩者都會正常運作。
kernel.entropy-test.src=[hw_rng | jitterentropy]
預設值: hw_rng
執行熵收集器品質測試時,請使用提供的熵來源。除非核心是使用 ENABLE_ENTROPY_COLLECTOR_TEST=1
建構,否則系統會忽略這個選項。
kernel.entropy-test.len=<uint64_t>
預設值: 0x100000
執行熵收集器品質測試時,請收集指定位元組數。
如要提高最大值,請將 ENTROPY_COLLECTOR_TEST_MAXLEN
定義為該值。
kernel.force-watchdog-disabled=<bool>
預設值: false
設定後,系統會在啟動序列中盡快嘗試停用啟動載入程式啟動並傳遞的任何硬體監控計時器,前提是啟動載入程式提供足夠資訊,瞭解如何完全停用 WDT。
kernel.halt-on-panic=<bool>
預設值: false
如果設定這個選項,系統會在核心恐慌時停止運作,而不是重新啟動。如要啟用 halt-on-panic,請傳遞核心指令列引數 kernel.halt-on-panic=true
。
由於啟用 GPU 時,核心無法穩定繪製到 Framebuffer,因此如果核心當機或恐慌,系統預設會重新啟動。
如果核心當機且系統重新啟動,核心錯誤記錄會顯示在 /boot/log/last-panic.txt
,方便您查看及下載等。
請將
last-panic.txt
和zircon.elf
檔案附加至您提出的任何核心恐慌錯誤。
如果出現 last-panic.txt
,表示這是核心恐慌發生後,首次成功啟動。
這項資訊不會「保留」在裝置上,如果重新啟動裝置,這項資訊就會消失,如果再次發生當機情形,這項資訊就會遭到取代。
ktrace.bufsize=<uint32_t>
預設值: 0x20
這個選項會指定分配給 ktrace 記錄的 MB 數。
ktrace.grpmask=<uint32_t>
預設值: 0x0
這個選項會指定要發出的 ktrace 記錄。這個值是 zircon/ktrace.h 中 KTRACE_GRP_* 值的位元遮罩。十六進位值可指定為 0xNNN。
kernel.memory-limit-dbg=<bool>
預設值: true
這個選項會啟用記憶體限制程式庫的詳細記錄。
kernel.memory-limit-mb=<uint64_t>
預設值: 0x0
這個選項會設定系統記憶體的上限 (以 MB 為單位)。如果設為零,則不會設定上限。
舉例來說,如果選擇的值夠低,使用者就能模擬實體記憶體比實際記憶體少的系統。
kernel.page-scanner.enable-eviction=<bool>
預設值: true
設定後,核心就能釋出可回收的記憶體,方法是逐出檔案頁面和未鎖定的可捨棄 VMO,或是執行頁面壓縮。回收作業可減少記憶體用量,並避免記憶體不足的情況,但會移除系統行為的部分時間可預測性。
kernel.page-scanner.page-table-eviction-policy=[always | never | on_request]
預設值: always
設定未存取使用者頁面表格的回收政策。
當 on_request
時,只會在要求時執行逐出作業,例如回應記憶體不足的情況。
如果 never
,系統就不會逐出頁面資料表。
當 always
時,系統會定期清除未使用的頁面表格。您可以透過 kernel.page-scanner.page-table-eviction-period
控制這段時間。
kernel.page-scanner.page-table-eviction-period-ms=<uint32_t>
預設值: 0x2710
設定掃描網頁表格的速率 (以毫秒為單位)。如果兩個連續掃描作業之間沒有使用任何頁面資料表,這些資料表就會成為可清除的候選項目。
只有在 kernel.page-scanner.page-table-eviction-policy=always
時,這個選項才會生效。
kernel.page-scanner.min-aging-interval-ms=<uint32_t>
預設值: 0x7d0
設定連續老化事件之間的最短時間 (以毫秒為單位)。這裡的值越高,越能提供穩定的作用中集合,減少出現類似的行為,並縮短收集網頁存取資訊的時間。值越小,有效集數越少,回收機會就越多。
這個值應小於或等於 kernel.page-scanner.max-aging-interval-ms
。
kernel.page-scanner.max-aging-interval-ms=<uint32_t>
預設值: 0x3a98
設定連續老化事件之間的時間上限 (以毫秒為單位)。這個時間是網頁年齡資訊可能出現的最差情況,如果系統行為快速變化,較高的值可能會導致沒有足夠的年齡資訊來執行回收作業。如果值較低,網頁會累積在最舊的儲存區,導致遺失保真度資訊,增加回收時選擇次佳網頁的機率。
這個值應大於或等於 kernel.page-scanner.min-aging-interval-ms
。
kernel.page-scanner.accessed-scan-interval-ms=<uint32_t>
預設值: 0xbb8
設定收集網頁存取資訊的時間間隔 (以毫秒為單位)。值越低,年齡準確度越高,但會增加 CPU 時間,以利收集資料,進而提高頁面回收選擇的準確度。
將這個值設為低於 kernel.page-scanner.min-aging-interval-ms
,不會帶來任何好處。
kernel.page-scanner.active-ratio-multiplier=<uint32_t>
預設值: 0x2
控制觸發老化程序前,允許的有效網頁與無效網頁比例。
這個比率會以乘數表示,以簡化核心演算法 (should_age = active_page_count * active_ratio_multiplier > inactive_page_count
)。乘數越高,老化事件的發生頻率就越高,因此有效集中的網頁就越少。如果乘數為 0,系統就會停用根據有效網頁比例的淘汰機制。
只有在 kernel.page-scanner.min-aging-interval-ms
和 kernel.page-scanner.max-aging-interval-ms
之間,有效比率才會觸發老化,因此如果間隔相等,就不會產生任何影響。
kernel.page-scanner.start-at-boot=<bool>
預設值: true
這個選項會導致核心在啟動時,最初啟用記憶體掃描器。您也可以使用核心控制台啟用及停用這項功能。停用掃描器後,系統會移除以時間為準的背景記憶體回收作業,因此可提供額外的系統可預測性。
掃描器執行的每個動作都可以個別設定及停用。 如果所有動作都已停用,啟用掃描器不會有任何效果。
kernel.page-scanner.zero-page-scans-per-second=<uint64_t>
預設值: 0x4e20
這個選項會設定零網頁掃描器每秒考慮的候選網頁數量上限。
如果設為零,系統就不會掃描零網頁。這可為基準測試或其他工作負載提供額外的系統可預測性。
網頁掃描器必須處於執行狀態,這個選項才會生效。您可以在啟動時使用 kernel.page-scanner.start-at-boot
選項啟用這項功能。
選擇這個值是為了在最糟的情況下,讓低階 ARM 裝置耗用 5% 的 CPU。個別設定可視需要調高 (或調低) 這個值。
kernel.page-scanner.lru-action=[none | evict_only | compress_only | evict_and_compress]
預設值: none
設定要在 LRU 佇列中的舊頁面上執行的任何回收動作。無論記憶體壓力為何,都會發生這些動作。如果指定 none
動作,系統就不會因為網頁過舊而回收。
支援的動作包括:
- none
- evict_only
- compress_only
- evict_and_compress
kernel.compression.random-debug-compress=<bool>
預設值: false
啟用這項測試選項後,VM 會立即隨機壓縮網頁,不論網頁的存留時間長短。這項功能旨在方便測試壓縮路徑,不必等待網頁老化,也不必讓系統處於低記憶體狀態。如果核心並未啟用偵錯斷言建構,或未設定壓縮和儲存策略,啟用這個選項就會發生錯誤。
kernel.compression.strategy=[none | lz4]
預設值: none
支援的壓縮策略包括:
- none
- lz4
這個選項會選取網頁需要壓縮時要使用的壓縮策略。
如果 none
設為 none
,則 kernel.compression.storage-strategy
也必須設為 none
。選取 none
即可有效停用壓縮功能。
kernel.compression.storage-strategy=[none | slot]
預設值: none
支援的壓縮儲存空間策略如下:
- none
- slot
這個選項會選取要用於儲存壓縮資料的所需儲存策略。如果 none
設為 none
,則 kernel.compression.strategy
也必須設為 none
。
kernel.compression.threshold=<uint32_t>
預設值: 0x46
這個選項會控制壓縮網頁必須達到的壓縮門檻,才能儲存。如果網頁未達到這個門檻,系統會繼續以未壓縮格式儲存。
這個選項是以百分比表示,值為 100 代表網頁只需壓縮至至少原始大小,值為 0 則代表網頁必須壓縮至零大小。
有效值介於 1 至 100 之間 (含首尾)。
kernel.compression.lz4.acceleration=<uint32_t>
預設值: 0xb
這個選項可控制提供給 LZ4 壓縮實作的加速因子。如要瞭解如何解讀這個值,請參閱目前的 LZ4 實作。
kernel.compression.at_memory_pressure=<bool>
預設值: false
這個選項可控制是否應在記憶體壓力下執行網頁壓縮。
如要讓這個選項生效,必須啟用 kernel.page-scanner.enable-eviction,並設定 kernel.compression.strategy 和 kernel.compression.storage-strategy。
kernel.compression.reclaim_anonymous=<bool>
預設值: false
這個選項會控管匿名網頁是否要放入可回收的網頁佇列,以及是否要提供相關聯的年齡資訊。啟用這項設定會增加匿名網頁的少量負擔,以追蹤年齡,但如果想讓「kernel.compression.at_memory_pressure」等選項生效,就必須啟用這項設定。
kernel.compression.reclaim_zero_forks=<bool>
預設值: false
這個選項與「kernel.compression.reclaim_anonymous」類似,但適用於匿名頁面的零分叉。啟用這項設定後,「kernel.page-scanner.zero-page-scans-per-second」選項將不會生效,且如果未啟用「kernel.compression.reclaim_anonymous」,啟用這項設定會導致錯誤。
kernel.pmm-checker.action=[oops | panic]
預設值: oops
這個選項會指定 PMM 檢查工具偵測到損毀時採取的動作。值必須是下列其中一個:
* oops
- 偵測到損毀時,系統會發出非致命的 Kernel OOPS。
* panic
- 偵測到損毀時,會發生致命的 Kernel Panic。
kernel.pmm-checker.enable=[true | false | auto]
預設值: false
這項設定可控管是否啟用 PMM 的 use-after-free 檢查工具。
PMM 檢查器可能很耗費資源,適用於偵錯和開發版本。值必須是下列其中一個:
* true
- 一律啟用檢查工具。
* false
- 檢查工具一律不會啟用。
* auto
- 核心會根據環境及其效能特徵,決定是否啟用檢查程式。在管理程序下執行是考量因素之一。
另請參閱「k pmm checker」。
kernel.pmm-checker.fill-size=<uint64_t>
預設值: 0x1000
啟用 PMM 的使用後釋放檢查工具時,這個選項會指定要填入或檢查每個可用頁面的位元組數。有效值為 8 的倍數,介於 8 和 PAGE_SIZE 之間 (含首尾)。
kernel.pmm.alloc-random-should-wait=<bool>
預設值: false
啟用測試選項,導致 PMM 隨機失敗可等待的頁面分配作業,並顯示 ZX_ERR_SHOULD_WAIT,無論目前的記憶體層級為何。這項功能旨在簡化等待路徑的測試,不必將系統設為低記憶體狀態。如果核心並未啟用偵錯斷言,啟用這個選項就會發生錯誤。
kernel.stack.canary-percent-free=<uint64_t>
預設值: 0x0
這項設定可控制 Canary 在核心堆疊中的放置位置偏移量。如果 Canary 遭到破壞,表示堆疊在使用期間至少達到該深度,可用於預先警告堆疊用量即將達到上限。偏移量是以百分比定義,用來考量核心堆疊大小的變異性。舉例來說,值為 0 會將 Canary 放在堆疊的最後,也就是說,Canary 會在堆疊溢位時同時損毀。
系統會在堆疊釋放時 (即執行緒終止時) 執行 Canary 偵測,如果 Canary 損毀,就會產生核心 OOPS。
kernel.portobserver.reserve-pages=<uint64_t>
預設值: 0x8
指定每個 CPU 的頁面數,以保留給連接埠觀察器 (async wait) 分配。系統負載時,較高的值會減少 PMM 的爭用,但系統閒置時會使用更多記憶體。
kernel.portpacket.reserve-pages=<uint64_t>
預設值: 0x1
指定每個 CPU 要保留的頁面數,以供通訊埠封包 (port_queue) 分配。系統負載時,較高的值會減少 PMM 的爭用,但系統閒置時會使用更多記憶體。
kernel.root-job.behavior=[halt | reboot | bootloader | recovery | shutdown]
預設值: reboot
這個選項會指定根工作終止時,或沒有工作和程序時,核心應採取的動作。
當 halt
時,系統會停止運作。
當 reboot
時,系統會重新啟動。
當 bootloader
時,系統會重新啟動並進入系統啟動載入程式。
當 recovery
時,系統會重新啟動至復原磁碟分割區。
當 shutdown
時,系統會關機。
kernel.root-job.notice=<string>
如果根工作終止,或沒有工作和程序,這個選項可讓系統列印通知。
kernel.shell=<bool>
預設值: false
指示核心在核心控制台上啟動自己的殼層,而非啟動使用者空間。
kernel.shell.script=<string>
告知核心執行 kernel.shell
指令的預錄指令碼。如果也指定 kernel.shell
,除非指令碼會關閉系統,否則指令碼完成後,核心殼層命令提示字元就會出現。由於核心指令列上的空白字元會分隔不同的開機選項,因此指令碼中的 +
字元會替換為空格,以便使用含引數的指令,而 ;
字元則可分隔指令碼中的指令。
kernel.smp.ht=<bool>
預設值: true
這個選項會指定是否要啟用超執行緒 (HT) 邏輯 CPU。
kernel.test.ram.reserve=<std::optional>
指定要保留的實體 RAM 範圍,以供測試。 這應只寫為 SIZE (整數位元組數量,應與頁面對齊),但在核心在早期啟動時指派位址後,會讀回為 SIZE、ADDRESS。
kernel.port.max-observers=<uint64_t>
預設值: 0xc350
指定單一連接埠可擁有的觀察者數量上限。達到這個上限時,系統會在超過上限的程序中引發 Zircon 例外狀況。這個值應夠高,才能避免行為良好的程式達到上限,但也要夠低,才能在行為異常的程式影響系統前終止這些程式。
kernel.select=<string>
預設值: zircon
要從 ZBI 中的 STORAGE_KERNEL 項目啟動的 Kernel 套件名稱。
kernel.select.userboot=<string>
預設值: userboot
要在核心建立的第一個 (也是唯一) 使用者程序中執行的程式:kernel.select
所選套件中的 ELF 靜態 PIE 檔案。第一個使用者程序會從管道的控制代碼開始,該管道會接收單一訊息,其中包含所有特權和必要功能的初始控制代碼,適用於初始程序本身和系統。
kernel.scheduler.prefer-little-cpus=<bool>
預設值: false
搜尋要放置工作的 CPU 時,請優先選擇小核心,而非大核心。啟用這項選項後,系統會以降低耗電量為優先考量,而非提升效能。
已淘汰 - 我們預計在即將發布的版本中移除這個選項。請勿對其建立任何重要依附元件。
kernel.scheduler.enable-new-wakeup-accounting=<bool>
預設值: false
這個選項會停用先前排程行為的模擬功能,讓新喚醒的執行緒較不可能搶占目前正在執行的執行緒。雖然與改良後的行為相比,先前的行為對新喚醒的執行緒較不公平,但模擬先前的行為可降低特定類型的潛在競爭條件導致系統發生問題的可能性。在所有產品全面採用改良的喚醒行為之前,必須先修正這些競爭條件。
TODO(https://fxbug.dev/322207536):解決堆疊中較高的競爭條件後,停止重設開始和結束時間。
kernel.ubsan.action=[oops | panic]
預設值: panic
如果核心已透過 UndefinedBehaviorSanitizer 進行檢測,系統會在序列主控台上回報偵測到的問題。這些錯誤可能是致命或非致命錯誤。
值必須是下列其中一個:
* oops
- 偵測到未定義的行為,導致非嚴重的核心 OOPS。
* panic
- 偵測到未定義的行為,導致核心嚴重恐慌。
僅適用於 arm64 電腦的選項
kernel.arm64.disable_spec_mitigations=<bool>
預設值: false
如果設定,系統會停用所有推測執行資訊洩漏緩解措施。
如未設定,系統會使用各項緩解措施的預設值。
kernel.arm64.event-stream.enable=<bool>
預設值: true
啟用後,每個 ARM CPU 都會啟用事件串流產生器,每個 CPU 會以特定速率設定隱藏事件標記。這會將 CPU 從可能處於的任何 WFE 狀態中踢出。
kernel.arm64.event-stream.freq-hz=<uint32_t>
預設值: 0x2710
如果已啟用事件串流,請指定嘗試執行的頻率。解析度有限,因此驅動程式庫只能從 CPU 計時器計數器中選擇最接近的 2 的冪。
kernel.arm64.debug.dap-rom-soc=<string>
如果已設定,會嘗試在特定單晶片系統的硬式編碼位址初始化 DAP 偵錯孔徑。目前接受的值為 amlogic-t931g、amlogic-s905d2、amlogic-s905d3g 和 amlogic-a311d。
kernel.smp.maxcpus=<uint32_t>
預設值: 0x10
這個選項會限制要初始化的 CPU 數量。特定架構的值不得大於 SMP_MAX_CPUS。
kernel.phys.psci-reset=[disabled | shutdown | reboot | reboot-bootloader | reboot-recovery]
預設值: reboot
這個選項會決定早期啟動核心在需要恐慌和當機時,將使用哪種 PSCI 重設作業 (如有)。如果設為「disabled」,機器可能會在恐慌時進入無限迴圈。
kernel.arm64.phys.mmu=<bool>
預設值: true
這樣一來,核心就能在早期啟動階段使用 MMU 和快取。
kernel.arm64.enable-asid=<bool>
預設值: true
這樣就能使用 ASID。如果基礎硬體支援 16 位元 ASID,則預設為 True。
kernel.arm64.alternate-vbar=[none | auto | arch3 | arch1 | psci | smccc10]
預設值: auto
這會選取替代例外狀況向量實作項目,用於解決從 EL0 進入 EL1 時的 CPU 專屬問題。可能的值:
* none
- No mitigations performed in early EL0 exception paths.
* auto
(預設) - 根據韌體透過 SMCCC / PSCI 介面回報的可用性,選取 SMCCC 函式 ID。然後每個 CPU 會個別查詢韌體,確認是否需要任何解決方法。如果韌體不是 SMCCC >= 1.1,且回報支援 SMCCC_ARCH_WORKAROUND_3 和/或 SMCCC_ARCH_WORKAROUND_1 函式 ID,則這與 none
的效果相同。如果韌體支援這項功能,則每個 CPU 會根據韌體指示,決定是否使用韌體解決方法。無論是哪種情況,系統都會停用替代的 Spectre 緩解措施,因為這些措施不是與韌體解決方法重複,就是不需要韌體解決方法時,這些措施也不會派上用場。* arch3
- Always use SMCCC_ARCH_WORKAROUND_3 on every CPU. 如果韌體不支援 SMCCC 1.1 或 SMCCC_ARCH_WORKAROUND_3,可能會產生無法預測的影響。這樣一來,當韌體支援這項功能時,每個 CPU 都會執行 auto
為每個 CPU 選取的作業 (韌體會指出哪些 CPU 應使用這項功能)。這也會停用與 SMCCC_ARCH_WORKAROUND_3 冗餘的替代 Spectre 緩解措施。* arch1
- Always use SMCCC_ARCH_WORKAROUND_1 on every CPU. 如果韌體不支援 SMCCC 1.1 或 SMCCC_ARCH_WORKAROUND_1,可能會產生無法預測的影響。這會讓每個 CPU 執行韌體選取的作業,韌體會指出哪些 CPU 應使用該作業,前提是韌體支援「1」函式,但不支援「3」函式。auto
這也會停用與 SMCCC_ARCH_WORKAROUND_1 冗餘的替代 Spectre 緩解措施。* psci
- Always use PSCI_VERSION with SMCCC 1.1 calling conventions, on
every CPU. 如果韌體不支援 SMCCC 1.1,可能會產生無法預測的影響。目前 auto
不會為任何 CPU 選取這項行為。* smccc10
- Always use PSCI_VERSION with SMCCC 1.0 calling conventions, on
every CPU. 這在所有系統上都很安全,但比 SMCCC 1.1 選項的負荷更大,而且可能不是所有 CPU 都需要。目前 auto
絕不會為任何 CPU 選取此行為。
如同異質核心的 SoC,每個 CPU 都應選取不同的值,且測試時只能使用 auto
以外的值。
kernel.arm64.force-pct=<bool>
預設值: false
根據預設,核心會選取 ARM 虛擬計數器 (VCT) 做為系統的時間參考。如果系統為實體計時器硬體提供 IRQ,但未為虛擬計時器硬體提供 IRQ,則只會選擇實體計數器 (PCT)。設定 force-pct 選項後,即使 ZBI 中提供 VCT IRQ,核心一律會選擇使用 PCT 做為時間參考。請注意,如果目標沒有定義 PCT IRQ,對該目標設定 force-pct 會導致早期啟動期間發生恐慌。
kernel.arm64.pci=<bool>
預設值: true
啟用核心模式 PCI 支援和核心 PCI 系統呼叫。
僅適用於 riscv64 機器的選項
kernel.smp.maxcpus=<uint32_t>
預設值: 0x10
這個選項會限制要初始化的 CPU 數量。特定架構的值不得大於 SMP_MAX_CPUS。
kernel.riscv64.enable-asid=<bool>
預設值: true
這樣就能使用 ASID。如果基礎硬體支援 16 位元 ASID,則預設為 True。
kernel.riscv64.phys.mmu=<bool>
預設值: true
這樣就能在核心的早期啟動階段使用 MMU。
僅適用於 x86 電腦的選項
kernel.x86.disable_spec_mitigations=<bool>
預設值: false
如果設定,系統會停用所有推測執行資訊洩漏緩解措施。
如未設定,系統會使用各項緩解措施的預設值。
kernel.x86.hwp=<bool>
預設值: true
這項設定可在支援的晶片上啟用 HWP (硬體 P 狀態)。這項功能可讓 Intel CPU 自動調度時脈速度。
kernel.x86.hwp_policy=[bios-specified | performance | balanced | power-save | stable-performance]
預設值: bios-specified
設定 CPU 的電源/效能取捨政策。支援 HWP (硬體 P 狀態) 的 x86 CPU 可設定為自動調整頻率,以配合不同政策。
目前支援的政策包括:
bios-specified
:使用韌體/BIOS 設定中指定的電源/效能取捨政策。如果沒有可用的政策,則會改回balanced
。performance
:盡量提升成效。balanced
:兼顧效能和省電。power-save
:降低耗電量,但效能會隨之降低。stable-performance
:使用可維持系統效能一致性的設定。 舉例來說,在基準化時,維持可預測的效能比盡量提升效能更重要,這時就可能派上用場。
kernel.x86.md_clear_on_user_return=<bool>
預設值: true
MDS (微架構資料取樣) 是一系列推測執行資訊洩漏錯誤,可讓惡意程式碼推斷近期載入或儲存的內容,無論權限層級為何 (CVE-2019-11091、CVE-2018-12126、CVE-2018-12130、CVE-2018-12127)。舉例來說,這可能會允許使用者程式碼讀取最近的核心載入/儲存作業。
為避免發生這個錯誤,您必須在信任層級轉換時,清除所有可能洩漏資料的微架構結構。此外,信任層級不得在單一實體處理器核心上同時執行,這點非常重要。
這個選項可控管是否要盡可能在核心到使用者結束路徑上,清除微架構結構。可能會對成效造成負面影響。
- 如果設為 true (預設值),處理器有安全漏洞時,系統會清除結構。
- 如果設為 False,系統不會對結構執行任何排清作業。
kernel.x86.spec_store_bypass_disable=<bool>
預設值: false
Spec-store-bypass (Spectre V4) 是一種推測執行資訊洩漏安全漏洞,會影響許多 Intel 和 AMD x86 CPU。這項技術會以記憶體消歧硬體為目標,推斷近期商店的內容。這項攻擊只會影響相同權限層級的程序內資料。
這項指令列選項可控管是否啟用緩解措施。緩解措施會對效能造成負面影響。
- 如為 true,系統會在需要此緩解措施的 CPU 上啟用。
- 如果設為 False (預設值),系統就不會啟用緩解措施。
kernel.x86.turbo=<bool>
預設值: true
Turbo Boost 或 Core Performance Boost 機制可讓處理器在執行階段,根據可用的熱能和電力預算,動態調整效能。這可能會以效能變異性為代價,提供更優異的互動效能。部分工作負載可能會受益於停用 Turbo;如果這個指令列標記設為 false,系統中所有 CPU 的 Turbo 都會停用。
kernel.x86.enable_pcid=<bool>
預設值: true
如果 CPU 支援,這個選項可控制是否使用 PCID。 如果啟用這個選項,但 CPU 支援不足,這個選項就不會生效。
kernel.smp.maxcpus=<uint32_t>
預設值: 0x20
這個選項會限制要初始化的 CPU 數量。特定架構的值不得大於 SMP_MAX_CPUS。
kernel.wallclock=[auto | tsc | pit | hpet]
預設值: auto
這個選項可用於強制在電腦建構中選取特定掛鐘。