2012-05-01 63 views
3

是否有人熟悉在Linux內核中取代基本自旋鎖算法的票證鎖算法?我希望找到這方面的專家。我從幾個在線資源中讀到,票證鎖定算法應該是更快的,因爲天真算法壓倒了CPU總線,所有線程都試圖同時獲得鎖定。任何人都可以確認/否認這一點嗎?票鎖算法性能?

我做了一些我自己的實驗。門票鎖確實是公平的,但其性能與pthread spinlock算法差不多。事實上,它只是一個緩慢的接觸。

我看到它的方式,不公平的算法應該快一點,因爲早期鎖定鎖的線程更快完成,從而使調度程序的工作量減少。

我想對此有所瞭解。如果速度不快,爲什麼在內核中實現票證鎖定,爲什麼不在用戶空間中使用?謝謝!

回答

2

是否有人熟悉在Linux內核中取代基本自旋鎖算法的票證鎖算法?我希望找到這方面的專家。我從幾個在線資源中讀到,票證鎖定算法應該是更快的,因爲天真算法壓倒了CPU總線,所有線程都試圖同時獲得鎖定。任何人都可以確認/否認這一點嗎?

我做了一些我自己的實驗。門票鎖確實是公平的,但其性能與pthread spinlock算法差不多。事實上,它只是一個緩慢的接觸。

我覺得ticket lock的介紹主要是因爲公平原因。門鎖和自旋鎖的速度和scalability與MCS等可伸縮鎖相比幾乎相同。它們都引入了大量的高速緩存線無效和內存讀取,它們壓倒了CPU總線。

我看到它的方式,不公平的算法應該快一點,因爲早期執行鎖定的線程會更快完成,從而使調度程序的工作量減少。

沒有調度程序參與。票證鎖定和螺旋鎖是忙等待鎖定,在等待時不會被阻止,但請檢查鎖定值。一旦鎖定空閒,程序繼續運行。控制流程永遠不會進入調度程序並返回。我們使用spinlock而不是block-wakeup lock的原因是block-wakeup涉及上下文切換,這很昂貴,而我們只是在等待,並且刻錄cpu的時間變得更便宜。因此,忙等待鎖只能用於「短」關鍵部分。

我想對此有所瞭解。如果速度不快,爲什麼在內核中實現票證鎖定,爲什麼不在用戶空間中使用?謝謝!

它在內核中因爲內核代碼也有臨界區,所以你需要內核空間鎖來保護內核數據。但是,當然,您可以實現使用空間票證鎖定,並在您的應用程序中使用它。