5장. 외부 커널 매개변수에 대한 중요한 변경 사항
이 장에서는 시스템 관리자에게 Red Hat Enterprise Linux 9.1와 함께 배포된 커널의 중요한 변경 사항에 대한 요약을 제공합니다. 이러한 변경에는 예를 들어 추가 또는 업데이트된 proc
항목, sysctl
, sysfs
기본값, 부팅 매개변수, 커널 구성 옵션 또는 눈에 띄는 동작 변경 사항이 포함될 수 있습니다.
새 커널 매개변수
- allow_mismatched_32bit_el0 = [ARM64]
이 매개변수를 사용하면 EL0 수준에서 일치하지 않는 32비트 지원이 있는 시스템을 32비트 애플리케이션을 실행할 수 있습니다. 32비트 EL0을 지원하는 CPU 세트는
/sys/devices/system/cpu/aarch32_el0
파일로 표시됩니다. 또한 핫 플러그 해제 작업을 제한할 수 있습니다.자세한 내용은
Documentation/arm64/asymmetric-32bit.rst
를 참조하십시오.- arm64.nomte = [ARM64]
- 이 매개변수를 사용하면 MTE(메모리 태그 확장) 지원을 무조건 비활성화할 수 있습니다.
- i8042.probe_defer = [HW]
-
이 매개변수를 사용하면
i8042
프로브 오류에서 지연된 프로브를 허용할 수 있습니다. - idxd.tc_override = [HW]
<
bool>
; 형식에서 이 매개변수를 사용하면 장치에 대한 기본 트래픽 클래스 구성을 덮어쓸 수 있습니다.기본값은
false
(0
)로 설정됩니다.- kvm.eager_page_split = [KVM,X86]
이 매개변수를 사용하면 KVM에서 모든 대규모 페이지를 로깅하는 동안 사전에 분할할지 여부를 제어할 수 있습니다. 페이지 분할은 대규모 페이지를 지연시키는 데 필요한 쓰기 보호 오류 및 MMU(Memory Management Unit) 잠금 경합을 제거하여 vCPU 실행에 대한 중단을 줄입니다.
쓰기를 거의 수행하지 않거나 작은 VM 메모리 영역에만 쓰는 VM 워크로드는 페이지 분할을 비활성화하여 대규모 페이지를 계속 읽기에 사용할 수 있도록 하는 이점을 누릴 수 있습니다.
페이지 분할의 동작은
KVM_DIRTY_LOG_INITIALLY_SET
옵션이 활성화되었는지 여부에 따라 달라집니다.-
비활성화된 경우 memslot의 모든 대규모 페이지는 해당
memslot
활성화된 경우
KVM_CLEAR_DIRTY
ioctl()
시스템 호출 중에만 페이지 분할이 수행되고 페이지 정리가 제거됩니다.현재 페이지 분할은 2차원 페이징(TDP) MMU에 매핑된 대규모 페이지 분할만 지원합니다.
기본값은
Y
(에서
)로 설정됩니다.
-
비활성화된 경우 memslot의 모든 대규모 페이지는 해당
- kvm.nx_huge_pages_recovery_period_ms = [KVM]
이 매개변수를 사용하면 KVM zaps 4 KiB 페이지를 Huge Page로 돌아가는 기간을 제어할 수 있습니다.
-
값이 0이 아닌
N
이면 KVM은N
밀리초마다 페이지의 일부를 조정합니다. 값이
0
인 경우 KVM은 비율을 기준으로 기간을 선택하므로 페이지가 평균 1시간 후에 zapped됩니다.기본값은
0
으로 설정됩니다.
-
값이 0이 아닌
- l1d_flush = [X86,INTEL]
이 매개변수를 사용하면 L1D 기반 스누핑 취약점의 완화 조치를 제어할 수 있습니다.
특정 CPU는 CPU 내부 버퍼에 대한 악용에 취약하며 특정 조건에서 공개 가젯으로 정보를 전달할 수 있습니다. 취약한 프로세서에서 사양으로 전달된 데이터는 캐시 측 채널 공격에서 사용하여 공격자가 직접 액세스할 수 없는 데이터에 액세스할 수 있습니다.
사용 가능한 옵션은
on
이므로완화를 위한 인터페이스를 활성화합니다
.- mmio_stale_data = [X86,INTEL]
이 매개변수를 사용하여 Processor Memory-mapped I/O (MMIO)usrle Data 취약점의 완화 조치를 제어할 수 있습니다.
프로세서 MMIOusrle Data는 MMIO 작업 후에 데이터를 노출할 수 있는 취약점의 클래스입니다. 노출된 데이터는 메타데이터 서버(MDS) 및 TAM(Transactional Asynchronous Abort)의 영향을 받는 것과 동일한 CPU 버퍼에서 시작되거나 종료될 수 있습니다. 따라서 MDS 및 TAA와 유사하게 완화 조치는 영향을 받는 CPU 버퍼를 지우는 것입니다.
사용 가능한 옵션은 다음과 같습니다.
-
full
: 취약한 CPU에서 완화 기능을 활성화 -
full,nosmt
: 완화 기능을 활성화하고 취약한 CPU에서 SMT를 비활성화합니다. off
: 무조건 완화를 비활성화합니다.MDS 또는 TAA 영향을 받는 시스템에서
mmio_stale_data=off
는 동일한 메커니즘으로 이러한 취약점이 완화되므로 활성 MDS 또는 TAA 완화 방법으로 방지할 수 있습니다. 따라서 이 완화 기능을 비활성화하려면mds=off
및tsx_async_abort=off
를 지정해야 합니다.이 옵션을 지정하지 않으면
mmio_stale_data=full
과 동일합니다.자세한 내용은
Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst
를 참조하십시오.
-
- random.trust_bootloader={on,off} = [KNL]
-
이 매개변수를 사용하면 부트 로더가 전달하는 줄기 사용을 활성화하거나 비활성화하여 커널의 CRNG를 완전히 강화할 수 있습니다. 기본 동작은
CONFIG_RANDOM_TRUST_BOOTLOADER
옵션에 의해 제어됩니다. - rcupdate.rcu_task_collapse_lim = [KNL]
-
이 매개변수를 사용하면 RECDHE Tasks 플레이버가 단일 콜백 큐를 사용하여 축소할 수 있는 유예 기간에 존재하는 최대 콜백 수를 설정할 수 있습니다. 이 전환은
rcupdate.rcu_task_enqueue_lim
옵션이 기본값인-1
값으로 설정된 경우에만 발생합니다. - rcupdate.rcu_task_contend_lim = [KNL]
-
이 매개변수를 사용하면 RECDHE Tasks 플레이버가 CPU당 per-CPU 콜백 대기열로 전환되는 데 필요한 jiffy당 callback-queuing-time lock-contention 이벤트의 최소 수를 설정할 수 있습니다. 이 전환은
rcupdate.rcu_task_enqueue_lim
옵션이 기본값인-1
값으로 설정된 경우에만 발생합니다. - rcupdate.rcu_task_enqueue_lim = [KNL]
이 매개변수를 사용하면 RECDHE 플레이버의 RECDHE Tasks 제품군에 사용할 콜백 대기열 수를 설정할 수 있습니다. 콜백 대기열의 수를 자동으로 조정하고 기본값
-1
을 사용하여 동적으로 조정할 수 있습니다.이 매개변수는 테스트에 사용하기 위한 것입니다.
- retbleed = [X86]
이 매개변수를 사용하면 반환 지침(RETBleed) 취약점을 사용하여 Arbitrary Speculative Code Execution의 완화 기능을 제어할 수 있습니다. 사용 가능한 옵션은 다음과 같습니다.
-
Off
: no mitigation -
auto
: 완화 기능을 자동으로 선택합니다. -
auto,nosmt
: 전체 완화 (STIBP없이 1 이상 만)에 필요한 경우 완화 기능을 자동으로 선택합니다. -
ibpb
: 기본 블록 경계에 대한 짧은 추측 창도 완화합니다. 안전성, 가장 높은 성능 영향 -
unret
: 강제로 교육되지 않은 반환 thunks를 활성화하며 AMD f15h-f17h 기반 시스템에서만 유효합니다. unret
,nosmtauto
옵션을 선택하면 런타임에 CPU에 따라 완화 방법이 선택됩니다.이 옵션을 지정하지 않으면
retbleed=auto
와 동일합니다.
-
- sev=option[,option…] = [X86-64]
-
자세한 내용은
Documentation/x86/x86_64/boot-options.rst
를 참조하십시오.
업데이트된 커널 매개변수
- acpi_sleep = [HW,ACPI]
형식: { s3_bios, s3_mode, s3_beep, s4_hwsig, s4_nohwsig, old_ordering, nonvs, sci_force_enable, nobl }
-
s3_bios
및s3_mode
에 대한 자세한 내용은Documentation/power/video.rst
를 참조하십시오. -
s3_beep
은 디버깅을 위한 것입니다. 커널의 실제 모드 진입점이 호출되는 즉시 PC의 발표자입니다. -
s4_hwsig
를 사용하면 커널이 하이버네이션에서 재개하는 동안 ACPI 하드웨어 서명을 확인하고 변경된 경우 정상적으로 재시작을 거부합니다. 기본 동작은s4_hwsig
옵션을 사용하지 않는 한 재개를 허용하고 서명이 변경될 때 경고하는 것입니다. -
s4_nohwsig
는 ACPI 하드웨어 서명을 사용하거나 재개하는 동안 경고하지 않습니다.old_ordering
은 장치를 저전력 상태로 두는 것과 관련하여_PTS
제어 방법의 ACPI 1.0 순서가 적용됩니다._PTS
의 ACPI 2.0 순서는 기본적으로 사용됩니다. -
비v
는 일시 중단, 하이버링 및 재개 중에 커널이 ACPI NVS 메모리를 저장 및 복원하는 것을 방지합니다. -
sci_force_enable
을 사용하면 커널이 S1/S3에서 resume로SCI_EN
을 직접 설정합니다. 이러한 동작은 ACPI 사양에 적합하지만 일부 손상된 시스템은 이 사양 없이 작동하지 않습니다. nobl
는 시스템 일시 중단 및 재개와 관련하여 일부 방식에서 잘못 작동하는 것으로 알려진 시스템의 내부 거부 목록이 무시됩니다. 이 옵션을 사용하는 것이 좋습니다.자세한 내용은
문서/전원/비디오.rst
를 참조하십시오.
-
- crashkernel=size[KMG],high = [KNL, X86-64, ARM64]
이 매개변수를 사용하면 다음과 같이 top에서 물리적 메모리 리전을 할당할 수 있습니다.
- 시스템에 4GB 이상의 RAM이 설치되어 있으면 물리적 메모리 영역이 4GB를 초과할 수 있습니다.
시스템에 4GB 미만의 RAM이 설치되어 있으면 사용 가능한 경우 물리적 메모리 영역이 4GB 미만으로 할당됩니다.
crashkernel=X
매개변수가 지정된 경우 이 매개변수는 무시됩니다.
- crashkernel=size[KMG],low = [KNL, X86-64]
crashkernel=X
를 전달하면 커널이 4GB 이상의 물리적 메모리 영역을 할당할 수 있습니다. 이로 인해 약간의 낮은 메모리가 필요한 시스템에서 두 번째 커널이 충돌합니다(예:swiotlb
에는 최소 64M+32K 낮은 메모리 필요) 및 32비트 장치의ECDHE 버퍼가 소진되지 않도록 하는 추가 메모리가 필요합니다. 커널은 최소 256M을 4GB 미만으로 자동으로 할당하려고 합니다. 이 매개변수를 사용하면 두 번째 커널에 대해 Low range를 4GB 미만으로 지정할 수 있습니다.-
0:
낮은 할당을 비활성화합니다.crashkernel=X,high
가 사용되지 않거나 예약된 메모리가 4GB 미만인 경우 무시됩니다.
-
- crashkernel=size[KMG],low = [KNL, ARM64]
-
이 매개변수를 사용하면 크래시 덤프 커널의ECDHE 영역에 낮은 범위를 지정할 수 있습니다.
crashkernel=X,high
가 사용되지 않거나 예약된 메모리가ECDHE 영역에 있는 경우 무시됩니다. - kvm.nx_huge_pages_recovery_ratio = [KVM]
이 매개변수를 사용하면 주기적으로 대규모 페이지로 다시 zapped 4 KiB 페이지 수를 제어할 수 있습니다.
-
0
복구 비활성화 N
KVM은 기간마다 4KiB 페이지의1/N
입니다.기본값은
60
입니다.
-
- kvm-arm.mode = [KVM,ARM]
이 매개변수를 사용하여 작업 KVM 모드 중 하나를 선택할 수 있습니다.
-
없음
: KVM을 강제로 비활성화합니다. -
nvhe
: 보호된 게스트를 지원하지 않는 표준 nVHE 기반 모드 protected
:NVHE
- 상태가 호스트에서 비공개로 유지되는 게스트를 지원하는 기반 모드입니다. EL2 수준에서 커널이 실행 중인 경우에는 유효하지 않습니다.기본값은 하드웨어 지원을 기반으로
VHE/nVHE
로 설정됩니다.
-
- mitigations = [X86,PPC,S390,ARM64]
이 매개변수를 사용하면 CPU 취약점에 대한 선택적 완화 기능을 제어할 수 있습니다. 이는 각각 기존 아키텍처별 옵션 집계입니다.
off
: 모든 선택적 CPU 완화를 비활성화합니다. 이로 인해 시스템 성능이 향상되지만 사용자를 여러 CPU 취약점에 노출할 수도 있습니다.-
다음과 같습니다.
nopti [X86,PPC]
,kpti=0 [ARM64]
,nospectre_v1 [X86,PPC]
,nobp=0 [S390]
,nospectre_v2 [X86,PPC,S390,ARM64]
,,spectre_v2_user=off [X86]
,spec_store_bypass_disable=off [X86,PPC]
,ssbd=force-off [ARM64]
,l1tf=off [X86]
,mds=off [X86]
,tsx_async_abort=off [X86]
,kvm.nx_huge_pages=off [X86]
,no_entry_flush [PPC]
,no_uaccess_flush [PPC]
,mmio_stale_data=off [X86]
. -
예외:
kvm.nx_huge_pages
=force
-
다음과 같습니다.
auto
(기본값): 모든 CPU 취약점을 완화하지만 보안 취약점이 있는 경우에도 SMT를 활성화합니다.- 같음: (기본 동작)
Auto,nosmt
: 모든 CPU 취약점을 완화하여 필요한 경우 SMT를 비활성화합니다.-
l1tf=flush,nosmt [X86]
,mds=full,nosmt [X86]
,tsx_async_abort=full,nosmt [X86]
,mmio_stale_data=full,nosmt [X86]
-
- rcu_nocbs[=cpu-list] = [KNL]
선택적 인수는 CPU 목록입니다.
CONFIG_RCU_NOCB_CPU=y
로 빌드된 커널에서 no-callback CPU 모드를 활성화할 수 있으므로 이러한 CPU 콜백이 softirq 컨텍스트에서 호출되지 않습니다. 이러한 CPU의 RECDHE 콜백 호출은 대신 해당 목적으로 생성된rcuo
x
/N
kthreads
s
이고, RECDHE-sched인 kthread의 경우g
는 CPU 번호입니다. n은 CPU 번호입니다.이를 통해 오프로드된 CPU의 OS 지터가 줄어들어 HPC 및 실시간 워크로드에 유용할 수 있습니다. 또한 DestinationRule 다중 프로세서의 에너지 효율성을 개선할 수 있습니다.
-
cpulist
가 인수로 전달되면 지정된 CPU 목록이 부팅에서 no-callback 모드로 설정됩니다. -
=
기호와cpulist
인수를 생략하면 부팅에서 CPU가 no-callback 모드로 설정되지 않지만cpusets
를 사용하여 런타임 시 모드를 전환할 수 있습니다.
-
- rcutree.kthread_prio = [KNL,BOOT]
이 매개변수를 사용하여 RECDHE per-CPU
kthreads
(rcuc/N
)의ECDHE_FIFO
우선순위를 설정할 수 있습니다. 이 값은 RECDHE boost 스레드 (rcub/N
)의 우선 순위와 RECDHE grace-periodkthreads
(rcu_bh
,rcu_preempt
,rcu_sched
)에도 사용됩니다.-
R
ECDHE_BOOST
가 설정되면 유효한 값은 1-99이며 기본값은1
이며 최소 우선 순위입니다. R
ECDHE_BOOST
가 설정되지 않은 경우 유효한 값은 0-99이고 기본값은0
이고 비실시간 작업입니다.R
ECDHE_NOCB_CPU
가 설정된 경우NOCB
콜백kthreads
의 우선 순위를 조정해야 합니다.
-
R
- rcutorture.fwd_progress = [KNL]
이 매개변수를 사용하면 이 개념을 지원하는 RECDHE 유형에 대한 RECDHE grace-period forward-progress 테스트에 사용할
kthreads
수를 지정할 수 있습니다.기본값은
1
kthread
로 설정됩니다. CPU 수보다 0개 이상 작으면 CPU 수가 사용됩니다.- spectre_v2 = [X86]
이 매개변수를 사용하면 Spectre variant 2 (indirect branch speculation) 취약점의 완화 조치를 제어할 수 있습니다. 기본 작업은 사용자 공간 공격으로부터 커널을 보호합니다.
-
On
: 무조건적으로 활성화되어 있으며,spectre_v2_user=on
을 의미합니다. -
off
: 무조건 비활성화,spectre_v2_user=off
를 의미합니다. -
auto
: kernel은 CPU 모델의 보안 취약점을 탐지합니다. -
그리고
auto
를
선택하면 CPU, 사용 가능한 마이크로 코드,CONFIG_RETPOLINE
설정 옵션, 커널이 빌드된 컴파일러에 따라 런타임 시 완화 방법을 선택할 수 있습니다. -
또한 사용자 공간을 선택하여 사용자 공간 작업 공격을 완화할 수 있습니다.
-
해제
를 선택하면 커널 및 사용자 공간 보호가 모두 비활성화됩니다. 특정 완화 조치를 수동으로 선택할 수도 있습니다.
-
Retpoline
: 간접 브랜치 교체 -
Ret
poline,generic
: Retpolines -
Retpoline,l timing
: LFENCE; 간접 브랜치 -
retpoline,amd
: retpoline의 별칭,l cri -
eibrs
: 향상된 IBRS -
eibrs,retpoline
: 향상된 IBRS + Retpolines -
IBRS + LFENCE 개선
IBRS
: IBRS를 사용하여 커널을 보호이 옵션을 지정하지 않으면
spectre_v2=auto
와 동일합니다.
-
-
새로운 sysctl 매개변수
- max_rcu_stall_to_panic
-
panic_on_rcu_stall
을1
로 설정하면panic()
이 호출되기 전에 RECDHE가 중단될 수 있는 횟수를 확인할 수 있습니다.panic_on_rcu_stall
을0
으로 설정하면 이 값이 적용되지 않습니다. - perf_user_access = [ARM64]
이 매개 변수를 사용하면 이벤트 카운터를 읽기 위해 사용자 공간 액세스를 제어할 수 있습니다.
-
1
로 설정하면 사용자 공간은 성능 모니터 카운터 레지스터를 직접 읽을 수 있습니다. 기본값은
0
으로 설정되어 있으며 이는액세스를 비활성화했음을
의미합니다.자세한 내용은
Documentation/arm64/perf.rst
를 참조하십시오.
-
- gro_normal_batch
-
이 매개변수를 사용하여 GRO 출력에서 최대 세그먼트 수를 일괄 업로 설정할 수 있습니다. 패킷이 병합된 수퍼 프레임으로 또는 GRO가 병합하지 않기로 결정한 원래 패킷으로 GRO가 GRO가 종료하면NAPI별 목록에 배치됩니다. 그런 다음 세그먼트 수가
gro_normal_ECDHEch 제한에 도달하면 이 목록이 스택으로
전달됩니다. - high_order_alloc_disable
이 매개변수를 사용하여 order-0 할당을 선택할 수 있습니다. 기본적으로 페이지 조각의 할당자는 X86 시스템에서 높은 순서 페이지를 사용하려고 합니다. 기본 동작은 좋은 결과를 반환하지만 특정 상황에서는 페이지 할당 및 해제의 경합이 발생합니다. 이는 상위 페이지가 CPU별 목록에 저장되지 않은 이전 커널(버전 5.14 이상)에서 특히 그러했습니다. 이 매개변수는 이제 대부분 과거의 중요도가 있습니다.
기본값은
0
입니다.- page_lock_unfairness
이 매개변수의 값을 지정하면 대기자 아래에서 페이지 잠금이 차단될 수 있는 횟수를 확인할 수 있습니다. 잠금이 이 파일에 지정된 횟수로 분류된 후 실정
잠금 핸드오프
의미가 적용되며, 잠금을 취할 수 있는 경우에만 대기자가 조정됩니다.기본값은
5
입니다.
sysctl 매개변수 변경
- urandom_min_reseed_secs
-
이 매개변수를 사용하여
urandom
풀 후의 최소 시간(초)을 결정할 수 있습니다. 이 파일은 호환성을 위해 쓸 수 있지만 RNG 동작에는 영향을 미치지 않습니다. - write_wakeup_threshold
-
엔트로피 수가 여러 비트에서 이 임계값 아래로 싱크되면
/dev/random
파일에 쓰기 대기 중인 프로세스를 시작할 수 있습니다. 이 파일은 호환성을 위해 쓸 수 있지만 RNG 동작에는 영향을 미치지 않습니다.