4장. 외부 커널 매개변수에 대한 중요한 변경 사항
이 장에서는 시스템 관리자에게 Red Hat Enterprise Linux 9.6에서 배포된 커널의 중요한 변경 사항에 대한 요약을 제공합니다. 이러한 변경으로는 proc
항목, sysctl
및 sysfs
기본값, 부팅 매개 변수, 커널 구성 옵션 또는 눈에 띄는 동작 변경과 같은 추가 또는 업데이트된 동작 변경이 포함될 수 있습니다.
새 커널 매개변수
arm64.no32bit_el0=
[ARM64]
무조건 32비트 애플리케이션의 실행을 비활성화합니다.
con3215_drop=
[S390]
형식: y|n|Y|N|1|0
true로 설정하면 콘솔 버퍼가 가득 차면 3215 콘솔에서 데이터를 삭제합니다. 이 경우 3270 터미널 에뮬레이터(예: x3270)를 사용하는 Operator는 콘솔 출력을 위해 명확한 키를 입력할 필요가 없으며 계속하려면 커널을 입력할 필요가 없습니다. 이로 인해 3270 터미널 에뮬레이터가 활성화되면 부팅 시간이 훨씬 빨라집니다. 3270 터미널 에뮬레이터를 사용하지 않으면 이 매개변수는 적용되지 않습니다.
stress_hpt=
[PPC]
해시 페이지 테이블의 커널 HPT 항목 수를 제한하여 커널 주소의 해시 페이지 테이블 폴트 속도를 늘립니다.
kvm.enable_virt_at_load=
[KVM,ARM64,LOONGARCH,MIPS,RISCV,X86]
활성화하면 KVM은 KVM이 로드될 때 하드웨어에서 가상화를 활성화하고 KVM이 언로드될 때 가상화를 비활성화합니다(KVM이 모듈로 구축된 경우).
비활성화된 경우 KVM은 VM을 생성하고 삭제할 때 필요에 따라 가상화를 동적으로 활성화하고 비활성화합니다. 즉, VM 수의 0 Cryostat1 및 1 Cryostat0이 전환됩니다.
모듈 lode에서 가상화를 활성화하면 KVM이 모든 온라인 CPU에서 가상화를 직렬화할 때 0 Cryostat1 VM 생성 시 발생할 수 있는 대기 시간을 방지할 수 있습니다. KVM이 로드될 때 가상화를 활성화하는 "비용"은 이렇게 하면 "소유" 가상화 하드웨어를 사용하려는 트리 외 하이퍼바이저를 사용할 수 있다는 점입니다.
kvm-arm.wfe_trap_policy=
[KVM,ARM]
KVM VM에 대해 WFE 명령 트랩을 설정할 시기를 제어합니다. CPU 아키텍처에서는 트랩이 허용되지만 CPU 아키텍처에서는 보장되지 않습니다.
트랩: WFE 명령 트랩 설정
notrap: 명확한 WFE 명령 트랩
kvm-arm.wfi_trap_policy=
[KVM,ARM]
KVM VM에 대해 WFI 명령 트랩을 설정할 시기를 제어합니다. CPU 아키텍처에서는 트랩이 허용되지만 CPU 아키텍처에서는 보장되지 않습니다.
트랩: WFI 명령 트랩 설정
notrap: 명확한 WFI 명령 트랩
config_acs=
Format: <ACS flags>@<pci_dev>[; …]
(위에 지정된 형식으로 하나 이상의 PCI 장치)를 선택적으로 지정(선택 사항)에 추가하여 flags로 구분됩니다. 플래그에 지정된 사항에 따라 특정 기능이 활성화, 비활성화 또는 변경되지 않습니다.
ACS 플래그는 다음과 같이 정의됩니다.
bit-0
- ACS 소스 검증
bit-1
- ACS Translation Blocking
bit-2
- ACS P2P 요청 리디렉션
bit-3
- ACS P2P 완료 리디렉션
bit-4
- ACS Upstream Forwarding
bit-5
- ACS P2P Egress Control
bit-6
- ACS 직접 번역 P2P
각 비트는 다음과 같이 표시할 수 있습니다.
0
- 강제 비활성화
1
- 강제 활성화
X - 변경되지 않음
예를 들어, pci=config_acs=10x는 P2P 요청 리디렉션을 활성화하고, Translation Block을 비활성화하고, 소스 유효성 검사를 변경하지 않고, 전원 또는 펌웨어가 설정한 상태에서 변경되지 않도록 ACS를 지원하는 모든 장치를 구성합니다.
이렇게 하면 장치 간 격리가 제거될 수 있으며 IOMMU 그룹에 더 많은 장치를 배치할 수 있습니다.
rcutree.nocb_nobypass_lim_per_jiffy=
[KNL]
콜백 오프로드(rcu_nocbs) CPU에서 RCU는 →nocb_bypass 목록을 사용하여 콜백 플러드로 인해 발생하는 잠금 경합을 줄입니다. 그러나 영향을 받지 않는 일반적인 경우 →nocb_bypass 목록 및 해당 잠금의 추가 오버헤드를 방지하기 위해 RCU 큐가 기본 →cblist로 직접 큐입니다. 그러나 단일 jiffy 동안 대기열에 너무 많은 콜백이 있는 경우 RCU는 콜백을 →nocb_bypass 큐로 사전 큐에 추가합니다. "too many"의 정의는 이 커널 부팅 매개 변수에 의해 제공됩니다.
rcutree.nohz_full_patience_delay=
[KNL]
callback-offloaded (rcu_nocbs) CPU에서 유예 기간이 지정된 기간(밀리초)에 도달하지 않는 한 RCU를 방해하지 않도록 합니다. 기본값은 0입니다. 큰 값은 5초 후에 제한됩니다. 모든 값은 jiffies로 표시 가능한 가장 가까운 값으로 반올림됩니다.
rcutree.rcu_divisor=
[KNL]
이 CPU에서 대기열에 있는 콜백 수에서 callback-invocation batch limit bl을 계산하는 데 사용할 shift-right count를 설정합니다. 결과는 rcutree.blimit 커널 매개변수 값으로 아래에 바인딩됩니다. 모든 bl 콜백은 CPU가 다른 작업을 수행할 수 있도록 softirq 핸들러를 종료합니다.
이 콜백 주입 배치 제한은 오프로드되지 않은 콜백 호출에만 적용됩니다. 오프로드된 콜백은 대신 rcuoc kthread의 컨텍스트에서 호출되며 스케줄러는 다른 작업을 수행하는 것처럼 선점합니다.
rcutree.enable_rcu_lazy=
[KNL]
전원을 절약하기 위해 지연 후 배치 RCU 콜백 및 플러시, 메모리 부족 또는 콜백 목록이 너무 커집니다.
rcutree.rcu_normal_wake_from_gp=
[KNL]
synchronize_rcu() 호출의 대기 시간을 줄입니다. 이 방법은 synchronize_rcu() 호출자의 자체 추적을 유지하므로 call_rcu[_hurry]() 경로를 사용하지 않기 때문에 일반 콜백과 상호 작용하지 않습니다. 이는 정상적인 유예 기간 동안의 것입니다.
이를 활성화하는 방법:
echo 1 > /sys/module/rcutree/parameters/rcu_normal_wake_from_gpp 또는 boot 매개변수 "rcutree.rcu_normal_wake_from_gp=1"
기본값은 0입니다.
제거된 커널 매개변수
clocksource.max_cswd_read_retries=
[KNL]
클럭이 불안정하게 표시되기 전에 외부 지연으로 인한 clocksource_watchdog() 재시도 횟수입니다. 기본값은 두 번의 재시도(즉, 테스트 중인 시계를 세 번 읽으려고 함)입니다.
disable_cpu_apicid=
[X86,APIC,SMP]
형식: <int>
부팅 시 비활성화될 해당 CPU의 초기 APIC ID 수입니다. 주로 kdump 2nd 커널이 BSP를 비활성화하여 AP에서 BSP로 INIT를 BSP로 전송하여 시스템을 재설정하거나 중단하지 않고 여러 CPU를 해제하는 데 사용됩니다.
변경된 커널 매개변수
amd_iommu=
[HW,X86_64]
시스템의 AMD IOMMU 드라이버에 매개변수를 전달합니다.
가능한 값은 다음과 같습니다.
fullflush
- 더 이상 사용되지 않는 iommu.strict=1
off
- 시스템에 있는 AMD IOMMU를 초기화하지 마십시오.
force_isolation
- 모든 장치에 대해 장치 격리를 강제 적용합니다. IOMMU 드라이버는 더 이상 필요에 따라 격리 요구 사항을 대체할 수 없습니다. 이 옵션은 iommu=pt를 덮어쓰지 않습니다.
force_enable
- IOMMU가 활성화된 버그로 알려진 플랫폼에서 IOMMU를 강제로 활성화합니다. 이 옵션을 주의해서 사용하십시오.
pgtbl_v1
- Cryostat-API(기본값)에 v1 페이지 테이블을 사용합니다.
pgtbl_v2
- Cryostat-API에 v2 페이지 테이블을 사용합니다.
irtcachedis
- IRT(Interrupt Remapping Table) 캐싱을 비활성화합니다.
nohugepages
- v1 페이지 테이블에 사용되는 페이지 크기를 4KiB로 제한합니다.
v2_pgsizes_only
- v1 페이지 테이블에 사용되는 페이지 크기를 4KiB 또는 2Mib 또는 1GiB로 제한합니다.
debug_guardpage_minorder=
[KNL]
CONFIG_DEBUG_PAGEALLOC가 설정된 경우 이 매개변수는 의도적으로 보관되는 페이지 순서를 제어할 수 있으므로 buddy al Cryostat에 의해 무료로 보호됩니다. 값이 클수록 임의 메모리 손상을 추적할 가능성이 높지만 일반 시스템 사용을 위한 메모리 양을 줄입니다. 가능한 최대 값은 MAX_PAGE_ORDER/2입니다. 이 매개변수를 1 또는 2로 설정하면 CPU가 임의의 메모리 위치에 쓰일 때 커널 또는 드라이버 코드의 버그로 인해 발생하는 대부분의 임의 메모리 손상 문제를 식별하기에 충분합니다. CONFIG_DEBUG_PAGEALLOC에서 감지할 수 없는 CPU MMU를 우회할 수 없는 버그 하드웨어 또는 펌웨어로 인한 메모리 손상의 클래스가 있거나 드라이버 잘못 프로그래밍(버스 수준에서 메모리가 기록되고 CPU MMU는 무시됨)이 있으므로 이 옵션은 이러한 문제를 추적하는 데 도움이 되지 않습니다.
page_reporting.page_reporting_order=
[KNL]
최소 페이지 보고 순서.
형식: <integer>
최소 페이지 보고 순서를 조정합니다. Max_PAGE_ORDER를 초과하면 페이지 보고가 비활성화됩니다.
preempt=
[KNL]
CONFIG_PREEMPT_DYNAMIC none - cond_resched() 호출을 개인 정보- cond_resched() 호출에 한정하고 might_sleep() 호출을 full-sleep() 호출 전체 - 명시적으로 선점할 수 없는 모든 섹션을 선점할 수 있는 경우 선점 모드를 선택합니다. 또한 작업은 누적 스핀 잠금을 생성합니다(중요 섹션이 잠금 자체 이상으로 명시적으로 비활성화되지 않은 경우).
sched_thermal_decay_shift=
[Deprecated] [KNL, SMP]
스케줄러 온도 부족 신호에 대한 교대 전환을 설정합니다. 열압 신호는 다른 스케줄러 페트의 기본 decay 기간을 따릅니다.
usb-storage.delay_use=
[UMS]
논리 단위(기본값 1)에 대해 새 장치를 스캔하기 전의 지연 시간(초)입니다. 값이 "ms" 접미사가 있는 경우 선택적으로 지연 시간(밀리초)입니다. 예: delay_use=2567ms.
새로운 sysctl 매개변수
skb_defer_max
할당된 CPU에 의해 해제되는 skbs의 per-cpu 목록의 최대 크기(skbs)입니다. 지금까지 TCP 스택에서 사용합니다.
기본값: 64
sysctl 매개변수 변경
overcommit_memory
이 값에는 메모리 과다 할당을 활성화하는 플래그가 포함되어 있습니다.
이 플래그가 0이면 커널은 사용자 공간 메모리 요청 크기를 총 메모리와 스왑과 비교하고 명확한 오버 커밋을 거부합니다.
이 플래그가 1이면 커널은 실제로 실행될 때까지 충분한 메모리가 있는 것으로 간주합니다.
이 플래그가 2인 경우 커널은 메모리 과다 할당을 방지하는 "없음 오버 커밋" 정책을 사용합니다. user_reserve_kbytes는 이 정책에 영향을 미칩니다.
이 기능은 많은 양의 메모리 "단일 인 케이스"가 있고 많이 사용하지 않는 프로그램이 많이 있기 때문에 매우 유용할 수 있습니다.
기본값은 0입니다.
자세한 내용은 Documentation/mm/overcommit-accounting.rst 및 mm/util.c::__vm_enough_memory()를 참조하십시오.