Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

2.2. 票證盤旋鎖

票證盤旋鎖(ticket spinlock)是任何系統中的重要機制,確保程序不會修改另一組程序所使用的記憶體。在記憶體中,資料改變要是不受控制,會導致資料損毀、系統當機。要避免這些情況發生,作業系統會允許一組程序鎖定部分記憶體,進行操作,然後將此記憶體解鎖,或稱「釋放」(free)。
常見的記憶體鎖定方式,是透過「盤旋鎖」(spin lock),這能讓程序持續檢查,看看是否有鎖可以使用,若有的話便立即取用。如果系統上有多組程序競逐同樣的鎖,則最先要求鎖的程序會最先拿到。在所有程序對記憶體都擁有同樣存取權限時,這方法堪稱「公允」,且運作良好。
不幸的是,在 NUMA 系統上,並不是所有程序都能平等地存取鎖。在同樣 NUMA 節點上的程序在取得鎖時,會有不公平的劣勢。在遠端 NUMA 節點上的程序,會遭遇拿不到鎖與效能降低的問題。
要解決這個問題,RHEL 採用了「票證盤旋鎖」(ticket spinlock)功能。這功能會在鎖上加入保留訂位的佇列機制,讓「所有」程序都能依照提出需求的順序取得鎖。這能降低要求鎖的時候之時間問題與不公平的缺點。
因為票證盤旋鎖的負載比一般的盤旋鎖要來得重一些,因此在 NUMA 系統上有更多擴充性優勢,效能更佳。