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_DIRTYioctl()시스템 호출 중에만 페이지 분할이 수행되고 페이지 정리가 제거됩니다.현재 페이지 분할은 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이 아닌
- 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를 참조하십시오.
-
- 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 기반 시스템에서만 유효합니다. :ret 옵션과 마찬가지로 STIBP를 사용할 수 없을 때 SMT를 비활성화합니다.unret,nosmtauto옵션을 선택하면 런타임에 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_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,high를 전달하면 커널이 4GB 이상의 물리적 메모리 영역을 할당할 수 있습니다. 이로 인해 일부 양의 낮은 메모리가 필요한 시스템에서 두 번째 커널이 충돌하게 됩니다(예:swiotlb는 최소 64M+32K 낮은 메모리 필요) 및 32비트 장치의 gRPC 버퍼가 소진되지 않도록 충분한 메모리가 부족해질 수 있습니다. 커널은 4GB 미만의 256M을 자동으로 할당하려고 합니다. 이 매개변수를 사용하면 두 번째 커널의 경우 4GB 미만의 범위를 지정할 수 있습니다.-
0:낮은 할당을 비활성화합니다.crashkernel=X,high가 사용되지 않거나 예약된 메모리가 4GB 미만인 경우 무시됩니다.
-
- kvm.nx_huge_pages_recovery_ratio = [KVM]
이 매개변수를 사용하면 주기적으로 대규모 페이지로 다시 적용되는 4KiB 페이지 수를 제어할 수 있습니다.
-
0복구 비활성화 NKVM은 모든 기간 4KiB 페이지의 zap1/Nth를 사용합니다.기본값은
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의 RCU 콜백 호출은 대신 해당 목적을 위해 생성된rcuox/Nkthreads로 오프로드됩니다. 여기서x는 RCU를 선점하기 위한p, RCU의 경우s,kthreads의 경우g는 유예 기간으로,N은 CPU 번호입니다. 이렇게 하면 오프로드된 CPU에서 OS 지터가 줄어들어 HPC 및 실시간 워크로드에 유용할 수 있습니다. 또한 비대칭 다중 프로세서의 에너지 효율성을 향상시킬 수 있습니다.-
cpulist를 인수로 전달하면 지정된 CPU 목록이 부팅에서 no-callback 모드로 설정됩니다. -
=기호와cpulist인수를 생략하면 부팅에서 CPU가 no-callback 모드로 설정되지 않지만cpusets를 사용하여 런타임 시 모드를 전환할 수 있습니다.
-
- spectre_v2_user = [X86]
이 매개변수를 사용하면 사용자 공간 작업 간에 Spectre variant 2 (indirect branch speculation) 취약점을 완화할 수 있습니다.
-
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에서만 사용할 수 있는 cgroup별 swappiness 값을 사용할 수 있습니다.systemd설계 선택으로 인해 대부분의 시스템 및 사용자 프로세스는cgroup내에서 실행됩니다. 또한cgroupswappiness 값은60으로 설정됩니다. 이로 인해 시스템 swappiness 값이 시스템의 스왑 동작에 거의 영향을 미치지 않는 영향을 미칠 수 있습니다.cgroup별 스왑성 기능을 사용하려면force_cgroup_v2_swappiness=1로 시스템을 구성하여 전체 시스템에서 보다 일관된 스왑 피어 동작을 수행할 수 있습니다.이는 RHEL 특정 기능입니다.