FCoE模块设计与实现
FCOE協(xié)議介紹
????太網(wǎng)光纖通道(FCoE)將FC幀映射并封裝到以太網(wǎng)幀中,從而使得光纖通道存儲流量能在太網(wǎng)上傳輸,加上FCoE交換機的支持,將以太網(wǎng)上IP數(shù)據(jù)和FC數(shù)據(jù)等其它數(shù)據(jù)流整合到統(tǒng)一網(wǎng)絡(luò)鏈路,構(gòu)成一個融合網(wǎng)絡(luò)。
1背景
FCoE技術(shù)的背景:海量數(shù)據(jù)存儲
1.1存儲技術(shù)與海量數(shù)據(jù)存儲
本地存儲:直接連接存儲(Direct?Attached?Storage,DAS),直接與主機服務(wù)器相連接,不足是:I/O操作需要占據(jù)服務(wù)器大量的CPU時間來處理SCSI指令和數(shù)據(jù)塊,擴展性差。
網(wǎng)絡(luò)存儲:包括網(wǎng)絡(luò)附加存儲(Network?Attached?Storage,NAS)和存儲區(qū)域網(wǎng)(Storage?Area?Network,SAN)。
NAS是以太網(wǎng)上利用NFS(Network?File?System),CIFS(Common?Internet?File?System)等網(wǎng)絡(luò)文件系統(tǒng)對外提供訪問其文件系統(tǒng)接口的文件共享服務(wù)器。
SAN采用集中式存儲策略,在服務(wù)器與存儲設(shè)備之間通過交換機進行連接,將多級存儲器合并成一個集中管理的網(wǎng)絡(luò)存儲基礎(chǔ)設(shè)備。擴展性好,并且易于管理。
所以,為了實現(xiàn)海量數(shù)據(jù)存儲,SAN是較好的存儲技術(shù)。現(xiàn)在主要SAN架構(gòu)有FC-SAN和IP-SAN,其中FC-SAN采用光纖通道協(xié)議,部署于高性能的數(shù)據(jù)中心。
1.2?FC協(xié)議
光纖通道FC作為SAN的一項連接技術(shù)已經(jīng)取得了成功。
FC是一種雙向、點到點、串行的數(shù)據(jù)通道,而FC協(xié)議定義了數(shù)據(jù)在網(wǎng)絡(luò)上傳輸規(guī)則。FC協(xié)議分層,由物理接口層、編碼層、網(wǎng)絡(luò)層、通用服務(wù)層和上層協(xié)議(Upper?Layer?Protocol,ULP)映射層共五層構(gòu)成。
如在FC-SAN中,將目標端系統(tǒng)的存儲設(shè)備掛載到發(fā)起端系統(tǒng)中,作為一個塊設(shè)備進行訪問。
2?FCoE目的
大方向:實現(xiàn)以太網(wǎng)融合,減少數(shù)據(jù)中心的網(wǎng)絡(luò)復(fù)雜度。
技術(shù)目標:融合傳統(tǒng)局域網(wǎng)和SAN,在高速以太網(wǎng)鏈路上傳輸IP幀和FC幀。
3相關(guān)知識
3.1?SCSI系統(tǒng)
????SCSI是一組標準集,定義了與大量設(shè)備通信所需的接口和協(xié)議。
SCSI上層接收來自上層(比如通用塊層,文件系統(tǒng))的請求并將其轉(zhuǎn)換成SCSI請求,及負責(zé)完成SCSI命令并將狀態(tài)信息通知上層。
中間層是上層和底層的公共服務(wù)層。
底層是一組驅(qū)動器,稱為SCSI底層驅(qū)動,可以與物理設(shè)備通信。
3.2塊設(shè)備和請求隊列
塊設(shè)備(Block?Device)將信息存儲在固定大小的塊中,每個塊都有自己的地址,且每個塊都能獨立于其它塊進行讀寫,即具有隨機讀寫能力。
一個塊設(shè)備驅(qū)動只有一個請求隊列(關(guān)于請求隊列,和應(yīng)用程序的socket隊列或者Qdisc是否可以對比?點擊這里,應(yīng)該是和Qdisc更加有比較性),用于完成I/O請求的合并、調(diào)度和處理。請求隊列跟蹤未完成的塊設(shè)備I/O請求,保存了描述設(shè)備所能處理的請求的參數(shù),比如最大I/O大小,段數(shù)目,硬件扇區(qū)大小和對齊需求。請求隊列具有I/O調(diào)度功能,通過I/O調(diào)度程序來實現(xiàn)。
4?FCoE設(shè)計與實現(xiàn)
4.1總體功能設(shè)計
FCoE模塊是實現(xiàn)FCoE協(xié)議功能的總體模塊,包括:
模塊加載/卸載
接口創(chuàng)建/銷毀
FCoE登陸
I/O通信
FCoE模塊作為LINUX內(nèi)核中SCSI系統(tǒng)的底層驅(qū)動模塊,連接SCSI系統(tǒng)和以太網(wǎng)系統(tǒng),主要實現(xiàn)SCSI命令到FCoE幀的轉(zhuǎn)化、數(shù)據(jù)傳輸任務(wù)控制、協(xié)議注冊、FCoE模塊和以太網(wǎng)系統(tǒng)的通信。
總體結(jié)構(gòu)如下,
如上圖,FCoE接口的創(chuàng)建成功,還需要完成FCoE登陸,遠程目標端SCSI設(shè)備的發(fā)現(xiàn)和在發(fā)起端創(chuàng)建目標端設(shè)備的設(shè)備文件(/dev/sdb)。
FCoE模塊具有用戶接口和內(nèi)部接口。
用戶接口控制模塊加載/卸載,接口創(chuàng)建/銷毀,接口開啟/關(guān)閉等功能。
內(nèi)部接口實現(xiàn)FCoE模塊和LINUX內(nèi)核各系統(tǒng)或模塊交互。
如下,
FCoE模塊的協(xié)議處理依賴scsi_transport_fc模塊、libfc模塊和libfcoe模塊。
scsi_transport_fc模塊提供了SCSI系統(tǒng)與FC之間的接口。
libfc模塊提供了FC協(xié)議處理接口。
Libfcoe模塊提供了FCoE協(xié)議處理接口,也為FCoE模塊提供用戶接口。
4.2功能模塊設(shè)計與實現(xiàn)
加載/卸載模塊
FCoE模塊的加載主要完成向FCoE?Transport和FC?Tranport的添加,申請資源,創(chuàng)建內(nèi)核線程,注冊通知鏈等。FCoE模塊的卸載主要完成運行期間建立資源的釋放(比如接口創(chuàng)建)和模塊加載資源的釋放。
加載/卸載模塊的實現(xiàn)比較簡單。
接口創(chuàng)建
FCoE接口創(chuàng)建主要是完成FCoE接口結(jié)構(gòu)(struct?hust_interface)分配和初始化,及FIP和FCoE協(xié)議注冊,接口創(chuàng)建成功后,會繼續(xù)完成登陸和設(shè)備發(fā)現(xiàn)等工作,通過調(diào)用用戶接口create來創(chuàng)建FCoE接口。FCoE接口創(chuàng)建的同時,需要創(chuàng)建對應(yīng)的FC接口,FC接口是實現(xiàn)FC協(xié)議處理的關(guān)鍵。
hust_fcoe_create是實現(xiàn)FCoE接口創(chuàng)建的函數(shù)(如圖)。hust_interface_lookup函數(shù)完成接口查詢,判斷某網(wǎng)卡接口是否已經(jīng)創(chuàng)建FCoE接口,如果沒有創(chuàng)建則創(chuàng)建接口,否則返回。hust_inteface_create完成接口的實際創(chuàng)建工作,調(diào)用fcoe_ctlr_init完成FIP和FCoE協(xié)議初始化和注冊,調(diào)用hust_interface_setup完成FCoE接口配置(如圖)。hust_fcoe_hardware_setup函數(shù)完成硬件配置工作,該函數(shù)開啟網(wǎng)卡的硬件卸載功能,可以更具不同的網(wǎng)卡類型配置不同的運行環(huán)境,比如開啟Intel網(wǎng)卡的DDP(Direct?Data?Placement)功能。
接口銷毀
接口銷毀是接口創(chuàng)建的逆過程,但在接口銷毀前需要關(guān)閉接口和清除隊列中未完成的請求。網(wǎng)卡接口上已經(jīng)創(chuàng)建對應(yīng)的FCoE接口,可以調(diào)用用戶接口destroy來銷毀FCoE接口。hust_fcoe_destory是FCoE接口的銷毀函數(shù),調(diào)用hust_if_destory_work完成FC接口銷毀。
登陸
FCoE登陸主要完成發(fā)起端發(fā)現(xiàn)FCF,向FCF注冊和DNS注冊。
發(fā)起端可能與FCoE網(wǎng)絡(luò)的交換機連接或與目標端設(shè)備直連,發(fā)送FLOGI,根據(jù)ACC(FLOGI)選擇方式建立和目標設(shè)備的連接。
如果發(fā)起端連接FCoE交換機,需要PLOGI登陸FCF的DNS,在DNS注冊自己的端口信息,并獲得其它端口信息,完成DNS過程后,就可以向其它設(shè)備發(fā)送PLOGI請求。
如果是目標端設(shè)備,還會建立進程通信和在發(fā)起端建立目標端設(shè)備文件。如果發(fā)起端直連目標端設(shè)備,則直接進行目標端的PLOGI和后續(xù)操作。如下,
IO模塊
????IO模塊完成FCoE協(xié)議處理,其中包含了SCSI命令(或數(shù)據(jù))生成FC幀、FC幀到FCoE幀的映射、FCoE幀封裝到以太網(wǎng)幀和發(fā)送到以太網(wǎng)核心。
FCoE模塊需要結(jié)合SCSI系統(tǒng),libFC模塊和以太網(wǎng)系統(tǒng)完成IO請求。發(fā)起端主要IO請求類型為讀請求和寫請求。讀請求是發(fā)起端向目標端發(fā)送讀命令,目標端接收到命令后將數(shù)據(jù)發(fā)送給發(fā)起端。寫請求是發(fā)起端向目標端發(fā)送寫命令,目標端接收到命令后分配接收數(shù)據(jù)所需的內(nèi)存并通知發(fā)起端,然后發(fā)起端將數(shù)據(jù)發(fā)送到目標端。
fc_queuecommand為SCSI系統(tǒng)的接口函數(shù),將SCSI請求發(fā)送到底層處理。
5效果
在發(fā)起端看來,訪問存儲區(qū)域網(wǎng)的設(shè)備就像訪問本地的塊設(shè)備一樣簡單高效!
以傳輸?shù)慕嵌瓤?#xff0c;光纖通道(FC)幀映射并封裝到以太網(wǎng)幀中,從而使得光纖通道存儲流量能在太網(wǎng)上傳輸。使得能在高速以太網(wǎng)鏈路上同時傳輸IP幀和FC幀。
從數(shù)據(jù)中心角度,FCoE可以和數(shù)據(jù)中心現(xiàn)有的以太網(wǎng)及FC基礎(chǔ)設(shè)施無縫互通,將以太網(wǎng)上IP數(shù)據(jù)和FC數(shù)據(jù)等其它數(shù)據(jù)流整合到統(tǒng)一網(wǎng)絡(luò)鏈路,構(gòu)成一個融合網(wǎng)絡(luò)。
在IT業(yè)界看來,FCoE為存儲網(wǎng)絡(luò)流量提供統(tǒng)一交換網(wǎng)絡(luò),更有效地利用資源、減少交換基礎(chǔ)設(shè)施、服務(wù)器的IO適配器和線纜的數(shù)量,從而大幅減少電力和冷卻成本。同時,簡化的基礎(chǔ)設(shè)施也能降低管理和運營開支。
總結(jié)
以上是生活随笔為你收集整理的FCoE模块设计与实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: th:if 多条件
- 下一篇: axios请求与proxy代理配置