天天看點

【osd】OSD的讀寫流程

 Ceph IO, Rados IO 流程解析(讀寫)

CEPH RADOS IO(讀寫) 處理流程圖:

【osd】OSD的讀寫流程

CPEH讀寫順序保證: 

  •  不同對象的并發控制

不同的對象有可能落到同一個pg裡,ceph實作裡,在OSD的處理線程中就會給PG加鎖,一直到queue_transactions裡把事務放到bluestore的隊列裡才釋放PG的鎖。從這裡可以看出,對于同一個PG裡的不同對象,是通過PG鎖來進行并發的控制,好在這個過程中沒有涉及到對象的I/O,不會太影響效率;對于不同PG的對象,就可以直接進行并發通路。

  • 同一個對象的并發順序控制

從上面的介紹可以得知,同一個對象的通路也會受到PG鎖的限制,但這是在OSD的處理邏輯裡。對于同一個對象的通路,要考慮的情況比較複雜。從使用者使用場景上來說,有兩種使用方式。比如:

1)一個client情況,用戶端對同一個對象的更新處理邏輯是串行的,要等前一次寫請求完成,再進行後一次的讀取或者寫更新;

2)多個client對同一個對象的并發通路,目前的分布式系統裡很少能做到,涉及到多個client同時更新帶來的資料一緻性問題,一般都需要叢集檔案系統的支援;

對于多client的場景,ceph的rbd也是不能保證的,是以這裡主要以單client通路ceph rbd塊裝置的場景進行闡述,看一個極端的例子:同一個client先後發送了2次對同一個對象的異步寫請求。以這個例子展開進行說明。

  • pg層順序保證及對象鎖機制

從消息隊列裡取消息進行處理時,osd端處理op是劃分為多個shard,然後每個shard裡可以配置多個線程,pg按照取模的方式映射到不同的shard裡。另外osd在處理pg時,從消息隊列裡取出的時候就對pg加了寫鎖的,而且是在請求下發到store後端才釋放的鎖,是以消息隊列裡過來的消息有序後,在osd端pg這一層處理時也是有序的

參考資料

1. Ceph IO, Rados IO 流程解析(讀寫)

OSD

繼續閱讀