커널 매개변수를 통해 Linux의 선점 모델을 변경할 수 없는 이유는 무엇입니까? [폐쇄]

커널 매개변수를 통해 Linux의 선점 모델을 변경할 수 없는 이유는 무엇입니까? [폐쇄]

리눅스 커널에는 많은 수의매개변수사용자가 커널을 다시 컴파일하지 않고도 커널 동작을 조정할 수 있습니다. 선점 모델의 매개변수가 조정되지 않은 것 같습니다.

-*- Preemption Model
            No Forced Preemption (Server) (PREEMPT_NONE)
        --> Voluntary Kernel Preemption (Desktop) (PREEMPT_VOLUNTARY)
            Preemptible Kernel (Low-Latency Desktop) (PREEMPT)

커널 개발자가 둘 중 하나를 선택할 수 있는 스위치를 추가하지 않는 이유는 무엇입니까?

답변1

선점은 다수의 명시적 선점 지점( might_sleep커널에서 조회)을 사용하여 구현되며, 그 중 다수는 일부 핫 경로에 있습니다. 전체 선점( CONFIG_PREEMPT)은 더 큰 영향을 미칩니다. 예를 들어 스핀록은 IRQ와 마찬가지로 선점 수를 확인합니다(적어도 SMP가 아닌 코어에서는).

현재 선택한 선점 모델은 컴파일 타임에 적용됩니다. 따라서 선점을 강제하지 않으면 선점 코드가 커널에 남지 않으며 최대 처리량을 얻을 수 있습니다. 마찬가지로 자발적 선점 커널에는 IRQ 및 커널 진입점에 대한 선점 검사가 없습니다. 런타임에 선점을 변경할 수 있도록 이 설정을 변경한다는 것은 모든 구성이 (적어도 시작 시) 선점 설정을 확인해야 하며 최선의 경우에도 약간의 비용이 발생한다는 것을 의미합니다(예를 들어, 시작 시 선점이 설정되고 "선점 없음" 설정이 관련 호출 사이트를 패치하더라도 여전히 아무 작업도 수행하지 않는 코드로 끝나서 코드 캐시의 귀중한 공간을 차지하게 됩니다.

관련 정보