每個 CPU 的讀寫訊號量

每個 CPU 的讀寫訊號量是一種新的讀寫訊號量設計,它針對讀鎖定進行了最佳化。

傳統讀寫訊號量的問題是,當多個核心獲取讀鎖時,包含訊號量的快取行會在這些核心的 L1 快取之間跳動,導致效能下降。

讀鎖定非常快,它使用 RCU 並且避免了鎖和解鎖路徑中的任何原子指令。另一方面,寫鎖定非常昂貴,它呼叫 synchronize_rcu(),這可能需要數百毫秒。

該鎖使用“struct percpu_rw_semaphore”型別宣告。鎖使用 percpu_init_rwsem 初始化,成功時返回 0,分配失敗時返回 -ENOMEM。必須使用 percpu_free_rwsem 釋放鎖以避免記憶體洩漏。

鎖使用 percpu_down_read、percpu_up_read 鎖定以進行讀取,使用 percpu_down_write、percpu_up_write 鎖定以進行寫入。

使用 RCU 最佳化 rw-lock 的想法由 Eric Dumazet <eric.dumazet@gmail.com> 提出。程式碼由 Mikulas Patocka <mpatocka@redhat.com> 編寫