5장. 외부 커널 매개변수 관련 중요 변경
이 장에서는 시스템 관리자에게 Red Hat Enterprise Linux 8.6과 함께 제공되는 커널의 중요한 변경 사항에 대한 요약을 제공합니다. 이러한 변경에는 예를 들어 추가되거나 업데이트된 proc
항목, sysctl
, sysfs
기본값, 부팅 매개 변수, 커널 구성 옵션 또는 눈에 띄는 동작 변경이 포함될 수 있습니다.
새로운 커널 매개변수
- fw_devlink.strict = [KNL]
형식: <bool>
이 매개변수를 사용하면 유추된 모든 종속성을 필수 종속 항목으로 처리할 수 있습니다. 이 설정은
fw_devlink=on|rpm
에서만 적용됩니다.- no_hash_pointers
-
이 매개 변수를 사용하면 콘솔 또는 버퍼에 출력되는 포인터를 해시 해제하도록 강제할 수 있습니다. 기본적으로 포인터가 출력되면 해시로 포인터의 값을 가리키는
%p
형식 문자열이 모호해집니다.By default, when a pointer is printed using the %p format string that pointer's value is obscured by hashing. 실제 커널 주소를 권한이 없는 사용자로부터 숨기는 보안 기능입니다. 그러나 또한 AMQ 포인터를 비교할 수 없기 때문에 커널을 디버깅하기가 더 어려워집니다. 이 명령줄 매개 변수를 지정하면 모든 일반 포인터에 true 값이 출력됩니다.%pK
형식 문자열을 사용하여 인쇄되는 포인터는 여전히 해시될 수 있습니다.no_hash_pointers
를 커널을 디버깅하고 프로덕션 환경에서 사용하지 않도록 지정합니다. - no_entry_flush = [PPC]
- 이 매개변수를 사용하면 커널을 입력할 때 L1-D 캐시가 플러시되지 않도록 할 수 있습니다.
- no_uaccess_flush = [PPC]
- 이 매개변수를 사용하면 사용자 데이터에 액세스한 후 L1-D 캐시의 플러시를 방지할 수 있습니다.
- rcutorture.nocbs_nthreads = [KNL]
이 매개변수를 사용하면 RCU(Read-copy-update) 콜백-오프로드 토글러 수를 설정할 수 있습니다.
기본값은 0(zero)이며, 강제 처리를 비활성화합니다.
- rcutorture.nocbs_toggle = [KNL]
- 이 매개변수를 사용하면 연속 콜백-오프로드 투기 시도 사이의 지연(밀리초)을 설정할 수 있습니다.
- refscale.verbose_batched = [KNL]
이 매개변수를 사용하면 추가
printk()
문을 배치할 수 있습니다.0(기본값) 또는 음수 값을 지정하여 모든 항목을 출력할 수 있습니다. 그렇지 않으면 모든 N번째 상세 정보 표시를 인쇄합니다. 여기서 N은 지정된 값입니다.
- strict_sas_size = [X86]
형식: <bool>
이 매개변수를 사용하면 지원되는 부동 소수점 단위(FPU) 기능에 따라 필요한 신호 프레임 크기에 대해 엄격한
sigaltstack
크기 검사를 활성화하거나 비활성화할 수 있습니다. 이 매개 변수를 사용하여 아직AT_MINSIGSTKSZ
보조 벡터를 인식하지 않은 바이너리를 필터링할 수 있습니다.- torture.verbose_sleep_frequency = [KNL]
이 매개변수는 각 sleep 간에 출력해야 하는 자세한
printk()
문 수를 지정합니다.기본값 0(zero)은 verbose-printk() 절전을 비활성화합니다.
- torture.verbose_sleep_duration = [KNL]
- 이 매개변수는 jiffies에서 각 verbose-printk() sleep의 기간을 지정합니다.
- tsc_early_khz = [X86]
형식: <unsigned int>
이 매개 변수를 사용하면TSC (Time Stamp counter) 교정을 건너 뛰고 대신 지정된 값을 사용할 수 있습니다. 이 매개변수는 초기 TSC 빈도 검색 절차를 신뢰할 수 없는 경우 유용합니다. CPUID.16h가 지원하고 부분 CPUID.15h 지원이 있는 오버클로킹된 시스템 등.
업데이트된 커널 매개변수
- amd_iommu = [HW,X86-64]
시스템의 AMD IOMMU 드라이버에 매개변수를 전달할 수 있습니다.
가능한 값은 다음과 같습니다.
-
Fullflush
- 매핑 해제 시 IO/TLB 항목을 플러시할 수 있도록 합니다. 그렇지 않으면 재사용되기 전에 플러시되므로 훨씬 빠릅니다. -
Off
- 시스템에 있는 AMD IOMMU를 초기화하지 마십시오. -
force_isolation
- 모든 장치에 대해 강제로 장치 격리. IOMMU 드라이버는 더 이상 필요에 따라 격리 요구 사항을 상승시킬 수 없습니다. 이 옵션은iommu=pt
를 덮어쓰지 않습니다. -
force_enable
- IOMMU가 활성화된 것으로 알려진 플랫폼에서 IOMMU를 사용할 수 있습니다. 주의해서 이 옵션을 사용하십시오.
-
- acpi.debug_level = [HW,ACPI,ACPI_DEBUG]
형식: <int>
Advanced Configuration and Power Interface (ACPI) 디버그 출력을 생성하려면
CONFIG_ACPI_DEBUG
를 활성화해야 합니다.debug_layer
의 비트는 ACPI 소스 파일의_COMPONENT
에 해당합니다. 예를 들어 debug_level의#define _COMPONENT ACPI_EVENTS
비트는ACPI_DEBUG_PRINT
문의 수준에 해당합니다. 예:ACPI_DEBUG_PRINT((ACPI_DB_INFO, …
debug_level 마스크의 기본값은 "info"입니다. 디버그 계층 및 수준에 대한 자세한 내용은
Documentation/acpi/debug.txt
를 참조하십시오.프로세서 드라이버 정보 메시지를 활성화합니다.
acpi.debug_layer=0x20000000
AML "Debug" 출력을 활성화합니다. 예를 들어 AML을 해석하는 동안 Debug 오브젝트에 저장소를 저장합니다.
ACPI
.debug_layer=0xffffffffff
,acpi.debug_level=0x2
ACPI 하드웨어:acpi.debug_layer=0x2
,acpi.debug_level=0xffffffffff
일부 값은 시스템을 사용할 수 없는 너무 많은 출력을 생성합니다.
log_buf_len
매개 변수는 더 많은 출력을 캡처해야 하는 경우 유용합니다.- acpi_mask_gpe = [HW,ACPI]
형식: <byte> 또는 <bitmap-list>
_Lxx/_Exx
가 존재하기 때문에 지원되지 않는 하드웨어 또는 펌웨어 기능에 의해 트리거되는 일부 일반 목적 이벤트(GPE)를 사용하면 GPE 디스패처가 자동으로 비활성화할 수 없습니다. 이 시설을 사용하여 제어되지 않은 GPE 홍수를 방지할 수 있습니다.- cgroup_disable = [KNL]
Format: <s) 또는 feature(s) to disable
이 매개변수를 사용하면 특정 컨트롤러 또는 선택적 기능을 비활성화할 수 있습니다.
cgroup_disable = <controller/feature>의 영향은 다음과
같습니다.-
단일 계층에 모든
cgroup
을 마운트하면컨트롤러/기능이
자동 마운트되지 않습니다. -
컨트롤러/기능
은 개별적으로 마운트 가능한 하위 시스템으로 표시되지 않습니다. controller/feature
가 선택적 기능인 경우 기능이 비활성화되어 해당cgroup
파일이 생성되지 않습니다.현재 메모리 컨트롤러만 이 문제를 처리하여 오버헤드를 잘라내고 다른 컨트롤러는 사용을 비활성화합니다. 따라서
cgroup_disable=memory
만 실제로 가치가 있습니다."pressure"를 지정하면 정보 계정 기능이 정지되지 않은 상태만 사용할 수 없습니다.
-
단일 계층에 모든
- clearcpuid = BITNUM[,BITNUM…] [X86]
-
이 매개변수를 사용하면 커널의 CPUID 기능 X를 비활성화할 수 있습니다. 유효한 비트 번호는
arch/x86/include/asm/cpufeatures.h
를 참조하십시오. Linux 특정 비트는 커널 옵션을 통해 반드시 안정적인 것은 아니지만 특정 벤더는 여야 합니다. CPUID를 직접 호출하거나 아무것도 확인하지 않고 기능을 사용하는 사용자 프로그램은 여전히 볼 수 있습니다. 이렇게 하면 커널에서 사용하거나/proc/cpuinfo
에 표시되지 않습니다. 또한 중요한 비트를 비활성화하면 커널이 오작동될 수 있습니다. - iommu.strict = [ARM64, X86]
형식: <"0" | "1">
이 매개변수를 사용하면TLB(Translation look-aside buffer)가 무효화 동작을 구성할 수 있습니다.
가능한 값은 다음과 같습니다.
- 0 - 지연 모드, DV(Direct Memory Access) 매핑 해제 작업을 사용하는 요청이 지연됨
1 - 엄격한 모드(기본값), DMA unmap 작업이 무효화 IOMMU 하드웨어 TLBs 동기적으로 작동합니다.
AMD64 및 Intel 64에서 기본 동작은 해당하는 드라이버별 매개 변수에 따라 달라집니다. 그러나 두 방법 중 하나로 명시적으로 지정된 엄격한 모드가 우선합니다.
- rcutree.use_softirq = [KNL]
이 매개 변수가 0으로 설정된 경우 모든
RCU_SOFTIRQ
처리를 CPU당 rcuc kthreads로 이동합니다. 기본값은 0이 아닌 값입니다. 이는RCU_SOFTIRQ
가 기본적으로 사용됨을 의미합니다.rcuc kthreads를 사용하려면
rcutree.use_softirq = 0
을 지정합니다. 그러나CONFIG_PREEMPT_RT=y
커널은 이 커널 부팅 매개 변수를 비활성화(따라서 0으로 설정)합니다.- rcupdate.rcu_normal_after_boot = [KNL]
이 매개변수를 사용하면 부팅이 완료되면 일반 grace-period primitives만 사용할 수 있습니다. 이는
rcu_end_inkernel_boot()
호출이 호출된 후입니다.CONFIG_TINY_RCU
커널에는 영향을 미치지 않습니다.CONFIG_PREEMPT_RT=y
설정이 있는 커널은 이 커널 부팅 매개 변수를 활성화하고 강제로 값 하나로 설정합니다. 즉, Exedited Read-copy-update (RCU) 유예 기간의 모든 부팅 시도를 변환하여 대신 정상적으로 완료되지 않은 유예 시간 처리를 사용합니다.- spectre_v2 = [X86]
이 매개변수를 사용하면 Spectre variant 2 (indirect branch speculation) 취약점의 완화 기능을 제어할 수 있습니다.
기본 작업은 사용자 공간 공격으로부터 커널을 보호합니다.
가능한 값은 다음과 같습니다.
-
on -conditionally enable, means
spectre_v2_user=on
-
off - 무조건 비활성화,
spectre_v2_user=off
를 의미합니다. Auto - 커널이 CPU 모델이 취약한지 여부를 탐지합니다.
'on'을 선택하면 'auto'를 선택하면 CPU에 따라 런타임 시 완화 방법을 선택할 수 있습니다. 사용 가능한 마이크로 코드,
CONFIG_RETPOLINE
구성 옵션 및 커널이 빌드된 컴파일러를 설정합니다.'on'을 선택하면 사용자 공간 작업 공격에 대한 완화도 활성화됩니다.
'off'를 선택하면 커널과 사용자 공간 보호가 모두 비활성화됩니다.
특정 완화 조치를 수동으로 선택할 수도 있습니다.
- Retpoline - 간접 분기 교체
- Retpoline,generic - Retpolines
- Retpoline,lfence - LFENCE; 간접 분기
- retpoline,amd - retpoline,lfence의 별칭
- eibrs - 향상된 간접 분기 제한 사양(IBRS)
- 이메일:
- eibrs,lfence - 향상된 IBRS + LFENCE
- IBRS - IBRS를 사용하여 커널 보호
- ibrs_always - 커널과 userland 둘 다 보호하려면 IBRS를 사용합니다.
- retpoline,ibrs_user - 간접 분기를 retpolines로 교체하고 IBRS를 사용하여 사용자랜드를 보호
-
on -conditionally enable, means
이 옵션을 지정하지 않는 것은 spectre_v2=auto
와 동일합니다.