Skip to main content
Kernel parameters (also called boot parameters or kernel command-line arguments) let you control kernel behavior before any userspace process runs. They are passed to the kernel by the bootloader—GRUB, systemd-boot, or similar—and parsed during early kernel initialization.

How kernel parameters work

The kernel reads its command line from the bootloader and processes parameters from left to right, stopping at --. Anything after -- is passed as arguments to init.
# View the active kernel command line
cat /proc/cmdline
Example output:
BOOT_IMAGE=/vmlinuz-6.8.0 root=/dev/sda1 ro quiet splash loglevel=3
All kernel parameters are case-sensitive. The total command line length is architecture-dependent: between 256 and 4096 characters, defined in include/uapi/asm-generic/setup.h as COMMAND_LINE_SIZE.

Hyphens and underscores

Hyphens and underscores are interchangeable in parameter names:
# These are equivalent
log_buf_len=1M
log-buf-len=1M

Metric suffixes

Many size parameters accept the suffixes K, M, G, T, P, and E, representing binary multipliers (2^10 through 2^60).
log_buf_len=16M   # 16 mebibytes
mem=4G            # 4 gibibytes

CPU lists

Some parameters accept a list of CPU numbers:
isolcpus=1,2,10-20          # isolate CPUs 1, 2, and 10 through 20
nohz_full=all               # apply to all CPUs
isolcpus=100-2000:2/25      # CPUs 100,101,125,126,150,151,...
The special value N refers to the highest-numbered CPU on the system.

Module parameters

Loadable module parameters can be set on the kernel command line using the module.param=value syntax, or passed to modprobe directly:
# On the kernel command line
usbcore.blinkenlights=1

# Via modprobe
modprobe usbcore blinkenlights=1
After a module is loaded, its parameters are visible and sometimes writable under /sys/module/<name>/parameters/:
cat /sys/module/usbcore/parameters/blinkenlights
echo -n 0 > /sys/module/usbcore/parameters/blinkenlights

Key parameter categories

Console & logging

console=, loglevel=, quiet, debug, printk.devkmsg=

Memory

mem=, hugepages=, transparent_hugepage=, movablecore=

CPU & scheduling

maxcpus=, nr_cpus=, isolcpus=, nohz_full=, nosmp

Security

selinux=, apparmor=, security=, module.sig_enforce=

Debugging

panic=, oops=, kgdboc=, initcall_debug, ftrace=

IOMMU

intel_iommu=, amd_iommu=, iommu=

Common parameters reference

