1. 程式人生 > >Glusterfs下讀寫請求的處理流程

Glusterfs下讀寫請求的處理流程

Glusterfs基於核心的fuse模組,fuse模組除了建立fuse檔案系統外,還提供了一個字元裝置(/dev/fuse),通過這個字元裝置,Glusterfs可以讀取請求,併發送響應,並且可以傳送notify訊息。

下面是在Glusterfs下的一個讀/寫請求的完整流程:

 

藍實線表示一個請求通過系統呼叫到VFS,然後經由Fuse封裝為一個req併發送到等待佇列,然後喚醒在該等待佇列上阻塞的Glusterfs讀程序,讀取請求

綠虛線表示Glusterfsd程序讀取請求後,處理請求的過程

紅虛線表示Glusterfs處理完請求後,封裝響應訊息並將訊息傳送到/dev/fuse下,並喚醒相應的請求程序(請求程序在將請求傳送後,一直阻塞,直到該請求收到響應並處理完成)。

請求程序被喚醒後,將Glusterfs封裝的響應資訊返回給使用者。

為方便說明問題,下圖是一個讀請求走到Fuse的完整流程:

下面是上面這些步驟的說明:

①read系統呼叫,陷入到核心 ②vfs通過fd及當前程序維護的開啟的檔案表找到fd對應的file,然後呼叫該file被賦值的read函式進行讀操作 ③因為該file是基於fuse檔案系統建立的,因此呼叫fuse的read函式do_sync_read ④-1.最終呼叫do_generic_file_read基於讀操作的偏移量及該檔案的快取樹查詢該對應的快取頁,該快取頁存在且是最新的,直接從該快取中讀資料給使用者 ④-2.如果該快取頁不存在,則申請一個頁作為快取。並呼叫readpage去讀資料。fuse的readpage會封裝一個請求到字元裝置的等待佇列中。收到glusterfs的響應後會將響應寫到快取中並返回

相關推薦

Glusterfs請求處理流程

Glusterfs基於核心的fuse模組,fuse模組除了建立fuse檔案系統外,還提供了一個字元裝置(/dev/fuse),通過這個字元裝置,Glusterfs可以讀取請求,併發送響應,並且可以傳送notify訊息。 下面是在Glusterfs下的一個讀/寫請求的完整流程

iSCSI 中 SCSI 請求處理分析

 iSCSI Initiator 是通過 SCSI Command PDU 向 Target 發出 SCSI 請求,Target 接收請求,執行 SCSI 命令,然後返回資料以及 SCSI 狀態。在 SCSI 任務執行時,Initiator/Target 之間會涉及大量資料

Tomcat 第五篇:請求處理流程

