Zircon 核心指令列選項

所有機器都採用的選項

aslr.disable=<bool>

預設: false

如果設定這個選項,系統就不會使用位址空間版面配置隨機載入功能。

aslr.entropy_bits=<uint8_t>

預設: 0x1e

針對使用 ASLR 的位址空間,這項設定可控制隨機化的熵位元數。熵量越高,位址空間越稀疏,頁面資料表會使用更多記憶體。有效值介於 0 到 36 之間。

kernel.cprng-reseed-require.hw-rng=<bool>

預設: false

啟用後,如果 HW RNG 在退場時會失敗,CPRNG 就會恐慌。

kernel.cprng-reseed-require.jitterentropy=<bool>

預設: false

啟用時,以及復育過程中發生抖動性失敗時,CPRNG 恐慌會引起。

kernel.cprng-seed-require.hw-rng=<bool>

預設: false

啟用後,如果 HW RNG 在初始種子階段失敗,CPRNG 就會恐慌。

kernel.cprng-disable.jitterentropy=<bool>

預設: false

決定是否要將基特熵做為熵來源 (用於測試)

kernel.cprng-disable.hw-rng=<bool>

預設: false

決定是否要將 HW RNG 用做資訊熵來源 (用於測試)

kernel.cprng-seed-require.jitterentropy=<bool>

預設: false

啟用時,如果抖動詞失敗了初始種子,CPRNG 恐慌。

kernel.cprng-seed-require.cmdline=<bool>

預設: false

如果啟用這項設定,且您未透過核心指令列提供熵輸入,就會發生 CPRNG 恐慌。

kernel.entropy-mixin=<十六進位>

提供混合到核心的 CPRNG 的熵。這個值必須是小寫十六進位數字的字串。

系統會盡快從記憶體中清除原始值,並遮蓋所有診斷輸出內容。

kernel.jitterentropy.bs=<uint32_t>

預設: 0x40

設定 jitterentropy 的「memory block size」參數。當時基誤差執行記憶體作業 (為了增加 CPU 時間碼變化) 時,系統會以此大小的區塊存取記憶體。

kernel.jitterentropy.bc=<uint32_t>

預設: 0x200

設定 jitterentropy 的「memory block count」參數。當時基誤差在執行記憶體作業 (為了增加 CPU 時間時變化) 時,這項設定可控制存取的區塊數量 (大小為 kernel.jitterentropy.bs)。

kernel.jitterentropy.ml=<uint32_t>

預設: 0x20

設定 jitterentropy 的「memory 迴圈」參數。當時基誤差執行記憶體作業時 (為了增加 CPU 時間的變化),這種方法可控制記憶體存取處理常式的重複次數。只有在 kernel.jitterentropy.raw 為 true 時,才能使用這個參數。如果此參數的值為 0,或 kernel.jitterentropy.rawfalse,則基誤差會隨機選擇迴圈數量。

kernel.jitterentropy.ll=<uint32_t>

預設: 0x1

設定 jitterentropy 的「LFSR 迴圈」參數。當時基誤差在執行大量使用 CPU 的 LFSR 作業 (為了增加 CPU 時間時的變化) 時,這種方法可控制 LFSR 常式的重複次數。只有在 kernel.jitterentropy.raw 為 true 時,才能使用這個參數。如果此參數的值為 0,或 kernel.jitterentropy.rawfalse,則時基誤差會隨機選擇迴圈數量。

kernel.jitterentropy.raw=<bool>

預設: true

設為 true 時,改善熵收集程式會傳回原始、未處理的樣本。設為 false 時,原始樣本將由基特熵處理,產生接近隨機性的輸出資料。請注意,即使將值設為 false,CPRNG 仍會重新處理樣本,因此時基誤差內部的處理其實有些多餘。

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,系統會停用關鍵部分的 Crashlog 產生和重新啟動功能。

當 kernel.lockup-Detector.heartbeat-period-ms 為 0 時,系統會停用關鍵區段鎖定圖文功能。

kernel.lockup-detector.heartbeat-period-ms=<uint64_t>

預設: 0x3e8

次要 CPU 透過核心計時器發出活動訊號的頻率。這個值應夠大,不會影響系統效能,但應小於心跳年齡門檻。1,000 是合理的值。

另請參閱鎖定偵測工具

若為 0,系統會停用心跳偵測。

kernel.lockup-detector.heartbeat-age-threshold-ms=<uint64_t>

預設: 0xbb8

次要 CPU 上次活動訊號的時間上限,之後才會視為鎖定。這個值應大於心跳期間,但範圍較小,以免遺漏短期鎖定圖文標誌事件。3,000 是合理的值。