console= [KNL]Sets the console device and options. Multiple console= arguments can be used to direct output to several devices simultaneously. The last console= entry becomes the /dev/console device.
console=tty0                   # first virtual terminal
console=ttyS0,115200n8         # first serial port at 115200 baud
console=ttyS0,115200 console=tty0  # both serial and VT
quietSuppresses most kernel log messages during boot. Equivalent to loglevel=4.loglevel= [KNL]Sets the console log level (0–7). Messages with priority higher than this value are not printed to the console. Default is 7 (all messages).
LevelMeaning
0EMERG
1ALERT
2CRIT
3ERR
4WARNING
5NOTICE
6INFO
7DEBUG
debugSets the kernel log level to the maximum (8). Equivalent to loglevel=8.initcall_debugTraces all initcall functions during boot. Useful for diagnosing slow or failing boot sequences.
init= [KNL]Overrides the path to the init process. The kernel tries this path before the default /sbin/init and /init.
init=/bin/bash          # drop directly into a root shell
init=/sbin/runit        # use an alternative init system
ro / rwMounts the root filesystem read-only (ro) or read-write (rw) at boot. Most distributions boot ro and remount rw after filesystem checks.root= [KNL]Specifies the root filesystem device.
root=/dev/sda1
root=UUID=a1b2c3d4-...
root=LABEL=rootfs
rootdelay=Waits the specified number of seconds before attempting to mount the root filesystem. Useful when storage controllers initialize slowly.nomodesetPrevents the kernel from switching video modes. Disables kernel mode-setting (KMS), which forces the system to use the VESA/BIOS framebuffer. Commonly used to work around GPU driver issues.
mem= [KNL,BOOT]Limits the amount of memory the kernel uses. Memory above the specified limit is ignored.
mem=2G    # use only 2 GiB of RAM
Specifying mem= smaller than the actual RAM does not reserve the excess memory safely—it simply makes the kernel ignore it. This is mainly useful for testing low-memory scenarios.
hugepages= [HW]Allocates a fixed number of huge pages at boot time. Huge pages are 2 MiB on x86-64 by default.
hugepages=512    # pre-allocate 512 huge pages (1 GiB total)
transparent_hugepage= [KNL]Controls Transparent Huge Pages (THP).
transparent_hugepage=always    # always use THP (default)
transparent_hugepage=madvise   # only for madvise(MADV_HUGEPAGE)
transparent_hugepage=never     # disable THP
movablecore= [KNL,X86,IA-64,PPC]Specifies the amount of memory reserved for hotpluggable (movable) pages.
maxcpus= [SMP]Limits the number of CPUs that will be brought online at boot. Additional CPUs can be onlined later via /sys/devices/system/cpu/cpuN/online.
maxcpus=4    # boot with at most 4 CPUs
nr_cpus= [SMP]Sets the maximum number of CPUs the kernel will support. Unlike maxcpus=, this is a hard limit that cannot be increased without rebooting.nosmp [SMP]Disables SMP support completely. Equivalent to maxcpus=0.isolcpus= [KNL,SMP]Isolates specified CPUs from the general kernel scheduler. Isolated CPUs will not run tasks from the scheduler’s global runqueue; processes must be explicitly pinned to them with taskset or cgroup cpuset.
isolcpus=2-5    # isolate CPUs 2, 3, 4, 5
nohz_full= [KNL,SMP]Extends dynticks (tickless) operation to the specified CPUs. Reduces timer interrupts on isolated CPUs to minimize latency jitter for real-time workloads.
nohz_full=1-7
panic= [KNL]Sets the timeout in seconds before automatic reboot after a kernel panic. Zero means do not reboot. A negative value means reboot immediately.
panic=10    # reboot 10 seconds after panic
panic=0     # hang on panic (useful for crash dump collection)
panic=-1    # reboot immediately
oops= [KNL]Controls behavior when a non-fatal kernel oops occurs.
oops=panic    # treat oops as panic (reboot based on panic= setting)
nmi_watchdog= [KNL,BUGS=X86]Configures the NMI watchdog, which detects hard lockups.
nmi_watchdog=0    # disable NMI watchdog
nmi_watchdog=1    # enable NMI watchdog
intel_iommu= [DMAR]Controls Intel VT-d IOMMU behavior.
intel_iommu=on        # enable Intel IOMMU
intel_iommu=off       # disable Intel IOMMU
intel_iommu=igfx_off  # disable IOMMU for integrated graphics
intel_iommu=strict    # strict translation, no sharing
amd_iommu= [HW,X86-64]Controls AMD-Vi IOMMU behavior.
amd_iommu=on
amd_iommu=off
amd_iommu=fullflush   # flush IOMMU TLB on every page mapping change
iommu= [X86]General IOMMU option.
iommu=pt       # passthrough mode (no translation)
iommu=off      # disable IOMMU
iommu=strict   # strict DMA translation
selinux= [SELINUX]Enable or disable SELinux at boot.
selinux=0    # disable SELinux
selinux=1    # enable SELinux (default when compiled in)
apparmor= [APPARMOR]Enable or disable AppArmor at boot.
apparmor=0    # disable AppArmor
apparmor=1    # enable AppArmor
security= [SECURITY]Chooses the primary Linux Security Module when multiple are compiled in.
security=selinux
security=apparmor
security=tomoyo
module.sig_enforce=When set to 1, the kernel refuses to load any module that is not validly signed. This overrides CONFIG_MODULE_SIG_FORCE.
module.sig_enforce=1
lockdown= [SECURITY]Enables kernel lockdown mode, restricting root’s ability to modify the running kernel.
lockdown=integrity     # prevent modifications that would affect integrity
lockdown=confidentiality  # stricter: also protect kernel data
netdev_max_backlog=Sets the maximum number of packets queued on the input side when the interface receives packets faster than the kernel can process them.lpj= [KNL]Manually sets loops-per-jiffy, skipping the calibration delay during boot. Speeds up boot time at the cost of potentially inaccurate delay loops.
acpi= [HW,ACPI]Controls ACPI (Advanced Configuration and Power Interface) behavior.
acpi=off       # disable ACPI entirely
acpi=force     # enable ACPI even if disabled by default
acpi=noirq     # do not use ACPI for IRQ routing
acpi=strict    # be strict about ACPI specification compliance
pci= [PCI]Controls PCI bus behavior.
pci=noacpi       # do not use ACPI for PCI
pci=nomsi        # disable MSI (Message Signaled Interrupts)
pci=noaer        # disable PCIe Advanced Error Reporting

Making parameters permanent

Edit /etc/default/grub and add parameters to GRUB_CMDLINE_LINUX:
GRUB_CMDLINE_LINUX="quiet splash loglevel=3 intel_iommu=on"
Then regenerate the GRUB configuration:
# Debian/Ubuntu
update-grub

# RHEL/Fedora/CentOS
grub2-mkconfig -o /boot/grub2/grub.cfg

# EFI systems
grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

Verifying active parameters

# Show the full command line used to boot the running kernel
cat /proc/cmdline

# Show all parameters recognized by the running kernel (built-in modules)
modinfo -p <modulename>

# Show runtime module parameters
ls /sys/module/<modulename>/parameters/
cat /sys/module/usbcore/parameters/autosuspend
Use grep on /proc/cmdline to quickly check whether a specific parameter is active:
grep -o 'intel_iommu=[^ ]*' /proc/cmdline

Build docs developers (and LLMs) love