亚洲综合社区欧美综合色-欧美逼逼一区二区三区-国产老熟女高潮精品网站-国产日韩最新视频在线看

始創(chuàng)于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊(cè)有禮 登錄
  • 掛牌上市企業(yè)
  • 60秒人工響應(yīng)
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補(bǔ)償
全部產(chǎn)品
您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

Linux的高效的數(shù)據(jù)傳輸技術(shù)-Relay

發(fā)布時(shí)間:  2012/8/26 17:47:00
Relay 是一種從 Linux 內(nèi)核到用戶空間的高效數(shù)據(jù)傳輸技術(shù)。通過用戶定義的 relay 通道,內(nèi)核空間的程序能夠高效、可靠、便捷地將數(shù)據(jù)傳輸?shù)接脩艨臻g。Relay 特別適用于內(nèi)核空間有大量數(shù)據(jù)需要傳輸?shù)接脩艨臻g的情形,目前已經(jīng)廣泛應(yīng)用在內(nèi)核調(diào)試工具如 SystemTap中。本文介紹了 Relay 的歷史和原理,并且用一個(gè)簡(jiǎn)單的實(shí)例介紹了 Relay 的具體用法。

  Relay 要解決的問題

  對(duì)于任何在內(nèi)核工作的程序而言,如何把大量的調(diào)試信息從內(nèi)核空間傳輸?shù)接脩艨臻g都是一個(gè)大麻煩,對(duì)于運(yùn)行中的內(nèi)核更是如此。特別是對(duì)于哪些用于調(diào)試內(nèi)核性能的工具,更是如此。

  對(duì)于這種大量數(shù)據(jù)需要在內(nèi)核中緩存并傳輸?shù)接脩艨臻g需求,很多傳統(tǒng)的方法都已到達(dá)了極限,例如內(nèi)核程序員很熟悉的 printk() 調(diào)用。此外,如果不同的內(nèi)核子系統(tǒng)都開發(fā)自己的緩存和傳輸代碼,造成很大的代碼冗余,而且也帶來維護(hù)上的困難。

  這些,都要求開發(fā)一套能夠高效可靠地將數(shù)據(jù)從內(nèi)核空間轉(zhuǎn)發(fā)到用戶空間的系統(tǒng),而且這個(gè)系統(tǒng)應(yīng)該獨(dú)立于各個(gè)調(diào)試子系統(tǒng)。這樣就誕生了 RelayFS。

  Relay的發(fā)展歷史

  Relay 的前身是 RelayFS,即作為 Linux 的一個(gè)新型文件系統(tǒng)。2003年3月,RelayFS的第一個(gè)版本的代碼被開發(fā)出來,在7月14日,第一個(gè)針對(duì)2.6內(nèi)核的版本也開始提供下載。經(jīng)過廣泛的試用和改進(jìn),直到2005年9月,RelayFS才被加入mainline內(nèi)核(2.6.14)。同時(shí),RelayFS也被移植到2.4內(nèi)核中。在 2006年2月,從2.6.17開始,RelayFS不再作為單獨(dú)的文件系統(tǒng)存在,而是成為內(nèi)核的一部分。它的源碼也從fs/目錄下轉(zhuǎn)移到 kernel/relay.c中,名稱中也從RelayFS改成了Relay。

  RelayFS目前已經(jīng)被越來越多的內(nèi)核工具使用,包括內(nèi)核調(diào)試工具SystemTap、LTT,以及一些特殊的文件系統(tǒng)例如DebugFS。

  Relay的基本原理

  總的說來,Relay提供了一種機(jī)制,使得內(nèi)核空間的程序能夠通過用戶定義的relay通道(channel)將大量數(shù)據(jù)高效的傳輸?shù)接脩艨臻g。

  一個(gè)relay通道由一組和CPU一一對(duì)應(yīng)的內(nèi)核緩沖區(qū)組成。這些緩沖區(qū)又被稱為relay緩沖區(qū)(buffer),其中的每一個(gè)在用戶空間都用一個(gè)常規(guī)文件來表示,這被叫做relay文件(file)。內(nèi)核空間的用戶可以利用relay提供的API接口來寫入數(shù)據(jù),這些數(shù)據(jù)會(huì)被自動(dòng)的寫入當(dāng)前的 CPU id對(duì)應(yīng)的那個(gè)relay緩沖區(qū);同時(shí),這些緩沖區(qū)從用戶空間看來,是一組普通文件,可以直接使用read()進(jìn)行讀取,也可以使用mmap()進(jìn)行映射。Relay并不關(guān)心數(shù)據(jù)的格式和內(nèi)容,這些完全依賴于使用relay的用戶程序。Relay的目的是提供一個(gè)足夠簡(jiǎn)單的接口,從而使得基本操作盡可能的高效。

  Relay將數(shù)據(jù)的讀和寫分離,使得突發(fā)性大量數(shù)據(jù)寫入的時(shí)候,不需要受限于用戶空間相對(duì)較慢的讀取速度,從而大大提高了效率。Relay作為寫入和讀取的橋梁,也就是將內(nèi)核用戶寫入的數(shù)據(jù)緩存并轉(zhuǎn)發(fā)給用戶空間的程序。這種轉(zhuǎn)發(fā)機(jī)制也正是Relay這個(gè)名稱的由來。

  這里的relay通道由四個(gè)relay緩沖區(qū)(kbuf0到kbuf3)組成,分別對(duì)應(yīng)于系統(tǒng)中的cpu0到cpu1。每個(gè)CPU上的代碼調(diào)用relay_write()的時(shí)候?qū)?shù)據(jù)寫入自己對(duì)應(yīng)的relay緩沖區(qū)內(nèi)。每個(gè)relay緩沖區(qū)稱一個(gè)relay文件,即/cpu0到 /cpu3。當(dāng)文件系統(tǒng)被mount到/mnt/以后,這個(gè)relay文件就被映射成映射到用戶空間的地址空間。一旦數(shù)據(jù)可用,用戶程序就可以把它的數(shù)據(jù)讀出來寫入到硬盤上的文件中,即cpu0.out到cpu3.out。

  Relay的主要API

  前面提到的 relay_write() 就是 relay API 之一。除此以外,Relay 還提供了更多的 API來支持用戶程序完整的使用 relay。這些 API,主要按照面向用戶空間和面向內(nèi)核空間分為兩大類,下面我們來分別進(jìn)行介紹。

  面向用戶空間的 API

  這些 Relay 編程接口向用戶空間程序提供了訪問 relay 通道緩沖區(qū)數(shù)據(jù)的基本操作的入口,包括:

  ●open() - 允許用戶打開一個(gè)已經(jīng)存在的通道緩沖區(qū)。

  ●mmap() - 使通道緩沖區(qū)被映射到位于用戶空間的調(diào)用者的地址空間。要特別注意的是,我們不能僅對(duì)局部區(qū)域進(jìn)行映射。也就是說,必須映射整個(gè)緩沖區(qū)文件,其大小是 CPU的個(gè)數(shù)和單個(gè) CPU 緩沖區(qū)大小的乘積。

  ●read() - 讀取通道緩沖區(qū)的內(nèi)容。這些數(shù)據(jù)一旦被讀出,就意味著他們被用戶空間的程序消費(fèi)掉了,也就不能被之后的讀操作看到。

  ●sendfile() - 將數(shù)據(jù)從通道緩沖區(qū)傳輸?shù)揭粋(gè)輸出文件描述符。其中可能的填充字符會(huì)被自動(dòng)去掉,不會(huì)被用戶看到。

  ●poll() - 支持 POLLIN/POLLRDNORM/POLLERR 信號(hào)。每次子緩沖區(qū)的邊界被越過時(shí),等待著的用戶空間程序會(huì)得到通知。

  ●close() - 將通道緩沖區(qū)的引用數(shù)減1。當(dāng)引用數(shù)減為0時(shí),表明沒有進(jìn)程或者內(nèi)核用戶需要打開它,從而這個(gè)通道緩沖區(qū)被釋放。


本文出自:億恩科技【1tcdy.com】

服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營(yíng)性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營(yíng)性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營(yíng)性ICP/ISP證:贛B2-20080012
  • 服務(wù)器/云主機(jī) 24小時(shí)售后服務(wù)電話:0371-60135900
  • 虛擬主機(jī)/智能建站 24小時(shí)售后服務(wù)電話:0371-60135900
  • 專注服務(wù)器托管17年
    掃掃關(guān)注-微信公眾號(hào)
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號(hào)總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號(hào)
      1
     
     
     
     

    0371-60135900
    7*24小時(shí)客服服務(wù)熱線