另請參閱鎖定偵測工具

若為 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

這個選項可用來設定發生記憶體不足 (OOM) 的情況時核心的行為。有效值為 jobkillreboot

如果設為 jobkill,遇到 OOM 時,核心會嘗試終止設為 ZX_PROP_JOB_KILL_ON_OOM 位元的工作以復原記憶體。

如果設為 reboot,遇到 OOM 時,核心會發出記憶體不足事件 (請參閱 zx_system_get_event()),等待一段時間,然後重新啟動系統。等待期長度由 kernel.oom.reboot-timeout-ms 啟動選項設定。

kernel.oom.reboot-timeout-ms=<uint32_t>

預設: 0xc350

這個選項可設定在發生記憶體不足 (OOM) 的情況下,核心會在重新啟動系統前等待的時間長度。只有在 kernel.oom.behavior 設為 reboot 時,才能使用這個選項。

kernel.mexec-force-high-ramdisk=<bool>

預設: false

這個選項僅供測試使用。設為 true 時,系統會強制 mexec syscall 將下列核心的 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)。

OOM 可由 k pmm oom 指令手動觸發,導致可用記憶體低於 kernel.oom.outofmemory-mb 門檻。您可透過 k pmm oom <rate> 提供分配率,其中 <rate> 以 MB 為單位。這將會導致每秒分配到的記憶體容量,這在觀察記憶體壓力狀態轉換時相當實用。

如要進一步瞭解記憶體壓力狀態轉換,請參閱 kernel.oom.outofmemory-mbkernel.oom.critical-mbkernel.oom.warning-mbzx_system_get_event()

您可以使用 k pmm mem_avail_state info 指令,查詢目前的記憶體可用性狀態。

kernel.oom.outofmemory-mb=<uint64_t>

預設: 0x32

這個選項會指定可用記憶體的門檻。如果達到這個門檻,記憶體不足 (OOM) 執行緒就會觸發記憶體不足事件並開始終止程序,或是重新啟動系統。

kernel.oom.Critical-mb=<uint64_t>

預設: 0x96

這個選項會指定可用記憶體的門檻。如果達到這個門檻,記憶體不足 (OOM) 執行緒就會觸發重大的記憶體壓力事件,提示該程序應釋出記憶體。

kernel.oom.warning-mb=<uint64_t>

預設: 0x12c

這個選項會指定可用記憶體的門檻。如果達到這個門檻,記憶體不足 (OOM) 執行緒就會觸發警告記憶體壓力事件,指出程序應減緩記憶體分配速度。

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),狀態才會從「嚴重」變更為「警告」。

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

預設: false

此選項除了預設行為 (即在重大和 OOM 狀態下撤銷) 之外,會觸發處於 Warning 壓力狀態的檔案頁面移除作業。

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

系統載入核心儲存檔案系統中的檔案名稱。

kernel.phys.verbose=<bool>

預設: true

這可控管在核心早期啟動階段中,序列主控台的記錄程度。如果設為 False,系統只會執行與錯誤相關的記錄。

這個選項的其中一個公用程式為基準化:同步、單一執行緒的 UART 寫入可能在物理啟動期間相對成本高 (10 字元/毫秒),因此建議您從整體時間測量中排除這類工作。

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 接近 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>]

預設: none

這項政策可控管使用的序列埠。如有提供,會覆寫系統 bootdata 描述的序列埠。核心偵錯序列埠是保留的資源,可能無法在核心外使用。

如果設為「none」,系統會停用核心偵錯序列埠且不會保留,從而允許在核心外使用預設序列埠。

kernel.vdso.always_use_next=<bool>

預設: false

如果設定了這個選項,核心會為使用者空間提供「next」vDSO,而非「stable」vDSO 做為預設 vDSO。

vdso.ticks_get_force_syscall=<bool>

預設: false

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

vdso.clock_get_monotonic_force_syscall=<bool>

預設: false

如果設定此選項,則 zx_clock_get_monotonic vDSO 呼叫將被強制為真實的系統呼叫,而不只是在使用者模式中執行滴答計數器的轉換。

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 | 僅限輸出]

預設: 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 | 時基誤差]

預設: 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

設定後,頁面掃描器就能剔除使用者呼叫的頁面。剔除可以減少記憶體用量,並避免記憶體不足,但也能避免系統行為有一些時間可預測。

kernel.page-scanner.discardable-evictions-percent=<uint32_t>

預設: 0x14

網頁剔除百分比,應由可捨棄的 VMO 滿足,而非分頁支援的 VMO。舉例來說,如果這個值設為 X,且核心需要收回 N 頁面才能緩解記憶體壓力,那麼系統會從可捨棄的 VMO 中移除 (N * X / 100) 頁面,並從分頁支援的 VMO 中移除其餘 (N * (100 - X) / 100) 頁面。

