1. 程式人生 > >深入理解Lustre檔案系統-第7篇 MDC和Lustre元資料

深入理解Lustre檔案系統-第7篇 MDC和Lustre元資料

7.1   MDC概論

MDC模組是處在Lustre Lite之下的一層。它定義了一些元資料相關的函式, Lustre Lite可以呼叫這些函式來向MDS傳輸元資料請求。這些函式在lustre/mdc中實現,我們將在6.3節討論它們。

Lustre Lite在mdc_op_data資料結構中傳遞請求引數,所有的請求最終要轉化為ptl_request結構。所以,在RPC請求執行之前,有一些準備步驟(打包)。為這個目的,在mdc_lib.c裡,定義了一些函式。而這些函式中的其中一部分實際上呼叫了由PortalRPC層提供的打包幫助函式。

一旦ptl_request準備好,MDC就可以呼叫ptlrpc_queue_wait()來發送請求。這是一個同步操作。所有的包含意圖的元資料操作也是同步的。也有其他一些用來進行傳送操作的ptlrpc方法,它們被用來進行無意圖的元資料操作(mdc_reint)——這些在原始碼mdc_reint.c中完成。

在大部分情況下,對由mdc_op_data到ptl_request轉換的驅動,和對請求入佇列的呼叫,都是在mdc_enqueue中進行的,這在lustre/mdc/mdc_locks.c裡實現。

7.2   分條EA

根據分條EA是否被建立,有三種格式:

  • 盤上格式,在儲存在MDS磁碟上時使用,由結構體lov_mds_md描述。
  • 記憶體中格式,在讀入記憶體和解包後使用,由結構體lov_stripe_md描述。
  • 使用者格式,在資訊向用戶呈現時使用,由結構體lov_user_md描述。

使用者格式和盤上格式的不同體現在兩方面:

  • 使用者格式有lmm_stripe_offset而盤上格式則沒有,這個欄位用來在使用者想要設定分條時將striping_index引數傳遞給Lustre。
  • 使用者格式有一個16位元的lmm_stripe_count,而盤上格式是32位元。

7.3   分條API

為了處理分條EA,定義了五類API。如下所列:

設定/獲取API 用來從儲存器中設定或獲取分條EA。它對盤上分條EA進行操作。

intfsfilt_set_md(struct obd_device *obd, struct inode *inode,

                           void *handle, void*md, int size, const char *name)

intfsfilt_get_md(struct obd_device *obd, struct inode *inode,

                           void *md, int size,const char *name)

這裡,md是分條EA的緩衝,handle是日誌處理函式,而inode指向MDS物件。

打包/解包API 由於EA在磁碟中以打包的方式儲存,所以它們需要在呼叫fsfilt_get_md()之後解包。這些API可以對盤上或者記憶體中的分條EA使用。

intobd_packmd(struct obd_export *exp, struct lov_mds_md **disk_tgt,

struct lov_stripe_md *mem_src)

intobd_unpackmd(struct obd_export *exp, struct lov_stripe_md **mem_tgt,

struct lov_mds_md *disk_src, int disk_len)

這裡,mem_src指向分條EA的記憶體中結構,而disk_tgt指向分條EA的盤上結構。反過來,disk_src是盤上分條EA源,而mem_tgt是記憶體中的分條EA目的。

分配/釋放API 分配和釋放記憶體中和盤上的分條EA。

voidobd_size_diskmd(struct obd_export *exp, struct lov_mds_md *dis_tgt)

intobd_alloc_diskmd(struct obd_export *exp, struct lov_mds_md **disk_tgt)

intobd_free_diskmd(struct obd_export *exp, struct lov_mds_md **disk_tgt)

intobd_alloc_memmd(struct obd_export *exp, struct lov_stripe_md **mem_tgt)

intobd_free_memmd(struct obd_export *exp, struct lov_stripe_md **mem_tgt)

分條定位API 從分條EA中返回資料物件位置資訊。

obd_sizelove_stripe_size(struct lov_stripe_md *lsm, obd_size ost_size, int stripeno)

intlov_stripe_offset(struct lov_stripe_md *lsm, obd_off lov_off,

int stripeno, obd_off *obd_off)

intlov_stripe_number(struct lov_stripe_md *lsm, obd_off lov_off)

這裡,lov_off是檔案邏輯偏移量。stripeno是資料物件的分條數量。

