linux I/O棧 之 SCSI TARGET (1) 基礎介紹
我們之前介紹了,linux I/O 棧的預習方面。簡單地瞭解了一下整個linux I/O 棧的組成。
從今天開始我們仔細介紹linux I/O棧的匯出I/O棧,linux I/O target。
一、基礎介紹
I/O匯出協議棧是什麼?
從廣義上講,大家每天可能都會去接觸這個東西。
比如:我們每天使用的行動硬碟,它的內部也是一個I/O匯出協議棧,但是由於它不涉及於I/O命令的解析,它僅僅是做了從SATA轉USB的工作。
其實硬碟本身也是一個I/O匯出的標準規範,它用的規範往往是在後端儲存協議實現(SAS 、SATA等)。
那麼我今天主要介紹的是前端匯出I/O協議棧,主要是包括:iscsi、fiber channel等大家比較常見的方式。
歷史上很多匯出I/O協議棧,如我最早接觸的IET(iSCSI Enterprise Target),他只能匯出iscsi target,還有SCST,他比較全面debug,很多hba板卡廠商推薦它。
我們重點介紹的是:linux 主線維護的LIO,也就是核心裡的target模組。
linux I/O target的架構是很清晰的,從最上層的管理由CLI實現。
CLI由/usr/lib/python3/dist-packages/rtslib_fb等支援。
rtslib_fb通過操作/sys/kernel/config/target目錄下面的目錄和檔案來建立target核心支援。
target在核心的configfs是一套比較複雜的程式碼,用來管理kernel裡的target的各個例項。
target core模組由核心實現,它主要是做SCSI CMD的模擬工作,能夠提供各樣先進的能力。
比如在cluster的角度,支援persistent reservations,ALUA(asymmetric logical unit assigntment),
REFERRALS特性,fence特性等。能夠實現高階VAAI特性,這主要用於vmware exsi。
這其中主要的SCSI命令unmap,zero,write same,xcopy等也可以適用於其他虛擬化儲存平臺。
儲存管理引擎包括:標準storage,記憶體map和RDMA等功能。
最下層的fabric mod主要是匯出協議驅動的支援。
storage mod,主要是提供backend的種類支援。