原创 LAYOUTGET(二)

    上一篇文章中我們分析了layout在客戶端的保存形式、相關的數據結構、客戶端發起LAYOUTGET請求的時間點,這篇文章中我們詳細分析一下LAYOUTGET請求的發起過程以及MDS端的處理過程。 1.客戶端處理程序 首先看幾個客戶

原创 FILE LAYOUT

1 file layout中的基本概念     pNFS支持三種LAYOUT,分別爲:block layout、object layout、file layout。這篇文章中講解file layout的設計理念,不涉及Linux中的代碼。

原创 文件加鎖

1.客戶端處理程序     這篇文章中我們講講文件鎖的加鎖過程,首先說說與文件鎖相關的數據結構 struct nfs4_lock_state { // nfs4_state結構中包含多個nfs4_lock_state結構

原创 獲取layout類型

    NFSv4.1支持三種layout類型:file layout、object layout、block layout,這三種layout對數據讀寫過程的處理方式不同。因此pNFS系統中,客戶端首先需要獲取layout類型,這是在掛

原创 文件解鎖

    文件解鎖是加鎖的反操作,當處理完畢後應該儘量趕快解鎖,避免影響其他用戶訪問文件。NFS中與文件解鎖相關的操作有兩個:LOCKU和RELEASE_LOCKOWNER。LOCKU的作用是解鎖,RELEASE_LOCKOWNER的作用是

原创 pNFS讀操作

    前面幾篇文章基本介紹清楚了LAYOUTGET和GETDEVICEINFO兩個請求,這是客戶端發起I/O操作前的準備工作,這篇文章中我們就以讀操作爲例講講pNFS中的I/O操作。pNFS中的讀操作和沒有采用pNFS機制時的讀操作基本

原创 LAYOUTGET(五)

    上篇文章講到了MDS中LAYOUTGET的處理過程,當MDS處理完畢後就會將數據封裝到應答消息中返回給客戶端。這篇文章中我們講講客戶端接收到應到報文後的處理。以前的文章講到過客戶端用struct pnfs_layout_segme

原创 LVM邏輯卷配置

        配置過幾次LVM,但是由於間隔比較長,每次配置前都需要先上網查資料。好吧,我寫在自己的博客中,以後就看這裏的配置過程了。LVM是一種邏輯卷,主要解決物理卷(就是磁盤)空間劃分的問題。由於我們在安裝操作系統時不可能準確預見各

原创 數學函數庫(二)

上一篇文章中我們熟悉了浮點數在內存中的存儲方式,這篇文章中我們來分析一下數學庫中提供的函數。數學庫中包含了很多函數,比如取整函數、三角函數、指數對數函數、貝塞爾函數、伽馬函數等等,很多函數是對具體一個算法或數學問題的描述。我們從中挑選了一

原创 dlmalloc(四)

這篇文章我們來講講釋放內存的過程,也就是free()的代碼流程。對於應用程序來說釋放內存很簡單,直接調用free(ptr)就可以了,參數是要釋放的內存塊指針。那麼,釋放內存時dlmalloc做了哪些工作呢? // 這是釋放內存的函數,調

原创 LAYOUTGET(三)

    這篇文章中講解nfs4_pnfs_get_layout()的執行過程,有些複雜,首先講講layout在MDS中的保存方式。MDS中有兩個數據結構跟layout相關,分別是struct nfs4_layout_state和struc

原创 數學函數庫(三)

    上一篇文章中我們以truncf()爲例講解了數學函數的處理過程,可以看出處理過程還是很麻煩的。而且需要注意的是我們挑選的是一個很簡單的函數,其他數學函數的處理過程更麻煩。因此一些處理器集成了浮點運算單元,通過硬件計算數學函數,從而

原创 dlmalloc(一)

        我們寫過很多C程序了,經常會分配內存。記得剛學C語言時老師說過,可以向兩個地方申請內存:一個是棧、一個是堆。小塊內存向棧申請,函數調用結束後程序會自動釋放內存。大塊內存向堆申請,記得一定要自己釋放,否則會造成內存泄漏。向堆

原创 排序算法

排序是計算機程序設計中的一項基礎操作,排序的作用是將一組無序的元素按照從小到大(或者從大到小)的順序排列成一組有序的元素。按照排序方法的不同,排序過程可以分成多種算法。 1.直接插入排序 直接插入排序是一種非常簡單的排序算法,基本操作是將

原创 字符串處理函數

這篇文章中我想討論下strlen()的問題。strlen()的作用是計算一個字符串的長度,最簡單的代碼如下: size_t strlen(const char *str) { const char *s;