5장. 외부 커널 매개변수에 대한 중요한 변경 사항

이 장에서는 시스템 관리자에게 Red Hat Enterprise Linux 8.7과 함께 제공되는 커널의 중요한 변경 사항에 대한 요약을 제공합니다. 이러한 변경에는 예를 들어 추가 또는 업데이트된 proc 항목, sysctl, sysfs 기본값, 부팅 매개변수, 커널 구성 옵션 또는 눈에 띄는 동작 변경 사항이 포함될 수 있습니다.

새 커널 매개변수

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 (에서)로 설정됩니다.

kvm.nx_huge_pages_recovery_period_ms = [KVM]

이 매개변수를 사용하면 KVM zaps 4 KiB 페이지를 Huge Page로 돌아가는 기간을 제어할 수 있습니다.

  • 값이 0이 아닌 N 이면 KVM은 N 밀리초마다 페이지의 일부를 조정합니다.
  • 값이 0 인 경우 KVM은 비율을 기준으로 기간을 선택하므로 페이지가 평균 1시간 후에 zapped됩니다.

    기본값은 0 으로 설정됩니다.

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=offtsx_async_abort=off 를 지정해야 합니다.

    이 옵션을 지정하지 않으면 mmio_stale_data=full 과 동일합니다.

    자세한 내용은 Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst 를 참조하십시오.

rcutree.rcu_delay_page_cache_fill_msec = [KNL]
이 매개변수를 사용하면 메모리 부족 조건에 응답하여 page-cache refill 지연을 밀리초 단위로 설정할 수 있습니다. 허용되는 값의 범위는 0:100000 입니다.
rcuscale.kfree_rcu_test_double = [KNL]
이 매개변수를 사용하여 kfree_rcu() 함수의 이중 인수 변형을 테스트할 수 있습니다. 이 매개변수의 값이 rcuscale.kfree_rcu_test_single 과 동일한 경우 단일 및 이중 인수 변형이 모두 테스트됩니다.
rcuscale.kfree_rcu_test_single = [KNL]
이 매개변수를 사용하여 kfree_rcu() 함수의 단일 인수 변형을 테스트할 수 있습니다. 이 매개변수의 값이 rcuscale.kfree_rcu_test_double 과 동일한 경우 단일 및 이중 인수 변형이 모두 테스트됩니다.
retbleed = [X86]

이 매개변수를 사용하면 반환 지침(RETBleed) 취약점을 사용하여 Arbitrary Speculative Code Execution의 완화 기능을 제어할 수 있습니다. 사용 가능한 옵션은 다음과 같습니다.

  • Off: no mitigation
  • auto: migitation을 자동으로 선택합니다.
  • auto,nosmt: 전체 완화 (STIBP없이 1 이상 만)에 필요한 경우 완화 기능을 자동으로 선택합니다.
  • ibpb: 기본 블록 경계에 대한 짧은 추측 창도 완화합니다. 안전성, 가장 높은 성능 영향
  • unret: 강제로 교육되지 않은 반환 thunks를 활성화하며 AMD f15h-f17h 기반 시스템에서만 유효합니다.
  • unret,nosmt:ret 옵션과 마찬가지로 STIBP를 사용할 수 없을 때 SMT를 비활성화합니다.

    auto 옵션을 선택하면 런타임에 CPU에 따라 완화 방법이 선택됩니다.

    이 옵션을 지정하지 않으면 retbleed=auto 와 동일합니다.

s390_iommu_aperture = [KNL,S390]

이 매개변수를 사용하면 main 메모리 크기의 10진수로, IOMMU API를 통해 액세스할 수 있는 장치 per deviceECDHE 주소 공간의 크기를 지정할 수 있습니다.

  • 기본값은 1 로 설정되어 있습니다. 즉, 물리적 메모리가 설치되어 있으면 동시에 많은 수의 memory를 사용할 수 있으며 하드웨어에서 지원하는 경우 모든 메모리를 한 번에 매핑할 수 있습니다.
  • 2 의 값을 사용하면 모든 메모리를 두 번 매핑할 수 있습니다.
  • 값이 0 이면 하드웨어에 의해 지정된 것 이외의 제한 없이 테이블에 추가 메모리 사용이 부과되지 않습니다.

업데이트된 커널 매개변수

acpi_sleep = [HW,ACPI]

