FCoE模塊設計與實現


FCOE協議介紹

    太網光纖通道(FCoE)將FC幀映射並封裝到以太網幀中,從而使得光纖通道存儲流量能在太網上傳輸,加上FCoE交換機的支持,將以太網上IP數據和FC數據等其它數據流整合到統一網絡鏈路,構成一個融合網絡。


1背景

FCoE技術的背景:海量數據存儲


1.1存儲技術與海量數據存儲

本地存儲:直接連接存儲(Direct Attached StorageDAS),直接與主機服務器相連接,不足是:I/O操作需要佔據服務器大量的CPU時間來處理SCSI指令和數據塊,擴展性差。

網絡存儲:包括網絡附加存儲(Network Attached StorageNAS)和存儲區域網(Storage Area NetworkSAN

NAS是以太網上利用NFSNetwork File System),CIFSCommon Internet File System)等網絡文件系統對外提供訪問其文件系統接口的文件共享服務器

SAN採用集中式存儲策略,在服務器與存儲設備之間通過交換機進行連接,將多級存儲器合併成一個集中管理的網絡存儲基礎設備。擴展性好,並且易於管理。

所以,爲了實現海量數據存儲,SAN是較好的存儲技術。現在主要SAN架構有FC-SANIP-SAN,其中FC-SAN採用光纖通道協議,部署於高性能的數據中心。


1.2 FC協議


光纖通道FC作爲SAN的一項連接技術已經取得了成功。

FC是一種雙向、點到點、串行的數據通道,而FC協議定義了數據在網絡上傳輸規則。FC協議分層,由物理接口層、編碼層、網絡層、通用服務層和上層協議(Upper Layer ProtocolULP)映射層共五層構成。

如在FC-SAN中,將目標端系統的存儲設備掛載到發起端系統中,作爲一個塊設備進行訪問


2 FCoE目的

大方向:實現以太網融合,減少數據中心的網絡複雜度。

技術目標:融合傳統局域網和SAN,在高速以太網鏈路上傳輸IP幀和FC


3相關知識


3.1 SCSI系統

    SCSI是一組標準集,定義了與大量設備通信所需的接口和協議

SCSI上層接收來自上層(比如通用塊層,文件系統)的請求並將其轉換成SCSI請求,及負責完成SCSI命令並將狀態信息通知上層。

中間層是上層和底層的公共服務層。

底層是一組驅動器,稱爲SCSI底層驅動,可以與物理設備通信。


3.2塊設備和請求隊列

塊設備(Block Device)將信息存儲在固定大小的塊中,每個塊都有自己的地址,且每個塊都能獨立於其它塊進行讀寫,即具有隨機讀寫能力

一個塊設備驅動只有一個請求隊列(關於請求隊列,和應用程序的socket隊列或者Qdisc是否可以對比?點擊這裏,應該是和Qdisc更加有比較性),用於完成I/O請求的合併、調度和處理。請求隊列跟蹤未完成的塊設備I/O請求,保存了描述設備所能處理的請求的參數,比如最大I/O大小,段數目,硬件扇區大小和對齊需求。請求隊列具有I/O調度功能,通過I/O調度程序來實現


4 FCoE設計與實現


4.1總體功能設計

FCoE模塊是實現FCoE協議功能的總體模塊,包括

模塊加載/卸載

接口創建/銷燬

FCoE登陸

I/O通信

FCoE模塊作爲LINUX內核中SCSI系統的底層驅動模塊,連接SCSI系統和以太網系統,主要實現SCSI命令到FCoE幀的轉化、數據傳輸任務控制、協議註冊、FCoE模塊和以太網系統的通信。

總體結構如下,

如上圖,FCoE接口的創建成功,還需要完成FCoE登陸,遠程目標端SCSI設備的發現和在發起端創建目標端設備的設備文件(/dev/sdb)。

FCoE模塊具有用戶接口和內部接口。

用戶接口控制模塊加載/卸載,接口創建/銷燬,接口開啓/關閉等功能。

內部接口實現FCoE模塊和LINUX內核各系統或模塊交互。

如下,

FCoE模塊的協議處理依賴scsi_transport_fc模塊、libfc模塊和libfcoe模塊。

