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


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

 

以下流程版本ceph version 14.2.5 nautilus

 

 

 

CPEH讀寫順序保證: 

  •  不同對象的並發控制

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

 

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

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

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

2)多個client對同一個對象的並發訪問,目前的分布式系統里很少能做到,涉及到多個client同時更新帶來的數據一致性問題,一般都需要集群文件系統的支持;

 

對於多client的場景,cephrbd也是不能保證的,因此這里主要以單client訪問ceph rbd塊設備的場景進行闡述,看一個極端的例子:同一個client先后發送了2次對同一個對象的異步寫請求。以這個例子展開進行說明。

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM