Zircon 核心指令列選項

所有機器皆適用的選項

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

決定是否要使用硬體隨機數產生器做為熵來源 (用於測試)

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 設定「memory loops」參數。當 jitterentropy 執行記憶體作業 (以增加 CPU 時間的變化) 時,此值會控制記憶體存取例行程序重複執行的次數。只有在 kernel.jitterentropy.raw 為 true 時,才會使用這個參數。如果這個參數的值是 0,或是 kernel.jitterentropy.rawfalse,那麼 jitterentropy 會以隨機的方式選擇迴圈數量。

kernel.jitterentropy.ll=<uint32_t>

預設值: 0x1

為 jitterentropy 設定「LFSR 迴圈」參數。當 jitterentropy 執行 CPU 密集的 LFSR 作業 (以增加 CPU 時間的變化) 時,這個值會控制 LFSR 例行程序重複執行的次數。只有在 kernel.jitterentropy.raw 為 true 時,系統才會使用這個參數。如果這個參數的值是 0,或是 kernel.jitterentropy.rawfalse,那麼 jitterentropy 會以隨機的方式選擇迴圈數量。

kernel.jitterentropy.raw=<bool>

預設值: true

如果為 true,抖動熵熵收集器就會傳回原始未經處理的樣本。如果為 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) 情況時,設定核心的行為。有效值為 jobkillreboot

如果設為 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 系統呼叫將下列核心的 RAM 磁碟置於高記憶體 (64 位元位址空間,>= 4 GiB 偏移)。

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-mbkernel.oom.critical-mbkernel.oom.warning-mbzx_system_get_event()

您可以使用 k mem dump 指令查詢目前的記憶體可用性狀態。

kernel.oom.outofmemory-mb=<uint64_t>

預設值: 0x32

這個選項會指定空閒記憶體門檻,如果沒有可釋出的可回收記憶體,核心會發出記憶體不足事件,並採取 kernel.oom.behavior 指定的動作。

kernel.oom.critical-mb=<uint64_t>

預設值: 0x96

這個選項會指定可用記憶體門檻,當核心發出「Critical memory pressure」事件時,就會發出訊號,表示程序應釋放記憶體。

kernel.oom.warning-mb=<uint64_t>

預設值: 0x12c

這個選項會指定可用記憶體門檻,當核心發出記憶體壓力警告事件時,就會觸發這個門檻,並指示程序應減緩記憶體配置速度。

kernel.oom.debounce-mb=<uint64_t>

預設值: 0x1

這個選項會指定記憶體去抖動值,用於根據空閒記憶體門檻 (kernel.oom.outofmemory-mbkernel.oom.critical-mbkernel.oom.warning-mb) 計算記憶體壓力狀態。在記憶體可用性狀態之間轉換時,系統會在記憶體量至少達到該狀態以外的 kernel.oom.debounce-mb 之前,保持在該狀態,以便進行去抖動。

舉例來說,假設 kernel.oom.critical-mb 設為 100 MB,而 kernel.oom.debounce-mb 設為 5 MB。如果系統目前有 90 MB 的可用記憶體,也就是處於「Critical」狀態,則可用記憶體必須增加至至少 105 MB (100 MB + 5 MB),狀態才會從「Critical」變更為「Warning」。

kernel.oom.evict-at-warning=<bool>

預設值: false

如果設為 true,這個選項會在「警告」記憶體壓力狀態下,觸發可回收記憶體的核心淘汰程序。如果設為 false,則會在「Critical」記憶體壓力狀態下觸發淘汰作業。

kernel.oom.evict-continuous=<bool>

預設值: false

這項選項會設定核心淘汰程序,以便持續在背景執行,試圖讓系統避免記憶體壓力,而非只在記憶體壓力狀態轉換時觸發一次性淘汰程序。

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 可用記憶體時發出耗盡記憶體的事件。

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-in-supplypages=<bool>

預設值: false

這項設定可控管 zx_pager_supply_pages 是否可以借用已出借的網頁。如果為 true,zx_pager_supply_pages 會將提供的網頁內容複製到借用網頁中 (如果有可用的借用網頁,且提供的網頁尚未借出),否則 zx_pager_supply_pages 會將提供的網頁安裝到 VMO。如果為 false,zx_pager_supply_pages 會將提供的網頁安裝到 VMO (無論是否已出借)。

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,decommit 會傳回 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>]

預設值: none

這個屬性可控制要使用的序列埠。如果提供此值,系統會覆寫系統的 bootdata 所描述的序列埠。核心偵錯序列埠是保留的資源,可能無法在核心外使用。

如果設為「none」,系統會停用並保留核心偵錯序列埠,讓預設序列埠可在核心外使用。