lfs API 使用者層的用來處理分條EA的API,這由lfs工具使用。

intllapi_file_get_stripe(const char *path, struct lov_user_md *lum)

intllapi_file_open(const char *name, int flags, int mode,

      unsigned long stripe_size, intstripe_offset, int stripe_count,int stripe_pattern)

這裡llapi_file_get_stripe()在給定路徑時,返回使用者分條EA,而llapi_file_open()開啟或者建立檔案,該檔案使用使用者定義的分條模式。值得指出的是,stripe_offset和使用者空間中使用的stripe_index相同,它是首個分條的OST索引。

本文章歡迎轉載,請保留原始部落格連結http://blog.csdn.net/fsdev/article

相關推薦

深入理解Lustre檔案系統-7 MDCLustre資料

7.1   MDC概論 MDC模組是處在Lustre Lite之下的一層。它定義了一些元資料相關的函式, Lustre Lite可以呼叫這些函式來向MDS傳輸元資料請求。這些函式在lustre/mdc中實現,我們將在6.3節討論它們。 Lustre Lite在mdc_op_

深入理解Lustre檔案系統-10 LNET:Lustre網路

初始化和拆除 intLNetInit(void)和intLNetFini(void)是用來建立和拆除LNET連線的API。 面向記憶體的通訊語義 如下的API已經由註釋註解了: int LNetGet(       lnet_nid_t self,       lnet_handle_md_t md_in,

深入理解Lustre檔案系統-3 LNET:Lustre網路

    LNET是Lustre Networking的縮寫,是Lustre的網路子系統,負責提供訊息傳遞API。LNET源自於Sandia Portals,但又與之存在著差異。 3.1      結構     LNET由兩部分組成: LNET層。它以通訊API的方式,向被稱

深入理解Lustre檔案系統-12 Lustre磁碟檔案系統:ldiskfs

ldiskfs(有些時候被錯誤地稱為Linux ext4檔案系統)是對Linux ext3檔案系統的打了很多補丁的一個版本,由Sun Microsystems公司開發和維護。ldiskfs是Linux ext3和ext4檔案系統的超集。現在它只被Lustre檔案系統用在伺服

深入理解Lustre檔案系統-2 Portal RPC

    遠端程序呼叫(Remote Procedure Call,RPC)是構建分散式系統時所使用的一種常見元件。它使得客戶端可以像進行本地呼叫一樣進行遠端的過程呼叫,即客戶端可以忽略訊息傳遞的細節,而專注於過程呼叫的效果。     Portal RPC是Lustre 的R

深入理解Lustre檔案系統-1 跟蹤除錯系統

    一直以來,Linus Torvalds對核心偵錯程式都秉持著抵觸態度,並且擺出了我是bastard我怕誰的姿態。他保持了一貫風格,言辭尖銳卻直指本質。相信這是經驗之談。在除錯核心時,最關鍵的問題是如何獲取出錯相關的資訊,準確定位出錯位置。獲取資訊有很多方法,其中核心

深入理解Lustre檔案系統-9 Portal RPC

Portal RPC為如下內容提供了基礎機制: 通過輸入口傳送請求,接受請求通過輸出口接收和處理請求,傳送請求執行塊資料傳輸錯誤恢復 我們將首先探討Portal RPC的介面,而不深入到實現細節中。我們將用LDLM的傳送機製作為例子。對這個例項,LDLM向客戶端傳送一個

深入理解Lustre檔案系統-3 lustre lite

在file結構體中定義的另外一個欄位是f_dentry,它指向一個儲存在dentry cache(即所謂dcache)中的dentry物件(struct dentry)。實質上,VFS在檔案和資料夾將被首次訪問的時候就會建立一個dentry物件。如果這是一個不存在的檔案/資料夾,那麼將會建立一個無效的de

深入理解閉包系列——閉包的10種形式

前面的話   根據閉包的定義,我們知道,無論通過何種手段,只要將內部函式傳遞到所在的詞法作用域以外,它都會持有對原始作用域的引用,無論在何處執行這個函式都會使用閉包。接下來,本文將詳細介紹閉包的10種形式 返回值   最常用的一種形式是函式作為返回值被返回 var F = function()

深入理解閉包系列——常見的一個迴圈閉包的錯誤詳解

前面的話   關於常見的一個迴圈和閉包的錯誤,很多資料對此都有文字解釋,但還是難以理解。本文將以執行環境圖示的方式來對此進行更直觀的解釋,以及對此類需求進行推衍,得到更合適的解決辦法 犯錯 function foo(){ var arr = []; for(var i = 0

深入理解定時器系列——定時器應用(時鐘、倒計時、秒錶鬧鐘)

前面的話   本文屬於定時器的應用部分,分別用於實現與時間相關的四個應用,包括時鐘、倒計時、秒錶和鬧鐘。與時間相關需要用到時間和日期物件Date,詳細情況移步至此 時鐘   最簡單的時鐘製作辦法是通過正則表示式的exec()方法,將時間物件的字串中的時間部分截取出來,使用定時器重新整理即可 &

深入理解DOM節點型別——註釋節點和文件型別節點

前面的話   把註釋節點和文件型別節點放在一起是因為IE8-瀏覽器的一個bug。IE8-瀏覽器將標籤名為"!"的元素視作註釋節點,所以文件宣告也被視作註釋節點。本文將詳細介紹這兩部分的內容 註釋節點 【特徵】   註釋在DOM中是通過Comment型別來表示,註釋節點的三個node屬性——node

深入理解DOM節點型別——元素節點Element

前面的話   元素節點Element非常常用,是DOM文件樹的主要節點;元素節點是HTML標籤元素的DOM化結果。元素節點主要提供了對元素標籤名、子節點及特性的訪問,本文將詳細介紹元素節點的主要內容 特徵   元素節點的三個node屬性——nodeType、nodeName、nodeValue分別是

深入理解javascript物件系列——神祕的屬性描述符

前面的話   對於作業系統中的檔案,我們可以駕輕就熟將其設定為只讀、隱藏、系統檔案或普通檔案。於物件來說,屬性描述符提供類似的功能,用來描述物件的值、是否可配置、是否可修改以及是否可列舉。本文就來介紹物件中神祕的屬性描述符 描述符型別   物件屬性描述符的型別分為兩種:資料屬性和訪問器屬性 資料屬

深入理解Java虛擬機器 | :虛擬機器位元組碼執行引擎

執行引擎是Java虛擬機器最核心的組成部分之一。“虛擬機器”是一個相對於“物理機”的概念,這兩種機器都有程式碼執行能力,其區別是物理機的執行引擎是直接建立在處理器、硬體、指令集和作業系統層面上的,而虛擬機器的執行引擎則是由自己實現的,因此可以自行制定指令集與執行引擎的結構體系

深入理解iputils網路工具-6 rarpd:逆地址解析程式

6.1       引言     通過逆地址解析協議RARP,客戶端可以通過硬體地址得到對應的IP地址,一般用於無盤系統中,用以獲得自身的IP地址。rarpd就是處理RARP請求的伺服器程式。     RARP分組的格式與ARP分組基本一致。它們之間主要的差別是RARP請求或應答的幀型別程式碼為0x8035

深入理解Android卷III 7深入理解SystemUI (節選)

 多謝華章圖書與鄧凡平先生的幫助,《深入理解Android卷III〉終於上市了。歡迎大家來這裡一起探討文中的問題或與Android系統有關的任何話題。 第7章深入理解SystemUI 本章主要內容: 探討狀態列與導航欄的啟動過程

讀書筆記 ---- 《深入理解Java虛擬機器》---- 7:虛擬機器位元組碼執行引擎

上一篇:虛擬機器類載入機制:https://blog.csdn.net/pcwl1206/article/details/84260914 第7篇:虛擬機器位元組碼執行引擎 執行引擎是Java虛擬機器最核心的組成部分之一。“虛擬機器”是一個相對於“物理機”的概念,這兩種機器都有程式碼執行能力

深入理解計算機系統 三章大略五章大略

$0 一個 編譯 存儲器 系統 32位 做了 ++i 擴展 這2章總結的很少,主要是覺得沒那麽重要。 1.2個操作數的指令,第二個操作數通常是目的操作數:movb a b,move a to b,而add a b,b+=a,指令分為指令類,如mov類:movb,movw,m

【學習筆記】 唐大仕—Java程式設計 5講 深入理解Java語言之5.7 其他幾個高階語法

/** * 其他幾個高階語法 學習筆記 * @author cnRicky * @date 2018.11.11 */   其他幾個高階語法 新的語法 從JDK1.5起,增加了一些新的語法 大部分是編譯器自動翻譯的,稱為Complier sugar("糖"用起來很方便,但