![](https://cdn.geekdigging.com/java/tomcat/tomcat_header.jpg) ## 1. 請求處理流程 AprEndPoint 順著上一篇接著聊,當一個請求傳送到 Tomcat 以後,會由聯結器 `Connector` 轉送至 `AprEndPoint` ,

UNICODE環境txt文件操作

clas c程序 delete tag 編碼 eno 字符編碼 empty readline 內容轉載自http://blog.sina.com.cn/s/blog_5d2bad130100t0x9.html UNICODE環境下讀寫txt文件操作 (2011-07

struts2的請求處理流程

tcl 客戶端 mes site 請求處理流程 ati dispatch 處理 處理流程 1.客戶端發送請求。2.經過一系列的過濾器(如:ActionContextCleanUp、SiteMesh等)到達核心控制器(FilterDispatcher)。3.核心控制器通過Ac

django源碼解析一(請求處理流程)

技術分享 ges order files 源碼 src esp 約束 sgi 1.我們都知道WSGI是一個規範,規範了server和application之間通信的一些約束,server端在監聽到請求之後,會把請求轉給application去處理,他們之間關聯起來的

redis 突然大量逐出導致請求block

服務 long 字節 tno 過程 aof 測試的 pull 文件 現象 redis作為緩存場景使用,內存耗盡時,突然出現大量的逐出,在這個逐出的過程中阻塞正常的讀寫請求,導致 redis 短時間不可用; 背景 redis 中的LRU是如何實現的? 當mem_used內存

.9-淺析express源碼之請求處理流程(2)

.exe 之前 信息 請求處理流程 log end doc 沒有 outer   上節漏了幾個地方沒有講。 1、process_params 2、trim_prefix 3、done   分別是動態路由,深層路由與最終回調。   這節就只講這三個地方,案例還是express

Nginx請求處理流程你瞭解嗎?

本文主要介紹了nginx的11個處理階段和lua的8個處理階段,並說明了nginx和lua執行階段的對應關係。 上篇文章回顧: Linux網路程式設計之IO模型 一、nginx 11 個處理階段 nginx實際把http請求處理流程劃分為了1

kafka叢集Broker端基於Reactor模式請求處理流程深入剖析-kafka商業環境實戰

本套技術專欄是作者(秦凱新)平時工作的總結和昇華,通過從真實商業環境抽取案例進行總結和分享,並給出商業應用的調優建議和叢集環境容量規劃等內容,請持續關注本套部落格。期待加入IOT時代最具戰鬥力的團隊。QQ郵箱地址:[email protected],如有任何學術交流,可隨時聯絡。

Linux學習筆記-Linux檔案

在Linux程式設計需要讀寫檔案時,有兩種方式: (1)ANSIC: 使用stdio.h裡的函式。fopen, fclose, fwrite, fread (2)Linux API:Linux提供了另外一套API用於操作檔案。open, clos

hdfs中namenode及DataNode,源資料資訊,檔案的流程

客戶端呼叫create()來建立檔案 DistributedFileSystem用RPC呼叫元資料節點,在檔案系統的名稱空間中建立一個新的檔案。 元資料節點首先確定檔案原來不存在,並且客戶端有建立檔案的許可權,然後建立新檔案。 DistributedFileSystem返回DFSOutputStream

QtXML格式檔案(使用QDomDocument類)

簡述 XML是一種標記語言,被設計用來結構化儲存以及傳輸資訊,是一種常用的文件資料結構。 就我個人而言,Qt下讀寫XML格式檔案可以有三種方法: 一是使用純C++的rapidxml開源庫。優點是速度快,媲美strlen()的速度;缺點是處理中文比較麻煩,編碼只有ANSI格式。 二是使用Q

MFC在Unicode字符集ANSI編碼檔案

讀取ANSI編碼檔案時,先將檔案儲存在char*指向的記憶體內,而後使用轉換將char*轉換為w_char_t*。wchar_t*可以使用CString的 Format函式。 CFile file(_T("test.txt"), CFile::modeRead);//讀ANSI編碼的檔案 i

ASP.NET的MVC請求處理流程

使用者開啟瀏覽器,在位址列輸入某個網址的URL並回車,瀏覽器便開始像該URL指定的伺服器發起HTTP請求 伺服器的網站服務系統(IIS)接收到該請求,先檢查自己是否認識該類請求,如果認識就直接

Tomcat和SpringMVC結果梳理和請求處理流程小結

頂層結構 最頂層是Server,由Catalina管理,包含load,start,stop用來管理整個伺服器的生命週期 一個Server包含多個Service Service主要包含兩部分:Connector和Container,一個Service只有一個Cont

Play框架的請求處理流程1

Play框架使用事件驅動模型,以提供在不可預知的使用環境下的靈活的處理能力。 在一個web應用中,事件主要指使用者向伺服器發起一次HTTP請求。對於Play框架,此類事件定義在routes檔案中,play根據routes檔案的內容以及使用者的請求,確定應該呼叫哪些過程。Pl

Spring MVC請求處理流程及架構

protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception { HttpServletRequest processedRequest = request; H

Spark -14:spark Hadoop 高可用模式hdfs

  第一種,通過配置檔案   val sc = new SparkContext()     sc.hadoopConfiguration.set("fs.defaultFS", "hdfs://cl

Mac NTFS檔案

Mac OS 版本:10.11.16  (OS X EI Capitan) 文章末尾附上小白使用使用方式 1、首先插入需要寫入檔案的NTFS格式的U盤或行動硬碟 2、開啟終端,然後執行以下命令,會提示輸入密碼,輸入當前登入賬號的密碼即可,如果不行請輸入root賬號的