設定字串格式如下: 針對 MMIO UART: "kernel.serial=UART_MODEL,MMIO_ADDR,IRQ,FLAGS" 針對 PIO UART: "kernel.serial=UART_MODEL,IOPORT,IRQ"

kernel.vdso.always_use_next=<bool>

預設值: false

如果設定這個選項,核心會將「下一個」vDSO 提供給使用者空間,而非將「穩定」vDSO 設為預設 vDSO。

vdso.ticks_get_force_syscall=<bool>

預設值: false

如果設定這個選項,即使可從使用者模式存取硬體週期計數器登錄,系統仍會強制將 zx_ticks_get vDSO 呼叫設為真正的系統呼叫。

vdso.clock_get_force_syscall=<bool>

預設值: false

如果設定這個選項,系統會強制將 zx_clock_get_monotoniczx_clock_get_boot vDSO 呼叫設為真正的系統呼叫,而非在使用者模式中執行 tick 計數器的轉換作業。

kernel.userpager.overtime_wait_seconds=<uint64_t>

預設值: 0x14

這項選項會設定使用者尋呼服務錯誤可能阻斷多久,然後才會視為超時,並將資訊訊息列印到偵錯記錄檔,並繼續等待。如果值為 0,表示系統不會將等待時間視為超時。

kernel.userpager.overtime_timeout_seconds=<uint64_t>

預設值: 0x12c

這個選項會設定使用者尋呼服務錯誤在遭到中斷前,可以阻斷多久。如果是硬體頁面錯誤,發生錯誤的執行緒會終止,並產生致命的頁面錯誤例外狀況。如果是系統呼叫觸發的軟體頁面錯誤,系統呼叫會失敗,並顯示 ZX_ERR_TIMED_OUT。如果值為 0,表示頁面錯誤不會因逾時而中止。

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 參數 (如果兩者同時存在的話)。請注意,編譯切換鈕和 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_ktrace_write()
  • zx_mtrace_control()
  • 附有 ZX_PROP_PROCESS_HW_TRACE_CONTEXT_IDzx_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_INVALIDATEzx_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

如果設定此選項,系統會在發生核心異常時停止,而不是重新啟動。如要啟用停止時發生恐慌的情況,請傳遞核心指令列引數 kernel.halt-on-panic=true

由於核心在啟用 GPU 時無法可靠地繪製至 framebuffer,因此如果核心發生當機或異常終止的情形,系統會預設重新啟動。

如果核心發生當機,且系統重新啟動,核心錯誤記錄會顯示在 /boot/log/last-panic.txt 中,方便您查看、下載等。

請將 last-panic.txtzircon.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

設定後,核心就能透過移除檔案頁面和解鎖可捨棄的 VMOs,或執行頁面壓縮,釋出可回收的記憶體。回收功能可減少記憶體用量並避免記憶體用盡的情況,但會移除系統行為的部分時間可預測性。

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-mskernel.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,則 kernel.compression.storage-strategy 也必須為 none。選取 none 即可有效停用壓縮功能。

kernel.compression.storage-strategy=[none | tri_page]

預設值: none

支援的壓縮儲存空間策略如下: - none - tri_page

這個選項會選取所需的儲存策略,用於儲存已壓縮的資料。如果設定 none,則 kernel.compression.strategy 也必須為 none

kernel.compression.threshold=<uint32_t>

預設值: 0x46

這個選項會控制必須達到的壓縮門檻,才能儲存壓縮過的網頁。未達此門檻的網頁則會繼續以未壓縮的方式儲存。

這個選項是百分比,值為 100 表示網頁只需壓縮至至少原始大小,值為 0 則表示網頁需要壓縮至零大小。