scsi_transport_fc模塊提供了SCSI系統與FC之間的接口。

libfc模塊提供了FC協議處理接口

Libfcoe模塊提供了FCoE協議處理接口,也爲FCoE模塊提供用戶接口


4.2功能模塊設計與實現


加載/卸載模塊

FCoE模塊的加載主要完成向FCoE TransportFC Tranport的添加,申請資源,創建內核線程,註冊通知鏈等。FCoE模塊的卸載主要完成運行期間建立資源的釋放(比如接口創建)和模塊加載資源的釋放

加載/卸載模塊的實現比較簡單。

接口創建

FCoE接口創建主要是完成FCoE接口結構(struct hust_interface)分配和初始化,及FIPFCoE協議註冊,接口創建成功後,會繼續完成登陸和設備發現等工作,通過調用用戶接口create來創建FCoE接口。FCoE接口創建的同時,需要創建對應的FC接口,FC接口是實現FC協議處理的關鍵

hust_fcoe_create是實現FCoE接口創建的函數(如圖)。hust_interface_lookup函數完成接口查詢,判斷某網卡接口是否已經創建FCoE接口,如果沒有創建則創建接口,否則返回。hust_inteface_create完成接口的實際創建工作,調用fcoe_ctlr_init完成FIPFCoE協議初始化和註冊,調用hust_interface_setup完成FCoE接口配置(如圖)。hust_fcoe_hardware_setup函數完成硬件配置工作,該函數開啓網卡的硬件卸載功能,可以更具不同的網卡類型配置不同的運行環境,比如開啓Intel網卡的DDPDirect Data Placement)功能。

接口銷燬

接口銷燬是接口創建的逆過程,但在接口銷燬前需要關閉接口和清除隊列中未完成的請求。網卡接口上已經創建對應的FCoE接口,可以調用用戶接口destroy來銷燬FCoE接口。hust_fcoe_destoryFCoE接口的銷燬函數,調用hust_if_destory_work完成FC接口銷燬

登陸

FCoE登陸主要完成發起端發現FCF,向FCF註冊和DNS註冊。

發起端可能與FCoE網絡的交換機連接或與目標端設備直連,發送FLOGI,根據ACCFLOGI)選擇方式建立和目標設備的連接。

如果發起端連接FCoE交換機,需要PLOGI登陸FCFDNS,在DNS註冊自己的端口信息,並獲得其它端口信息,完成DNS過程後,就可以向其它設備發送PLOGI請求

如果是目標端設備,還會建立進程通信和在發起端建立目標端設備文件。如果發起端直連目標端設備,則直接進行目標端的PLOGI和後續操作。如下,

IO模塊

    IO模塊完成FCoE協議處理,其中包含了SCSI命令(或數據)生成FC幀、FC幀到FCoE幀的映射、FCoE幀封裝到以太網幀和發送到以太網核心。

FCoE模塊需要結合SCSI系統,libFC模塊和以太網系統完成IO請求。發起端主要IO請求類型爲讀請求和寫請求。讀請求是發起端向目標端發送讀命令,目標端接收到命令後將數據發送給發起端。寫請求是發起端向目標端發送寫命令,目標端接收到命令後分配接收數據所需的內存並通知發起端,然後發起端將數據發送到目標端。

fc_queuecommandSCSI系統的接口函數,將SCSI請求發送到底層處理。



5效果

在發起端看來,訪問存儲區域網的設備就像訪問本地的塊設備一樣簡單高效!

以傳輸的角度看,光纖通道(FC)幀映射並封裝到以太網幀中,從而使得光纖通道存儲流量能在太網上傳輸。使得能在高速以太網鏈路上同時傳輸IP幀和FC

從數據中心角度,FCoE可以和數據中心現有的以太網及FC基礎設施無縫互通,將以太網上IP數據和FC數據等其它數據流整合到統一網絡鏈路,構成一個融合網絡

IT業界看來,FCoE爲存儲網絡流量提供統一交換網絡,更有效地利用資源、減少交換基礎設施、服務器的IO適配器和線纜的數量,從而大幅減少電力和冷卻成本。同時,簡化的基礎設施也能降低管理和運營開支。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章