cpu_slot_* 서버 설정

cpu_slot_* 서버 설정

이 페이지에서는 CPU 슬롯 기반 워크로드 스케줄링의 선점(preemption)과 CPU 시간 배분을 제어하는 cpu_slot_* 계열 서버 설정을 설명할게요.

출처: 문서

본문

이 설정들은 ClickHouse 서버를 구성하며, ClickHouse 소스에서 자동으로 생성돼요.

cpu_slot_preemption

CPU 리소스(MASTER THREAD 및 WORKER THREAD)에 대한 워크로드 스케줄링이 어떻게 수행되는지 정의해요.

  • true(기본값)이면 실제 소비된 CPU 시간을 기준으로 계산해요. 경쟁하는 워크로드에 공정한 CPU 시간이 할당돼요. 슬롯은 제한된 시간 동안 할당되고 만료 후 다시 요청돼요. CPU 리소스 과부하 시 슬롯 요청이 스레드 실행을 차단할 수 있는데, 즉 선점이 발생할 수 있어요. 이는 CPU 시간 공정성을 보장해요.
  • false이면 할당된 CPU 슬롯 수를 기준으로 계산해요. 경쟁하는 워크로드에 공정한 CPU 슬롯 수가 할당돼요. 스레드가 시작할 때 슬롯이 할당되어 계속 유지되고, 스레드 실행이 끝나면 해제돼요. 쿼리 실행에 할당된 스레드 수는 1에서 max_threads로만 증가할 수 있고 절대 감소하지 않아요. 이는 오래 실행되는 쿼리에 더 유리하며 짧은 쿼리의 CPU 기아를 초래할 수 있어요.

예시

<cpu_slot_preemption>true</cpu_slot_preemption>

참고 (See Also)

cpu_slot_preemption_timeout_ms

선점 중, 즉 다른 CPU 슬롯이 부여되기를 기다리는 동안 워커 스레드가 기다릴 수 있는 밀리초를 정의해요. 이 타임아웃 후에도 새 CPU 슬롯을 획득하지 못하면 스레드는 종료되고 쿼리는 동시에 실행되는 스레드 수를 더 낮게 동적으로 축소(scale down)돼요. 마스터 스레드는 절대 축소되지 않지만 무기한 선점될 수 있어요. cpu_slot_preemption이 활성화되고 WORKER THREAD에 CPU 리소스가 정의된 경우에만 의미가 있어요.

예시

<cpu_slot_preemption_timeout_ms>1000</cpu_slot_preemption_timeout_ms>

참고 (See Also)

cpu_slot_quantum_ns

스레드가 CPU 슬롯을 획득한 후 다른 CPU 슬롯을 요청하기 전에 소비할 수 있는 CPU 나노초 수를 정의해요. cpu_slot_preemption이 활성화되고 MASTER THREAD 또는 WORKER THREAD에 CPU 리소스가 정의된 경우에만 의미가 있어요.

예시

<cpu_slot_quantum_ns>10000000</cpu_slot_quantum_ns>

참고 (See Also)

더 알아보기 (Learn more)