有效值介於 1 到 100 之間 (含 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 - 偵測到損毀時,系統會發出非致命的核心 OOPS。* 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 的 use-after-free 檢查器時,每個空白頁會填入或檢查多少位元組。有效值為 8 的倍數,介於 8 和 PAGE_SIZE 之間 (含兩者)。

kernel.pmm.alloc-random-should-wait=<bool>

預設值: false

啟用測試選項,讓 PMM 無論目前記憶體層級為何,都會隨機使用 ZX_ERR_SHOULD_WAIT 失敗等待頁面配置。這項功能可讓您測試等待路徑,而無須將系統置於低記憶體狀態。如果未啟用偵錯斷言,則啟用此選項會發生錯誤。

kernel.portobserver.reserve-pages=<uint64_t>

預設值: 0x8

指定每個 CPU 要為 port observer (非同步等待) 配置保留的頁面數量。值越高,系統負載時 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.scheduler.prefer-little-cpus=<bool>

預設值: false

搜尋要將工作指派給哪個 CPU 時,請優先選擇小核心,而非大核心。啟用這個選項可提升效能,但會導致耗電量增加。

已淘汰 - 這個選項已排定在即將發布的版本中移除。請勿對其建立任何重要依附元件。

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,則預設為「是」。

kernel.arm64.alternate-vbar=[none | auto | arch3 | arch1 | psci | smccc10]

預設值: auto

這會選取替代例外狀況向量實作項目,用於解決從 EL0 進入 EL1 時的 CPU 專屬問題。值可以是: * none - 在早期 EL0 例外路徑中未執行任何緩解措施。* auto (預設) - 根據韌體透過 SMCCC / PSCI 介面回報的可用性,選取 SMCCC 功能 ID。接著,每個個別 CPU 都會查詢韌體,看看是否需要採用替代做法。如果韌體不是 SMCCC 1.1 以上版本,且未回報支援 SMCCC_ARCH_WORKAROUND_3 和/或 SMCCC_ARCH_WORKAROUND_1 函式 ID,則此方法的效果與 none 相同。如果韌體支援,則每個 CPU 會根據韌體所述的 CPU 需求,決定是否使用韌體解決方法。無論如何,如果韌體解決方法不必使用,或韌體解決方法不必使用,則會停用其他 Spectre 緩解措施,因為這些措施與韌體解決方法重複,或在不需要韌體解決方法時不必使用。* arch3 - 請一律在每個 CPU 上使用 SMCCC_ARCH_WORKAROUND_3。如果韌體不支援 SMCCC 1.1 或 SMCCC_ARCH_WORKAROUND_3,可能會產生無法預測的影響。這樣一來,當韌體支援該功能時,每個 CPU 都會執行 auto 為每個韌體指定的 CPU 所選的功能。這也會停用與 SMCCC_ARCH_WORKAROUND_3 重複的替代 Spectre 緩解措施。* arch1 - 請務必在每個 CPU 上使用 SMCCC_ARCH_WORKAROUND_1。如果韌體不支援 SMCCC 1.1 或 SMCCC_ARCH_WORKAROUND_1,可能會產生無法預測的影響。當韌體支援「1」函式但不支援「3」函式時,這會讓每個 CPU 執行 auto 為韌體所述應使用該 CPU 的個別 CPU 所選取的動作。這麼做也會停用與 SMCCC_ARCH_WORKAROUND_1 重複的替代 Spectre 緩解措施。* psci - 在每個 CPU 上,一律使用 PSCI_VERSION 搭配 SMCCC 1.1 呼叫慣例。如果韌體不支援 SMCCC 1.1,可能會產生無法預測的影響。目前 auto 從未為任何 CPU 選取這項行為。* smccc10 - 在每個 CPU 上,一律使用 PSCI_VERSION 搭配 SMCCC 1.0 呼叫慣例。這在所有系統上都安全,但比 SMCCC 1.1 選項的額外負擔更大,且可能並非所有 CPU 都需要。目前 auto 不會為任何 CPU 選取這項行為。在具有異質核心的 SoC 上,應為每個個別 CPU 選取不同的值,auto 以外的值應僅用於測試。

kernel.arm64.force-pct=<bool>

預設值: false

根據預設,核心會選取 ARM 虛擬計數器 (VCT),做為系統的時間參照。只有在為實體計時器硬體提供 IRQ,但未為虛擬計時器硬體提供 IRQ 時,才會選擇實體計數器 (PCT)。設定強制 PCT 選項後,即使 ZBI 提供 VCT IRQ,核心仍會一律選擇使用 PCT 做為時間參照。請注意,如果在未定義 PCT IRQ 的目標上設定 force-pct,會導致在早期啟動期間發生恐慌。

僅適用於 riscv64 機器的選項

kernel.smp.maxcpus=<uint32_t>

預設值: 0x10

這個選項會限制要初始化的 CPU 數量。對於特定架構,這個值不得大於 SMP_MAX_CPUS

kernel.riscv64.enable-asid=<bool>

預設值: true

這樣就能使用 ASID。如果基礎硬體支援 16 位元 ASID,則預設為「是」。

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

這個選項可控管是否要使用 PCID (如果有足夠的 CPU 支援)。如果啟用這個選項,但 CPU 支援不足,這個選項就不會生效。

kernel.smp.maxcpus=<uint32_t>

預設值: 0x20

這個選項會限制要初始化的 CPU 數量。對於特定架構,這個值不得大於 SMP_MAX_CPUS

kernel.wallclock=[auto | tsc | pit | hpet]

預設值: auto

這個選項可用於在 PC 版本上強制選取特定的掛鐘。