DAOS 分布式異步對象存儲|數據平面

      網友投稿 682 2022-05-30

      DAOS 通過兩個緊密集成的平面進行運轉。數據平面處理繁重的運輸操作,而控制平面負責進程編排和存儲管理,簡化數據平面的操作。

      模塊接口

      I/O 引擎支持一個模塊接口,該接口允許按需加載服務器端代碼。每個模塊實際上都是一個庫,由 I/O 引擎通過 dlopen 動態加載。模塊和 I/O 引擎之間的接口在 dss_module 數據結構中定義。

      每個模塊應指定:

      模塊名

      daos_module_id 中的模塊標識符

      特征位掩碼

      一個模塊初始化和銷毀函數

      此外,模塊還可以選擇配置:

      在整個堆棧啟動并運行后調用的配置和清理函數

      CART RPC 處理程序

      dRPC 處理程序

      線程模型與 Argobot 集成

      I/O 引擎是一個多線程進程,使用 Argobot 進行非阻塞處理。

      默認情況下,每個 Target 都會創建一個 main xstream 和 no offload xstreams。offload xstream 的實際數量可以通過 daos_engine 命令行參數進行配置。此外,還創建了一個額外的 xstream 來處理傳入的元數據請求。每個 xstream 都綁定到一個特定的 CPU 核心。main xstream 接收來自客戶端和其他服務器的 Target 傳入請求。一個特定的 ULT?(User Level Thread) 會在網絡和 NVMe I/O 操作方面提供幫助。

      Thread-local Storage (TLS)

      每個 xstream 分配的私有存儲可以通過 dss_tls_get() 函數進行訪問。

      注冊時,每個模塊可以指定一個模塊密鑰,該密鑰的數據結構大小將由 TLS 中的每個 xstream 進行分配。

      dss_module_key_get() 函數的作用是:返回特定注冊模塊密鑰的數據結構。

      Incast Variable 集成

      DAOS 使用 IV (incast variable) 在單個 IV 命名空間(組織結構為樹)下的服務器之間共享值和狀態。樹的根節點稱為 IV leader,服務器可以是葉子節點也可以是非葉子節點。

      每個服務器都維護自己的 IV 緩存。在獲取過程中,如果本地緩存不能完成請求,它會將請求轉發給其父緩存,直到到達根緩存 (IV leader)。對于更新操作,服務器首先更新它的本地緩存,然后轉發到它的父緩存,直到到達根緩存,然后將更改傳播到其他的服務器。

      IV 命名空間是屬于每個 Pool 的,在 Pool 連接期間創建,在 Pool 斷開連接期間銷毀。

      要使用 IV,每個用戶需要在 IV 命名空間下注冊自己以獲得標識符,然后用戶將使用這個 ID 來獲取或更新自己在 IV 命名空間下的 IV 值。

      dRPC 服務器

      I/O 引擎包括一個 dRPC 服務器,它監聽給定 Unix Domain Socket 上的活動。

      有關 dRPC 的基礎知識以及 Go 和 C 中的底層 API 的更多詳細信息,請參閱 dRPC Documentation。

      dRPC 服務器定期輪詢傳入的客戶端連接和請求。它可以通過 struct drpc_progress_context 對象同時處理多個客戶端連接,該對象管理監聽 Socket 的 struct drpc?對象以及任何活動的客戶端連接。

      服務器在 xstream 0 自己的 ULT (User Level Thread) 中循環運行。dRPC Socket 已設置為非阻塞的,并且使用無超時輪詢。這允許服務器在 ULT 中運行,而不是在自己的 xstream 中運行,預計該通道的流量相對較低。

      dRPC 進程

      drpc_progress 表示 dRPC 服務器循環的一次迭代。其工作流程如下:

      在監聽 Socket 和任何打開的客戶端連接上同時進行超時輪詢。

      如果在客戶端連接上看到任何活動:

      如果數據已輸入:調用 drpc_recv 處理輸入的數據。

      如果客戶端已斷開連接或連接被破壞:釋放 struct drpc 對象并將其從 drpc_progress_context?中刪除。

      如果在-上發現任何活動:

      如果有新的連接進入:調用 drpc_accept 并將新的 struct drpc 對象添加到 drpc_progress_context 中的客戶端連接列表中。

      如果有錯誤:將 -DER_MISC?返回給調用者。I/O 引擎中會記錄該錯誤,但不會中斷 dRPC 服務器循環。在-上獲取到錯誤是意外情況。

      如果沒有看到任何活動,則將 -DER_TIMEDOUT?返回給調用者。這純粹是為了調試目的,實際上,I/O 引擎會忽略此錯誤代碼,因為缺少活動實際上并不是一種錯誤。

      dRPC 處理程序注冊

      單個 DAOS 模塊可以通過注冊一個或多個 dRPC 模塊 ID 的處理函數來實現對 dRPC 消息的處理。

      注冊處理程序很簡單。在 dss_server_module 的字段 sm_drpc_handlers?中,靜態分配一個 struct dss_drpc_handler數組,該數組的最后一項為零,以指示列表的結尾。將字段設置為 NULL 表示沒有要注冊的處理程序。當 I/O 引擎加載 DAOS 模塊時,它將自動注冊所有 dRPC 處理程序。

      注意:

      dRPC 模塊 ID 與 DAOS 模塊 ID 不同。

      這是因為給定的 DAOS 模塊可能需要注冊多個 dRPC 模塊 ID,具體數量取決于 DAOS 模塊所涵蓋的功能。

      dRPC 模塊 ID 必須是系統范圍內唯一的,并且列在一個中心頭文件 `src/include/daos/drpc_modules.h?中。

      dRPC 服務器使用函數 drpc_hdlr_process_msg 來處理傳入的消息。此函數檢查傳入消息的模塊 ID,搜索處理程序。

      如果找到處理程序,則執行該處理程序,并返回 Drpc_Response。

      如果找不到,它將生成自己的 Drpc_Response,指示模塊 ID 未注冊。

      相關信息

      DAOS 分布式異步對象存儲|數據平面

      GitHub: https://github.com/storagezhang

      Emai: debugzhang@163.com

      DAOS: https://github.com/daos-stack/daos

      本文翻譯自 https://github.com/daos-stack/daos/blob/master/src/engine/README.md

      分布式 存儲 對象存儲服務 OBS

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:深源恒際與太平洋保險達成合作 醫療票據智能識別助力保險理賠駛入快車道
      下一篇:如何破解醫療大數據的困局?
      相關文章
      久久精品国产亚洲77777| 亚洲精品午夜无码专区| 亚洲视频在线观看| 亚洲av女电影网| 亚洲AV永久青草无码精品| 日韩亚洲欧洲在线com91tv| 亚洲精品无码久久一线| 亚洲一区二区三区香蕉| 国产成人综合亚洲AV第一页| 国产亚洲精品看片在线观看| 亚洲中文字幕无码中文字在线| 亚洲色精品aⅴ一区区三区| 国产亚洲精品美女久久久| 国产亚洲精品国产| 国产精品亚洲а∨无码播放 | 亚洲精品中文字幕乱码三区 | 亚洲精品无码MV在线观看| 亚洲精品成人片在线播放 | 亚洲a∨国产av综合av下载| 国产精品亚洲专区无码牛牛 | 亚洲人成电影在线观看青青| 亚洲AV综合色区无码二区偷拍| 亚洲宅男精品一区在线观看| 亚洲综合国产成人丁香五月激情| 亚洲欧洲专线一区| 国产尤物在线视精品在亚洲| 亚洲一区日韩高清中文字幕亚洲| 亚洲五月综合缴情在线观看| 亚洲va久久久噜噜噜久久男同| 久久精品国产亚洲av麻豆小说| 亚洲大香伊人蕉在人依线| 亚洲中文字幕日本无线码| 久久精品国产亚洲av瑜伽| 亚洲人成色7777在线观看不卡| 亚洲色婷婷综合久久| 久久久无码精品亚洲日韩按摩 | 亚洲国产精品久久久久网站| 亚洲成在人线中文字幕| 亚洲中文字幕久久精品蜜桃| 国产精品亚洲综合| 亚洲开心婷婷中文字幕|