請注意,核心會設法在已捨棄的可捨棄網頁和分頁支援頁面之間達到這個比率,但實際數字可能並不準確。

kernel.page-scanner.page-table-eviction-policy=[一律 | 永不 | on_request]

預設: always

為未存取的使用者頁面表格設定回收政策。

如果設為 on_request,請只針對要求執行移除作業,例如回應記憶體不足的情況。

如果為 never,系統一律不會移除網頁表格。

設為 always 時,系統會定期移除未使用的網頁表格。您可以由 kernel.page-scanner.page-table-eviction-period 控管這個時間範圍。

kernel.page-scanner.page-table-eviction-period=<uint32_t>

預設: 0xa

設定要掃描網頁表格的速率 (以秒為單位)。如果在成功的掃描之間使用了任何頁面資料表,則有可能將其剔除。

只有在 kernel.page-scanner.page-table-eviction-policy=always 時,這個選項才會生效。

kernel.page-scanner.min-aging-interval=<uint32_t>

預設: 0x2

設定連續事件之間的最短時間 (以秒為單位)。這裡的值越大,就可讓使用中狀態更加穩定,降低發生類似行為的機率,並減少收集頁面存取資訊所花費的時間。值越小,有效的集群越小,越有機會剔除。

這個值應小於或等於 kernel.page-scanner.max-aging-interval

kernel.page-scanner.max-aging-interval=<uint32_t>

預設: 0xf

設定連續事件之間的最長時間 (以秒為單位)。這段時間可能是網頁年齡資訊的粗略性,而值越高,可能就沒有足夠的年齡資訊,無法在系統行為快速變化的情況下執行剔除。如果值越小,網頁就會因為累積在最舊的值區中累積,所以會增加網頁選擇的保真度資訊。

這個值應大於或等於 kernel.page-scanner.min-aging-interval

kernel.page-scanner.accessed-scan-interval=<uint32_t>

預設: 0x3

設定取得網頁存取資訊之間的時間 (以秒為單位)。值越小,年齡擬真度越高,頁面收回選擇的準確度也越高,但收集 CPU 作業時間也會增加。

將這個欄位設為低於 kernel.page-scanner.min-aging-interval 沒有好處。

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-intervalkernel.page-scanner.max-aging-interval 之間的期間觸發計時,因此如果間隔相等,則不會產生任何效果。

kernel.page-scanner.eviction-interval-seconds=<uint32_t>

預設: 0xa

這個選項會指定定期間隔 (以秒為單位),指定會在背景執行核心撤銷作業,藉此嘗試避免系統發生記憶體壓力。只有在透過 kernel.oom.evict-continuous 啟用持續移除功能時,這個項目才會生效。如果這個值低於頁面佇列旋轉 / 間隔間隔 (預設為 10 秒),系統會忽略該值,並將撤銷間隔改為頁面佇列的輪替時間間隔。

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 選項啟用此功能。

此值會選擇要使用的數值,在最糟糕的情況下,也就是在低階揚聲器裝置上 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 (含首尾)。

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=<string>

預設: oops

支援的動作: - oops - panic

這個選項會指定 PMM 檢查工具偵測到毀損時要採取的動作。

如為 oops,則會在偵測到損毀時,發出非嚴重核心 OOPS。

panic 偵測到損毀時,將發生嚴重的核心錯誤。

kernel.pmm-checker.enable=<bool>

預設: false

這可控制 PMM 是否要啟用「釋放後記憶體」檢查工具。 PMM 檢查工具可能會產生費用高昂,適用於偵錯和開發版本。另請參閱「k pmm 檢查工具」。

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.portobserver.reserve-pages=<uint64_t>

預設: 0x8

指定要為通訊埠觀察器 (非同步等待) 分配保留的每個 CPU 頁數。值越高,當系統處於閒置狀態時,如果系統處於閒置狀態,就會耗用較多記憶體,因此 PMM 會減少爭用情況。

kernel.portpacket.reserve-pages=<uint64_t>

預設: 0x1

指定要為通訊埠封包 (port_queue) 分配作業保留的每個 CPU 頁數。值越高,系統處於負載狀態時,如果系統處於閒置狀態,就會耗用更多記憶體,導致 PMM 發生爭用情況。

kernel.root-job.behavior=[halt | 重新啟動 | 系統啟動載入程式 | 復原 | 關閉]

預設: reboot

這個選項會指定在根工作終止或沒有任何工作和程序時,核心應採取的行動。

系統會在 halt 時暫停系統。

