| # Copyright 2020 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//build/zbi/kernel_cmdline.gni") |
| |
| # This serves as an anchor point. By expressing a dependency on |
| # //boards/kernel_cmdline, build arguments declared in this file |
| # (e.g. pmm_checker_from_board) are brought into scope. |
| group("kernel_cmdline") { |
| } |
| |
| kernel_cmdline("serial-legacy") { |
| args = [ "kernel.serial=legacy" ] |
| deps = [ "//build/validate:non_production_tag" ] |
| } |
| |
| kernel_cmdline("disable-blobfs-compression") { |
| args = [ "blobfs.write-compression-algorithm=UNCOMPRESSED" ] |
| deps = [ "//build/validate:non_production_tag" ] |
| } |
| |
| kernel_cmdline("pmm-checker") { |
| args = [ |
| # Enable PMM checker to detect certain kinds of buffer overrun and |
| # use-after-free bugs. |
| "kernel.pmm-checker.enable=true", |
| |
| # Use a small fill size to minimize performance impact. In practice, |
| # corruption tends to happen at the start of a page so filling/checking only |
| # the first 16 bytes provides decent coverage without sacrificing |
| # performance. |
| "kernel.pmm-checker.fill-size=16", |
| ] |
| } |
| |
| declare_args() { |
| # Used to control whether board definitions include PMM checker options. |
| pmm_checker_from_board = true |
| } |
| |
| group("pmm-checker-from-board") { |
| if (pmm_checker_from_board) { |
| deps = [ ":pmm-checker" ] |
| } |
| } |
| |
| kernel_cmdline("toulouse") { |
| args = [ |
| # Fuchsia does not have a deterministic ordering for bringing up PCI devices, so the |
| # /dev/class/ethernet/xxx paths have no well-defined mapping to the ports on the front of the |
| # device. |
| # In order for netbooting and loglistener to work, we need to let netsvc know which path corresponds |
| # to the left-most ethernet port. |
| "kernel.serial=legacy", |
| "netsvc.interface=/dev/sys/platform/pci/00:1f.6/e1000/ethernet", |
| ] |
| } |
| |
| # This collects settings not specific to any particular machine that are |
| # recommended to minimize unintended effects on timing data. Note that this |
| # does not (as yet) include settings that may reduce overall performance, which |
| # x64-reduced-perf-variation (below) does (see x64-reduced-perf-variation.gni). |
| group("reduced-perf-variation") { |
| deps = [ |
| ":disable-page-scanner", |
| ":quiet-early-boot", |
| ] |
| } |
| |
| # This collects settings not specific to any particular machine that are |
| # recommended to make the system's performance highly representative of a |
| # production setup. |
| group("perf-realistic") { |
| deps = [ ":quiet-early-boot" ] |
| } |
| |
| kernel_cmdline("quiet-early-boot") { |
| args = [ |
| # Disable serial console printing during early boot, a phase during which |
| # UART communication is single-threaded and synchronous. In production, |
| # the serial console will be disabled, and so early boot benchmarks that |
| # include this work is sensibly avoided. |
| "kernel.phys.verbose=false", |
| ] |
| } |
| |
| kernel_cmdline("disable-page-scanner") { |
| args = [ |
| # Disable page scanning in all its forms. Page scanning is intended to |
| # provide a memory benefit to final systems, but the operation of the |
| # scanner and its unpredictable de-duplication or eviction of memory in use |
| # by benchmarks could cause noticeable variation. |
| "kernel.page-scanner.start-at-boot=false", |
| "kernel.page-scanner.zero-page-scans-per-second=0", |
| "kernel.page-scanner.enable-eviction=false", |
| ] |
| } |
| |
| kernel_cmdline("x64-reduced-perf-variation") { |
| deps = [ ":reduced-perf-variation" ] |
| args = [ |
| # Disable Intel Turbo Boost. Turbo Boost provides a significant speed-up to |
| # many workloads, but — because CPU frequencies vary based on previous work, |
| # work in other cores, system temperature, etc — makes performance of systems |
| # less predictable. We prefer stability in our performance comparison |
| # benchmarks. |
| "kernel.x86.turbo=false", |
| |
| # Set the Intel HWP performance profile to be "stable", trying to keep the |
| # CPU clock rate stable. With turbo boost disabled, this has only a small |
| # effect, but helps ensure that wake ups from idle are fixed. |
| "kernel.x86.hwp_policy=stable-performance", |
| |
| # Disable hyper-threading. Hyper-threading reduces predictability of |
| # benchmarks, because the performance of a thread is significantly affected |
| # by other threads on the core. |
| "kernel.smp.ht=false", |
| |
| # Disable spectre mitigations. Spectre mitigations have significant |
| # performance impact, but are currently only carried out on a subset of the |
| # NUC fleet. This means that different devices have significantly different |
| # performance characteristics, meaning that benchmark results vary |
| # significantly based on the device running it. |
| # |
| # TODO(fxbug.dev/33161): Ideally, we should load microcode during Zircon boot, |
| # which should bring all devices to the same patch level, removing the |
| # performance differences when spectre mitigations are in place. |
| "kernel.x86.disable_spec_mitigations=true", |
| ] |
| } |
| |
| kernel_cmdline("gce") { |
| args = [ "kernel.serial=legacy" ] |
| } |
| |
| kernel_cmdline("as370") { |
| args = [ "kernel.bypass-debuglog=true" ] |
| } |
| |
| kernel_cmdline("vim3") { |
| deps = [ ":pmm-checker-from-board" ] |
| args = [ |
| # Prefer using the built-in NIC to the CDC-ether interface. |
| "netsvc.interface=/dev/dwmac/dwmac/Designware-MAC/ethernet", |
| ] |
| } |
| |
| kernel_cmdline("chromebook-x64") { |
| deps = [ ":pmm-checker-from-board" ] |
| args = [ |
| # Depthcharge will fill this in. |
| "zvb.boot-partition-uuid=%U", |
| ] |
| } |
| |
| # Copy from vim3 |
| kernel_cmdline("av400") { |
| deps = [ ":pmm-checker-from-board" ] |
| args = [ |
| # Prefer using the built-in NIC to the CDC-ether interface. |
| "netsvc.interface=/dev/dwmac/dwmac/Designware-MAC/ethernet", |
| ] |
| } |