5.2. 외부 커널 매개변수로 중요한 변경
이 장에서는 시스템 관리자에게 Red Hat Enterprise Linux 8.2와 함께 배포된 커널의 중요한 변경 사항을 요약합니다. 이러한 변경 사항에는 proc
항목, sysctl
및 sysfs
기본값, 부팅 매개 변수, 커널 구성 옵션 또는 눈에 보이는 동작 변경이 포함됩니다.
5.2.1. 새 커널 매개변수
- CPUidle.governor = [CPU_IDLE]
-
사용할
cpuidle
governor의 이름입니다. - deferred_probe_timeout = [KNL]
지연된 프로브가 프로브에 대한 종속성 대기를 중지할 때까지 시간 초과(초)를 설정하는 디버깅 매개 변수입니다.
옵트된 특정 종속성(하위 시스템 또는 드라이버)만 무시됩니다. 시간 제한 0은
initcall 끝에 시간 초과됩니다.
이 매개변수는 재시도 후에도 지연된 프로브 목록에 장치를 덤프합니다.- kvm.nx_huge_pages = [KVM]
이 매개 변수는
X86_BUG_ITLB_MULTIHIT
버그에 대한 소프트웨어 해결 방법을 제어합니다.옵션은 다음과 같습니다.
-
force
- 항상 해결방법을 배포합니다. -
off
- 해결방법을 배치하지 마십시오. -
auto
(기본값) -X86_BUG_ITLB_MULTIHIT
를 기반으로 해결방법을 배포합니다.
-
호스트에 소프트웨어 해결방법이 활성화된 경우 중첩 게스트에 대해 게스트를 활성화할 필요가 없습니다.
- kvm.nx_huge_pages_recovery_ratio = [KVM]
- 이 매개변수는 주기적으로 대규모 페이지로 다시 설정되는 4KiB 페이지 수를 제어합니다. 0은 복구를 비활성화합니다. 값이 N인 경우 KVM(커널 기반 가상 시스템)은 1분마다 4KiB 페이지의 1/N을 정지합니다. 기본값은 60입니다.
- page_alloc.shuffle = [KNL]
페이지 할당자가 사용 가능한 목록을 임의로 조정해야 하는지 여부를 제어하는 부울 플래그입니다.
커널이 직접 매핑 메모리 측 캐시가 있는 플랫폼에서 실행되고 있음을 감지하면 임의화를 자동으로 활성화할 수 있습니다. 이 매개 변수는 해당 동작을 재정의/비활성화하는 데 사용할 수 있습니다.
플래그 상태는
/sys/module/page_alloc/parameters/shuffle
파일에서sysfs
의사 파일 시스템에서 읽을 수 있습니다.- panic_print =
패닉이 발생할 때 시스템 정보를 인쇄하기 위한 비트마스크.
사용자는 다음 비트의 조합을 선택할 수 있습니다.
- 비트 0: 모든 작업 정보 출력
- 비트 1: 인쇄 시스템 메모리 정보
- 비트 2: 타이머 정보 인쇄
-
비트 3:
CONFIG_LOCKDEP
커널 구성이 있는 경우 정보 잠금 -
비트 4:
ftrace
버퍼 인쇄 -
비트 5: 버퍼에서 모든
printk
메시지 인쇄
- rcutree.sysrq_rcu = [KNL]
-
sysrq
키를 명령을 실행하여 새 유예 기간이 아직 시작되지 않은 이유를 확인하기 위해 주의해서 Tree RCU의rcu_node
트리를 덤프합니다. - rcutorture.fwd_progress = [KNL]
- 이 개념을 지원하는 RCU 유형에 대해 RCU(Read-copy update) grace-period forward-progress 테스팅을 활성화합니다.
- rcutorture.fwd_progress_div = [KNL]
- CPU-stall-warning 기간의 일부를 지정하여 엄격한 전방향 진행 테스트를 수행합니다.
- rcutorture.fwd_progress_holdoff = [KNL]
- 연속적인 전방향 진행 테스트 사이에 대기하는 시간(초)입니다.
- rcutorture.fwd_progress_need_resched = [KNL]
-
Close-loop forward-progress 테스팅 중에
need_resched()
를 검사 내에서cond_resched() 호출
을 포함합니다. - tsx = [X86]
이 매개변수는 TSX 제어를 지원하는 Intel 프로세서의 TSX(Transactional Synchronization Extensions) 기능을 제어합니다.
옵션은 다음과 같습니다.
-
의
- 시스템에서 TSX를 활성화합니다. 알려진 모든 보안 취약점에 대한 완화 조치가 있지만 TSX는 이전의 몇 가지 추측 관련 CVE를 가속화했습니다. 따라서 활성화된 상태로 두는 것과 관련된 알 수 없는 보안 위험이 있을 수 있습니다. -
off
- 시스템에서 TSX를 비활성화합니다. 이 옵션은 MDS(Microarchitectural Data Sampling)에 취약하지 않은 최신 CPU에만 적용됩니다. 즉,MSR_IA32_ARCH_CAPABILITIES.MDS_NO=1
이 있고 마이크로 코드 업데이트를 통해 새IA32_TSX_CTRL
모델별 레지스터(MSR)를 가져옵니다. 이 새로운 MSR을 사용하면 TSX 기능을 안정적으로 비활성화할 수 있습니다. -
auto
-X86_BUG_TAA
가 있는 경우 TSX를 비활성화합니다. 그렇지 않으면 시스템에서 TSX를 활성화합니다.
-
이 매개변수를 지정하지 않는 것은 tsx=off
와 동일합니다.
자세한 내용은 업스트림 커널 설명서를 참조하십시오.
- tsx_async_abort = [X86,INTEL]
이 매개변수는 TSX Async Abort (TAA) 취약점에 대한 완화 기능을 제어합니다.
MDS(Micro-architectural Data Sampling)와 유사하게 TSX(Transactional Synchronization Extensions)를 지원하는 특정 CPU는 CPU 내부 버퍼에 대한 공격에 취약합니다. 이 취약점은 특정 조건에서 공개된 가젯에 정보를 전달할 수 있습니다.
취약한 프로세서에서 예측 가능한 전달된 데이터를 캐시 사이드 채널 공격에 사용하여 공격자가 직접 액세스할 수 없는 데이터에 액세스할 수 있습니다.
옵션은 다음과 같습니다.
-
full
- TSX가 활성화된 경우 취약한 CPU에서 TAA 완화를 활성화합니다. -
full,nosmt
- TAA 완화를 활성화하고 취약한 CPU에서 SMT(Simultaneous Multi Threading)를 비활성화합니다. TSX가 비활성화되면 CPU가 크로스 스레드 TAA 공격에 취약하지 않기 때문에 SMT가 비활성화되지 않습니다. off
- TAA 완화를 무조건 비활성화합니다.MDS 영향을 받는 시스템에서 두 취약점이 동일한 메커니즘으로 완화되므로 활성 MDS 완화를 통해
tsx_async_abort=off
매개 변수를 방지할 수 있습니다. 따라서 이 완화를 비활성화하려면mds=off
매개 변수도 지정해야 합니다.이 옵션을 지정하지 않으면
tsx_async_abort=full
과 동일합니다. 영향을 받는 MDS 완화 및 MDS 완화를 배포하는 CPU에서는 TAA 완화가 필요하지 않으며 추가 완화 기능을 제공하지 않습니다.
-
자세한 내용은 업스트림 커널 설명서를 참조하십시오.
5.2.2. 업데이트된 커널 매개변수
- intel_iommu = [DMAR]
Intel IOMMU 드라이버 DMAR(Direct Memory Access Remapping).
옵션은 다음과 같습니다.
-
sm_on
[Default Off] - 하드웨어에서 확장 가능한 모드 변환을 지원한다고 알려도 기본적으로 확장 가능한 모드 모드가 비활성화됩니다. 이 옵션을 설정하면 지원하려는 하드웨어에서 확장 가능 모드가 사용됩니다.
-
- isolcpus = [KNL,SMP,ISOL]
이 매개변수는 지정된 CPU 세트를 방해하지 않도록 격리합니다.
managed_irq
- 분리된 CPU를 포함하는 인터럽트 마스크가 있는 관리 인터럽트에서 격리된 CPU를 대상으로 하지 못하게 하는 하위 매개 변수입니다. 관리되는 인터럽트의 선호도는 커널에서 처리하며/proc/irq/*
인터페이스를 통해 변경할 수 없습니다.이러한 격리는 최상의 노력이며, 장치 큐의 자동으로 할당된 인터럽트 마스크에 분리 및 하우스키핑 CPU가 포함된 경우에만 효과적입니다. 하우스키핑 CPU가 온라인 상태인 경우 이러한 인터럽트가 하우스키핑 CPU로 전달되어 하우스키핑 CPU에 제출된 I/O가 분리된 CPU를 방해할 수 없습니다.
큐의 선호도 마스크에 격리된 CPU만 포함된 경우 이 매개변수는 인터럽트 라우팅 결정에 영향을 미치지 않습니다. 그러나 인터럽트는 격리된 CPU에서 실행되는 작업이 I/O를 제출할 때만 전달됩니다. 하우스키핑 CPU에서 제출된 I/O는 해당 큐에 영향을 미치지 않습니다.
- mds = [X86,INTEL]
옵션 변경 사항:
-
꺼짐
- TSX Async Abort (TAA) 영향을 받는 시스템에서mds=off
는 두 취약점이 동일한 메커니즘으로 완화되므로 활성 TAA 완화로 방지할 수 있습니다. 따라서 이 완화 기능을 비활성화하려면tsx_async_abort=off
커널 매개변수도 지정해야 합니다.
-
이 매개 변수를 지정하지 않는 것은 mds=full
과 동일합니다.
자세한 내용은 업스트림 커널 설명서를 참조하십시오.
- mem_encrypt = [X86-64]
AMD SME(Secure Memory Encryption) 제어
…
메모리 암호화를 활성화할 수 있는 시기에 대한 자세한 내용은 업스트림 커널 설명서 를 참조하십시오.
- 완화 방법 =
옵션 변경 사항:
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]
예외:
kvm.nx_huge_pages=force인 경우
kvm.nx_huge_pages
=force
-
auto,nosmt
- 모든 CPU 취약점을 완화하여 필요한 경우 SMT(동시 멀티 스레드)를 비활성화합니다. 이 옵션은 SMT를 손실하는 것을 의미하더라도 항상 완전히 완화하려는 사용자를 위한 것입니다.다음과 같습니다.
-
l1tf=flush,nosmt [X86]
-
mds=full,nosmt [X86]
-
tsx_async_abort=full,nosmt [X86]
-
- rcutree.jiffies_till_sched_qs = [KNL]
이 매개 변수는 RCU(읽기 복사 업데이트)가
rcu_note_context_switch() 및
함수에서 quigrad-state 도움말을 요청하기 전에 지정된 유예 기간에 필요한 기간을 설정합니다. 지정되지 않은 경우 커널은 rcutree.jiffies_current_cond_resched()
first_fqs 및
커널 매개 변수의 최신 설정을 기반으로 값을 계산합니다.rcutree.jiffies_ still_next_fqs
계산된 이 값은
rcutree.jiffies_to_sched_qs
커널 매개 변수에서 볼 수 있습니다.rcutree.jiffies_to_sched_qs를
설정하려는 모든 시도가 덮어쓰기됩니다.- tsc =
이 매개 변수는 TSC(Time Stamp Counter)에 대한 클록 소스 안정성 검사를 비활성화합니다.
형식: <string>
옵션은 다음과 같습니다.
-
reliable
[x86] - TSC 클록소스를 신뢰할 수 있는 것으로 표시합니다. 이 옵션은 런타임 시 클록 소스 확인 및 부팅 시 수행되는 안정성 검사를 비활성화합니다. 또한 이 옵션을 사용하면 이전 하드웨어와 가상화 환경에서 고해상도 타이머 모드를 사용할 수 있습니다. -
noirqtime
[x86] - TSC를 사용하여IRQ(Interrupt Request) 회계를 수행하지 마십시오. RDTSC (Read Time-Stamp Counter)가 느리고 이 회계는 오버헤드를 추가할 수 있는 모든 플랫폼에서IRQ_TIME_ACCOUNTING
을 비활성화하는 데 사용됩니다. -
unstable
[x86] - TSC 클럭소스를 불안정한 것으로 표시합니다. 이 옵션은 부팅 시 무조건 불안정한 TSC를 표시하며, TSC 감시 알림이 있으면 추가 차단을 방지합니다. -
nowatchdog
[x86] - clocksource watchdog를 비활성화합니다. 옵션은 클럭소스 워치독에서 중단이 허용되지 않는 엄격한 대기 시간 요구 사항이 있는 경우에 사용됩니다.
-
5.2.3. 새로운 /proc/sys/kernel 매개변수
- panic_print
패닉이 발생할 때 시스템 정보를 인쇄하기 위한 비트마스크.
사용자는 다음 비트의 조합을 선택할 수 있습니다.
- 비트 0: 모든 작업 정보 출력
- 비트 1: 인쇄 시스템 메모리 정보
- 비트 2: 타이머 정보 인쇄
-
비트 3:
CONFIG_LOCKDEP
커널 구성 항목이 있는 경우 정보 잠금 비트 4:
ftrace
버퍼 인쇄예를 들어 패닉에서 작업 및 메모리 정보를 인쇄하려면 다음을 실행합니다.
# echo 3 > /proc/sys/kernel/panic_print
5.2.4. 업데이트된 /proc/sys/kernel 매개변수
- threads-max
이 매개변수는
fork()
함수에서 생성할 수 있는 최대 스레드 수를 제어합니다.초기화 중에 커널은 최대 스레드 수를 생성하는 경우에도 이 값을 사용 가능한 RAM 페이지의 일부(1/8번째)만 차지합니다.
thread
-max
에 쓸 수 있는 최소 값은 1입니다. 최대 값은 상수FUTEX_TID_MASK (0x3fffff)
에서 제공합니다.이 범위를 벗어난 값이thread
-max에
작성되면EINVAL
오류가 발생합니다.
5.2.5. 업데이트된 /proc/sys/net 매개변수
- bpf_jit_enable
이 매개 변수는 BPF JIT(Berkeley Packet Filter Just-in-Time) 컴파일러를 활성화합니다.
BPF 는 다양한 후크 지점에서 바이트코드를 실행할 수 있는 유연하고 효율적인 인프라입니다. 네트워킹(예:
XDP
,tc
), 추적(예:kprobes,
,uprobes
tracepoints
) 및 보안(예:seccomp
)과 같은 여러 Linux 커널 하위 시스템에서 사용됩니다.LLVM 에는 제한된 C를 BPF 명령 시퀀스로 컴파일할 수 있는 BPF 백엔드가 있습니다. 프로그램 로드를
bpf()
시스템 호출을 통해 커널의 검증기를 전달한 후 JIT 는 이러한 BPF 프로파일을 기본 CPU 지침으로 변환합니다.JIT 에는 두 가지 플레이버가 있으며 최신 eBPF JIT 는 현재 다음 CPU 아키텍처에서 지원됩니다.
-
x86_64
-
arm64
-
ppc64
(작은 큰 endian 모두) -
s390x
-