형식: { s3_bios, s3_mode, s3_beep, s4_hwsig, s4_nohwsig, old_ordering, nonvs, sci_force_enable, nobl }

  • s3_bioss3_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 미만인 경우 무시됩니다.
kvm.nx_huge_pages_recovery_ratio = [KVM]

이 매개변수를 사용하면 주기적으로 대규모 페이지로 다시 표시되는 4KiB 페이지 수를 제어할 수 있습니다.

  • 0 복구 비활성화
  • N KVM은 모든 기간마다 4KiB 페이지의 zap 1/N 입니다.

    기본값은 60 입니다.

module.sig_enforce = norid [S390]
이 매개변수를 사용하면 RID 필드를 무시하고 PCI 기능당 하나의 PCI 도메인을 강제로 사용할 수 있습니다.
rcu_nocbs[=cpu-list] = [KNL]

선택적 인수는 CPU 목록입니다.

CONFIG_RCU_NOCB_CPU=y 로 빌드된 커널에서 no-callback CPU 모드를 활성화할 수 있으므로 이러한 CPU 콜백이 softirq 컨텍스트에서 호출되지 않습니다. 이러한 CPU의 RECDHE 콜백 호출은 대신 해당 목적으로 생성된 rcuo x / N kthreads 로 오프로드됩니다. 여기서 여기서 RECDHE-preempt의 경우 s 이고, RECDHE-sched인 kthread의 경우 g 는 CPU 번호입니다. n은 CPU 번호입니다. 이를 통해 오프로드된 CPU의 OS 지터가 줄어들어 HPC 및 실시간 워크로드에 유용할 수 있습니다. 또한 DestinationRule 다중 프로세서의 에너지 효율성을 개선할 수 있습니다.

  • cpulist 가 인수로 전달되면 지정된 CPU 목록이 부팅에서 no-callback 모드로 설정됩니다.
  • = 기호와 cpulist 인수를 생략하면 부팅에서 CPU가 no-callback 모드로 설정되지 않지만 cpusets 를 사용하여 런타임 시 모드를 전환할 수 있습니다.
spectre_v2_user = [X86]

이 매개변수를 사용하면 사용자 공간 작업 간에 Spectre 변형 2(내직 분기 사양) 취약점을 완화할 수 있습니다.

  • auto: 커널은 사용 가능한 CPU 기능 및 취약점에 따라 완화 조치를 선택합니다.
  • 기본 완화 방법은 prctl 로 설정됩니다.
  • 이 옵션을 지정하지 않으면 spectre_v2_user=auto 와 동일합니다.
spec_store_bypass_disable = [X86]

이 매개변수를 사용하면 SSB(Speculative Store Bypass) 최적화를 사용하여 SSB 취약점을 완화할 수 있습니다.

  • 이 옵션을 지정하지 않으면 spec_store_bypass_disable=auto 와 동일합니다.
  • 기본 완화 방법은 prctl 로 설정됩니다.

새로운 sysctl 매개변수

perf_user_access = [ARM64]

이 매개변수를 사용하면 성능 이벤트 카운터를 읽기 위해 사용자 공간 액세스를 제어할 수 있습니다.

  • 1 로 설정하면 사용자 공간은 성능 모니터 카운터 레지스터를 직접 읽을 수 있습니다.
  • 기본값은 0 으로 설정되어 있으며 이는 액세스를 비활성화했음을 의미합니다.

    자세한 내용은 Documentation/arm64/perf.rst 를 참조하십시오.

force_cgroup_v2_swappiness

이 매개변수를 사용하면 cgroupsV1 에서만 사용할 수 있는 per-cgroup swappiness 값을 사용 중단할 수 있습니다. systemd 설계 선택으로 인해 대부분의 시스템 및 사용자 프로세스는 cgroup 내에서 실행됩니다. 또한 이러한 cgroup 스왑 해제 값은 기본값인 60 입니다. 이로 인해 시스템 스왑성 값이 시스템의 스왑 동작에 거의 영향을 미치지 않는 영향을 미칠 수 있습니다.

cgroup 스왑 가능 기능을 사용하려면 force_cgroup_v2_swappiness=1 을 사용하여 시스템을 구성하여 전체 시스템에서 보다 일관된 스왑 동작을 수행할 수 있습니다.

이는 RHEL 특정 기능입니다.