5.2. 외부 커널 매개변수로 중요한 변경

이 장에서는 시스템 관리자에게 Red Hat Enterprise Linux 8.2와 함께 배포된 커널의 중요한 변경 사항을 요약합니다. 이러한 변경 사항에는 proc 항목, sysctlsysfs 기본값, 부팅 매개 변수, 커널 구성 옵션 또는 눈에 보이는 동작 변경이 포함됩니다.

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() 및 cond_resched() 함수에서 quigrad-state 도움말을 요청하기 전에 지정된 유예 기간에 필요한 기간을 설정합니다. 지정되지 않은 경우 커널은 rcutree.jiffies_current_ 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