在看 1024cores 時發現有一個  "big reader lock"  名詞 , 仔細看了一下內容 ,

原來是一種演算 ....我覺得 seqlock 比較好用 , 但是 big reader lock 值得看看細節 ....

 

read/write lock 在於當 read 在使用時,write 無法寫,必須等所有 read結束,

read 則可以多個session一起進行!!當 write進行中,read必須等 write lock結束!!

 

雖然 read lock 可以有多個 session同時進行,但細節中,read lock 必須增加 reference count,

當 reference count = 0 , write lock 才可以進行!!  想像一下 , 這個 ref count 存在某一個 cache line,

當 acquire read lock 時,就必須 imcrease ref count....well , 這條 cache line 必須取到這個 core的 cache,

當另一個 core acquire read lock時,這條 cache line 必須到這個 core ...也就是說,表面上看 read lock

可以很快,但是因為 ref count 必須旅行的關係,  多個 read lock 運行並不是最快的....

 

big read data 在每個 core 都安排一個 read/write lock 變數, 而且這些變數都相隔一條 cache line 的距離,

(這是要避免 false sharing 問題, core 存取 memory 以 cache line 為單位,同一條 cache line上的變數 ,

就像是同部車的乘客一樣,要一起旅行的 !!!) ,

intel  intel cache line 有 64 bytes, 所以,當每個 core 執行 read lock 時,它只會使用屬於它的 read lock

變數,這個變數的 ref count lock +1 , unlock - 1 都不會影響其他 core 的 read lock/unload

(只要這幾個 R/W lock 變數不在同一條 cache line上,否則無效 !!) , 所以它可以相當快 !!!!!

 

缺點是, 當有 write 需求時,它必須要確定每個 core 的 R/W lock 的 ref count 都等於 0  , 比起原先 read/write lock 只要檢查

一個 ref count 要慢多了 !!!!

 

這個架構很少用到...觀念倒是蠻不錯的!!!

 

 

 

 

 

arrow
arrow
    全站熱搜

    hedgezzz 發表在 痞客邦 留言(0) 人氣()