設為 reboot 後,系統會重新啟動系統。

如果 bootloader,系統會將系統重新啟動至系統啟動載入程式。

recovery 時,系統在復原分區中會重新啟動系統。

如果 shutdown,系統將關閉系統。

kernel.root-job.notice=<string>

此選項可在根工作終止,或沒有任何工作和沒有任何程序時顯示通知。

kernel.shell=<bool>

預設: false

指示核心在核心主控台上啟動自己的殼層,而非使用者空間 sh。

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.experimental.serial_migration=<bool>

預設: false

TODO(https://fxbug.dev/42170495)

協助將序列驅動程式庫程式從核心實作遷移至 ulib/uart 實作的臨時標記。

kernel.select=<string>

預設: zircon

從 ZBI 中 STORAGE_KERNEL 項目啟動的核心套件名稱。

kernel.scheduler.prefer-little-cpus=<bool>

預設: false

尋找要放置工作的 CPU 時,建議優先使用小核心,而不是大型核心。啟用這個選項會犧牲效能,而改用較低的耗電量。

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

選項僅適用於 arm64 機器

kernel.arm64.disable_spec_緩解 s=<bool>

預設: false

如果有設定,系統會停用所有推測執行資訊外洩的緩解措施。

如未設定,系統會使用每個因應措施的預設值。

kernel.arm64.event-stream.enable=<bool>

預設: true

啟用後,每個 ARM CPU 都會啟用事件串流產生器,每個 CPU 都會以特定速率設定隱藏事件標記。如此一來,使用者可能所在的任何 WFE 狀態中就會退出 cpus。

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 | closure | 重新啟動 | restart-bootloader | restart-recovery]

預設: reboot

這個選項可決定在需要造成恐慌及當機時,提前啟動核心會使用哪種 PSCI 重設作業 (如果有的話)。如果這個項目是「已停用」,機器可能會在恐慌時進入無限迴圈。

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 進入 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 需求,選擇是否使用韌體解決方法。不論是替代哪種規格,都停用了與韌體替代方案的備援機制,或是在不需要韌體替代方案時不需要這麼做。* arch3 - 一律在每個 CPU 上使用 SMCCC_ARCH_WORKAROUND_3。如果韌體不支援 SMCCC 1.1 或不支援 SMCCC_ARCH_WORKAROUND_3,這麼做可能會產生無法預測的影響。如此一來,當韌體要求在韌體支援功能時,每個 CPU 都會執行 auto 所選的每個 CPU 操作。這也會停用與 SMCCC_ARCH_WORKAROUND_3 重複的替代規格緩解措施。* arch1 - 一律在每個 CPU 上使用 SMCCC_ARCH_WORKAROUND_1。如果韌體不支援 SMCCC 1.1 或不支援 SMCCC_ARCH_WORKAROUND_1,可能會產生無法預測的影響。如此一來,當韌體支援「1」函式但不支援「3」函式時,每個 CPU 都會執行 auto 為每個 CPU 選擇要使用該 CPU 的選項。這也會停用與 SMCCC_ARCH_WORKAROUND_1 重複的替代規格緩解措施。* 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 以外的值只能在測試中使用。

選項僅適用於 riscv64 機器

kernel.smp.maxcpus=<uint32_t>

預設: 0x10

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

kernel.riscv64.enable-asid=<bool>

預設: true

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

選項僅適用於 x86 電腦

kernel.x86.disable_spec_緩解 s=<bool>

預設: false

如果有設定,系統會停用所有推測執行資訊外洩的緩解措施。

如未設定,系統會使用每個因應措施的預設值。

kernel.x86.hwp=<bool>

預設: true

這項設定可為支援的晶片啟用 HWP (硬體 P 狀態)。這項功能可讓 Intel CPU 自動依自身時間調整時鐘速度。

kernel.x86.hwp_policy=[bios-specified | 效能 | 平衡 | 省電 | 穩定效能]

預設: bios-specified

設定 CPU 的電源/效能取捨政策。支援 HWP (硬體 P-state) 支援的 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),例如,這可能會讓使用者程式碼讀取最近的核心載入/存放區。

為了避免發生這個錯誤,所有可能在信任層級轉換時資料外洩的微架構結構都必須清除。此外,也請注意,信任層級不會在單一實體處理器核心上同時執行。

這個選項可控制在可能的情況下,是否要將微架構結構從核心清除到使用者離開路徑。否則可能會降低效能。

  • 如果設為 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.enable_suspend=<bool>

預設: false

啟用核心即可前往 S3 (暫停使用 RAM) ACPI 電源狀態。

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

預設: auto

這個選項可用於強制選取特定電腦版本的特定牆面時間。