Linux 커널 구성 시 RCU 이해

Linux 커널 구성 시 RCU 이해

Linux 커널 버전 3.9.4를 구성하고 있습니다. RCU에 대한 질문을 받았습니다(아래 참조). 구체적으로 이들 각각은 무엇이며, 일부를 활성화하거나 비활성화할 때의 장점과 단점은 무엇입니까?

Consider userspace as in RCU extended quiescent state (RCU_USER_QS) [N/y/?]
Tree-based hierarchical RCU fanout value (RCU_FANOUT) [64]
Disable tree-based hierarchical RCU auto-balancing (RCU_FANOUT_EXACT) [N/y/?]
Accelerate last non-dyntick-idle CPU's grace periods (RCU_FAST_NO_HZ) [Y/n/?]
Offload RCU callback processing from boot-selected CPUs (RCU_NOCB_CPU) [N/y/?] 

답변1

이러한 옵션에 대한 자세한 내용은 다음을 참조하세요.LTTng 프로젝트장소. RCU는 (읽기-복사-업데이트)입니다. 이는 동일한 데이터가 멀티 코어 CPU의 코어 전체에 복제될 수 있도록 하고 복사본 간에 데이터가 동기화된 상태를 유지하도록 보장하는 커널 내의 데이터 구조입니다.

발췌

liburcu는 LGPLv2.1 사용자 공간 RCU(읽기-복사-업데이트) 라이브러리입니다. 이 데이터 동기화 라이브러리는 코어 수에 따라 선형적으로 확장되는 읽기 측 액세스를 제공합니다. 이는 주어진 데이터 구조의 여러 복사본이 동시에 존재하도록 허용하고 데이터 구조 액세스를 모니터링하여 메모리 회수가 발생할 수 있는 유예 기간을 감지함으로써 이를 수행합니다.

자원

그렇다면 이러한 옵션은 무엇입니까?

이 옵션은 커널/사용자 공간 경계에 후크를 설정하고 CPU가 사용자 공간에서 실행되는 동안 RCU를 확장된 정적 상태로 전환합니다. 이는 CPU가 사용자 공간에서 실행 중일 때 전역 RCU 상태 시스템에서 제외되므로 RCU의 타이머를 열린 상태로 유지하려고 시도하지 않음을 의미합니다.

전체 dynticks 모드를 해킹하고 개발하는 데 도움을 주려는 경우가 아니면 이 옵션을 활성화하면 안 됩니다. 또한 불필요한 오버헤드도 추가됩니다.

확실하지 않으면 N이라고 말하세요

이 옵션은 RCU 계층 구현의 팬아웃을 제어하여 RCU가 많은 수의 CPU가 있는 시스템에서 효율적으로 작동할 수 있도록 합니다. 값은 최소한 NR_CPUS의 네 번째 루트여야 하며, 이를 통해 NR_CPUS가 매우 커질 수 있습니다. RCU_FANOUT의 기본값은 프로덕션 시스템에서 사용해야 하지만 RCU 구현 자체를 스트레스 테스트하려는 경우 더 작은 RCU_FANOUT 값을 사용하면 소규모 시스템에서 대규모 시스템 코드 경로를 테스트할 수 있습니다.

RCU 자체를 테스트하는 경우 특정 번호를 선택하십시오. 확실하지 않은 경우 기본값을 사용하세요.

이 옵션은 계층 구조의 불균형에 관계없이 지정된 정확한 RCU_FANOUT 값을 강제 적용합니다. 이는 RCU 자체를 테스트하는 데 유용하며 언젠가는 강력한 NUMA 동작이 있는 시스템에 유용할 수도 있습니다.

RCU_FANOUT_EXACT가 없으면 코드는 계층 구조의 균형을 유지합니다.

잘 모르겠으면 N이라고 말하세요.

이 옵션을 사용하면 CPU가 RCU 콜백이 대기열에 있는 경우에도 dynticks-idle 상태로 들어갈 수 있으며 RCU가 약 4지피마다 한 번씩 이러한 CPU를 깨우는 것을 방지합니다(기본적으로 rcutree.rcu_idle_gp_delay 매개변수를 사용하여 이 설정을 조정할 수 있음). 에너지 효율 . 반면에 이 옵션은 RCU 유예 기간의 기간을 늘립니다. 예를 들어 동기화_rcu() 속도가 느려집니다.

에너지 효율성이 중요하고 유예 기간 연장이 걱정되지 않는 경우 "예"를 선택하십시오.

잘 모르겠으면 N을 선택해주세요.

공격적인 HPC 또는 실시간 워크로드에 대한 운영 체제 지터를 줄이려면 이 옵션을 사용하십시오. 또한 배터리 구동 비대칭 멀티프로세서에서 에너지 효율적인 CPU로 RCU 콜백 호출을 오프로드하는 데 사용할 수도 있습니다.

이 옵션은 시작 시 rcu_nocbs 매개변수로 지정된 CPU에서 콜백 호출을 중앙에서 오프로드합니다. 이러한 각 CPU에 대해 콜백을 호출하기 위해 kthread("rcuox/N")가 생성됩니다. 여기서 "N"은 오프로드되는 CPU이고 "x"는 RCU-bh의 경우 "b"이고 "p"는 RCU를 의미합니다. 선점, "s"는 RCU 스케줄링을 나타냅니다. 이 kthread가 지정된 CPU에서 실행되는 것을 막을 수 있는 방법은 없지만 (1) kthread는 각 콜백 사이에서 선점될 수 있으며 (2) 선호도 또는 cgroup을 사용하여 kthread가 원하는 CPU 세트에서 실행되도록 강제할 수 있습니다.

디버깅을 돕고 운영 체제 지터를 줄이려면 여기서 Y라고 말하세요. 확실하지 않은 경우 여기에서 N을 선택하세요.

그래서 당신은 그것을 필요로합니까?

커널을 컴파일할 때 특정 옵션이 무엇을 하는지 모른다면, 그 옵션 없이도 살 수 있는 것이 안전할 것입니다. 그래서 나는 그 질문에 아니오라고 대답할 것입니다.

또한 이런 종류의 작업을 수행할 때 일반적으로 배포판에 사용되는 커널의 구성 파일을 가져와 비교하여 누락된 기능이 있는지 확인합니다. 이는 아마도 모든 기능을 학습할 수 있는 최고의 리소스일 것입니다.

예를 들어 Fedora에서는 포함된 샘플 구성을 참조할 수 있습니다. 자세한 내용은 이 페이지를 확인하세요.사용자 정의 커널 구축.

관련 정보