2.2. Ticket Spinlocks

시스템 설계의 요점은 프로세스가 다른 프로세스에 의해 사용되는 메모리를 변경하지 않도록 확인하는 것입니다. 메모리에서 제어되지 않는 데이터 변경은 데이터 손상이나 시스템 충돌을 초래할 수 있습니다. 이를 방지하기 위해 운영 체제는 프로세스가 메모리의 일부를 잠그고 작업을 실행한 후 메모리 를 잠금 해제하거나 "해제"할 수 있게 합니다.
메모리 잠금의 일반적인 구현은 spin locks을 통한 것으로 이는 프로세스가 잠금을 사용할 수 있는지에 대한 여부를 지속적으로 확인하고 잠금을 사용할 수 있을 경우 즉시 잠금을 실행할 수 있게 합니다. 동일한 잠금에 대해 경합하는 여러 프로세스가 있을 경우 잠금 해제된 후 잠금을 요청한 첫 번째 프로세스가 이를 획득하게 됩니다. 모든 프로세스가 메모리에 동일한 액세스를 가질 경우 이 방법은 "공정 (fair)"에서 잘 작동하게 됩니다.
불행히도 NUMA 시스템에서 모든 프로세스가 잠금에 동일한 액세스를 갖지 않습니다. 잠금과 같은 동일한 NUMA 노드에 있는 프로세스는 잠금을 취득하는데 불공정한 장점이 있습니다. 원격 NUMA 모드에서의 프로세스는 잠금 부족 상태에 빠져 성능이 저하됩니다.
이 문제를 해결하기 위해 Red Hat Enterprise Linux는 ticket spinlocks를 구현했습니다. 이 기능은 잠금에 예약 대기열 메커니즘을 추가하고 모든 프로세스가 요청한 순서로 잠금을 취득할 수 있게 합니다. 이는 잠금 요청에 있어서의 타이밍 문제와 불공정한 이점을 제거합니다.
ticket spinlock 오버헤드는 일반적인 spinlock 보다 다소 크지만 확장성이 뛰어나 NUMA 시스템에서 보다 나은 성능을 제공합니다.

Red Hat의 최신 제품 문서 번역을 신속하게 제공하기 위해 이 페이지에는 영어 원본을 한국어로 자동 번역한 내용이 포함되어 있을 수 있습니다. [자세한 내용보기]