1. 程式人生 > 實用技巧 >SSAN之VAAI特性功能實現剖析

SSAN之VAAI特性功能實現剖析

SSAN之VAAI特性功能實現剖析(本地轉載自:傳送連結)

1. VAAI特性簡介
VMware進行虛擬機器遷移克隆等操作時,都涉及到虛擬機器檔案的資料傳輸,傳統的資料管理過程如圖1所示。
步驟1,通過網路將資料從儲存陣列讀取到EXSI主機。
步驟2,資料處理。
步驟3,通過網路將資料重寫回儲存陣列。
一定數量VMware虛擬機器同時進行遷移、克隆等操作時,會出現網路頻寬消耗嚴重、CPU和記憶體資源大量佔用等問題。

圖1 VMware傳統資料管理示意圖

針對上述問題,VMware vSphere 5.0及以上版本推出VAAI儲存特性(VMware vSphere Storage APIs Array Integration,也稱為硬體加速)。VAAI工作是將VMware主機的儲存資料工作解除安裝到共享儲存陣列,這樣不僅可以減輕VMware主機CPU、記憶體的壓力,而且降低對網路資源的要求。VMware VAAI整合特性如下:

1、Full Copy,虛擬機器遷移、克隆場景,資料複製工作解除安裝到儲存陣列。
2、Block Zero,建立虛擬機器、格式化虛擬磁碟場景,大量塊置零工作解除安裝到儲存陣列。
3、Hardware-Assisted Locking(ATS),VMFS作為多主機共享的叢集檔案系統,通過鎖機制保障資料讀寫安全性。VMware通過ATS細化鎖粒度、縮小鎖範圍,提高VMFS的IO併發能力。
4、Thin Provisioning Unmap,儲存精簡配置場景下的空間回收,減少儲存空間的使用。

2 VAAI特性原理
VAAI工作是將VMware主機的儲存資料工作解除安裝到儲存陣列,本質是資料解除安裝,其解除安裝功能是嵌入到資料流的處理過程,而資料流走的是SCSI。因此,VAAI整合特性都是採用SCSI命令,更確切地說,都是走帶內SCSI命令,VAAI整合特性指令集如表1所示。

VAAI特性原理如圖2所示,其主要應用如下:
1. VMware作為儲存陣列的主機側,開啟VAAI後,上述VAAI特性的資料處理不再走傳統SCSI資料處理流程,而是走帶內SCSI資料處理流程。
2. SCSI命令經過iSCSI傳送到儲存陣列的SCSI Target Module,如果SCSI Target Module支援該SCSI命令,則會對該SCSI命令解析並執行相應操作,返回正確的執行結果給VMware;否則返回異常給VMware並告知VMware主機,儲存陣列不支援該SCSI命令對應的VAAI特性。
3. VMware主機接收相應的SCSI錯誤訊息,將會重啟傳統SCSI資料管理流程。以Full Copy為例,當VMware主機收到儲存陣列SCSI異常訊息,則採用傳統SCSI 資料處理流程,Full Copy會在VMware主機和儲存陣列多次SCSI命令互動,資料從儲存陣列讀取到主機,再從主機寫回儲存陣列。

圖2 VAAI特性原理圖

Full Copy工作原理是當VMware進行虛擬機器檔案複製或虛擬機器遷移時,把SCSI指令解除安裝到儲存陣列,讓儲存陣列在底層完成複製功能。


如圖3所示,Full Copy完全複製,VMware下發SCSI EXTENDED_COPY指令,該指令攜帶待複製資料的源、目的地址,待複製資料總空間。儲存陣列直接基於EXTENDED_COPY資訊進行資料複製操作,這樣避免VMware主機無效資料拷貝,減少IO路徑和網路負載,提高資料複製效率。

圖3 VAAI Full Copy原理圖

VMFS作為叢集檔案系統,在多個VMware主機共享訪問時,通過鎖機制來避免寫衝突。傳統的方式,主機側通過SCSI Reservation機制進行SCSI鎖操作,將整個虛擬磁碟(LUN)鎖定。其他主機向已鎖定的虛擬磁碟傳送寫操作,收到SCSI Reservation Conflict報錯資訊,這樣存在資料併發瓶頸,影響LUN使用率。

如圖4所示,VMware設計硬體輔助鎖機制,也稱為原子測試和設定 (ATS),支援離散虛擬機器鎖定。每次主機側寫虛擬磁碟(LUN),取代SCSI Reservation鎖機制對整個LUN鎖定,ATS縮小鎖機制的鎖定範圍,只針對寫的單個數據塊加鎖。從而縮小了鎖粒度,提高了VMFS系統的併發IO和讀寫效能。

圖4 VAAI ATS原理圖

傳統方式對虛擬磁碟格式化是通過VMware vSphere不斷以小塊形式傳送SCSI WRITE命令來實現,SCSI WRITE命令下發整個虛擬磁碟大小的零資料。

如圖5所示,支援VAAI Block Zero特性的儲存陣列,VMware vSphere通過下發WRITE_SAME的SCSI指令來進行虛擬磁碟格式化,該指令攜帶待格式化的資料範圍、資料模板,這樣避免下發大量置零資料。

圖5 VAAI Block Zero原理圖

Thin Provisioning Unmap主要是針對精簡配置的儲存陣列做空間回收,提高儲存空間使用效率,應用於刪除虛擬機器檔案的場景。VMware向儲存陣列傳送UNMAP的SCSI指令,儲存釋放相應空間。

3 VAAI特性實現
TaoCloud SSAN是典型的ServerSAN產品,遵循軟體定義儲存理念,可從X86伺服器硬體平臺的本地儲存資源中建立基於伺服器的SAN,以便按需提供具有彈性的、可擴充套件的儲存容量和效能。SSAN採用去中心化的全對等Share-nothing架構,融入Scale-out分散式塊儲存技術,快閃記憶體優化技術,超融合技術,安全加固技術,構建高效、可靠、智慧、彈性的儲存計算平臺。

3.1 SSAN超融合架構
TaoCloud SSAN可以很好地支援VMware vSphere虛擬化平臺,其超融合架構如圖6所示。
1. 每臺伺服器既是vSphere計算節點,又是TaoCloud SSAN儲存節點。
2. 每個VMware vSphere主機配置一個虛擬機器作為控制器(CVM),並將物理主機上的磁碟、網絡卡透傳給CVM。
3. CVM上部署TaoCloud SSAN超融合軟體,形成統一的儲存池。
4. TaoCloud SSAN為iSCSI Target Module提供SSAN Backing Store驅動,iSCSI Target Module支援標準iSCSI介面,對外提供塊儲存。

圖6 TaoCloud SSAN融合架構

3.2 基於SSAN的VAAI實現
結合iSCSI特性、VAAI特性原理及TaoCloud SSAN超融合架構,本章節描述基於SSAN的VAAI實現。VMware vSphere 5.0及以上版本支援VAAI儲存特性,這就要求SCSI Target Module支援VAAI SCSI Primary Command。TaoCloud SSAN 採用開源STGT、使用者態iSCSI Target Module。backing store支援SSAN,使其支援VAAI特性,其架構如圖7所示。
1. STGT中tgtd運用EPOLL機制實現與tgtadm、initiator的通訊,tgt負責處理tgtadm控制面、initiator資料面的請求。
2. iSCSI SPC協議支援VAAI 特性指令EXTENDED_COPY、WRITE_SAME_16、COMPARE_AND_WRITE、UNMAP。
3. STGT支援多種backing store後端儲存,Backing store註冊函式中實現VAAI儲存特性的資料處理。

圖7 STGT架構圖

3.2.1 SSAN Full Copy實現
SSAN Full Copy實現的本質是資料複製工作解除安裝到儲存陣列,在儲存陣列處理SCSI Primary Command,操作時序如圖8所示。其大致可分為iSCSI SPC協議對VAAI Full Copy的支援,VAAI Full Copy資料處理過程。

圖8 SSAN Full Copy時序圖

SPC-3協議文件指出“A Third-Party Copy(3PC) bit set to one indicates that the SCSI target device supports third-party copy commands such as the EXTENDED COPY command”,因此spc_inquiry函式對Standard INQUIRY data format(見圖9)第5個位元組中位元位3PC置1操作,保證iSCSI協議支援VAAI Full Copy。

圖 9 SPC-3 Standard INQUIRY data format

Full Copy資料處理部分對SCSI Primary Command指令0x84、0x83處理,receive_copy_result(0x84)用來處理指令0x83需要的協議欄位target_descriptors、segment_descriptors;Full Copy(0x83)解析協議欄位target_descriptors、segment_descriptors獲取資料複製所需源卷、目的卷的offset、size資訊,呼叫SSAN資料讀寫介面ssan_sd_io實現從源捲到目的卷的資料複製。基於開源分散式物件儲存系統SSAN,為保障資料的一致性,對介面ssan_sd_io進行了改進:寫操作同步更新inode資訊、讀寫一致性鎖。

3.2.2 SSAN Block Zero實現
支援VAAI Block Zero特性,解析WRITE_SAME_16獲取塊指令操作的卷的offset、size,呼叫SSAN介面CREATE_AND_WRITE_OBJ,建立SSAN物件並塊寫零操作,其時序如圖10所示。SSAN提供兩種方式以提高塊置零的效率。
1. 在WRITE_SAME_16指令相同塊數目num的情況下,增加捲的塊大小bs,以提高置零塊的總空間(bs*num)。
2. 考慮到WRITE_SAME_16指令塊地址的連續性和SSAN物件空間4M大小,處理多次WRITE_SAME_16指令請求的offset、size來構造大塊的資料寫零。

圖10 SSAN Block Zero時序圖

3.2.3 SSAN ATS實現
ATS機制本質就是縮小鎖機制的鎖定範圍,把ESXI對LUN鎖定解除安裝到儲存陣列小級別的塊鎖定。對有效資料塊,SSAN提供更小粒度的mutex鎖機制,利用互斥鎖機制,運用鎖鏈表保證資料塊的一致性。提供資料塊的鎖資訊結構體。
struct ats_range {
struct ats_range **pprev; // 用來維護鎖鏈表
struct ats_range *next; // 用來維護鎖鏈表
uint64_t offset; // 記錄塊偏移量
uint32_t lens; // 記錄塊長度
uint16_t blocked; // 記錄塊是否已加鎖
};
資料塊物件結構體
struct object {
struct object_info object; // 塊物件資訊
pthread_mutex_t ats_lock; // 塊物件鎖
struct ats_range *ats_io_list; // 鎖鏈表
};
SSAN ATS提供兩組鎖操作函式,用來對塊資料讀寫的鎖處理。資料讀寫操作前,ATS鎖操作函式ssan_handle_ats_before_io(),操作流程如下:
步驟1,獲取某次IO操作的offset、size並遍歷鎖鏈表;
步驟2,比較IO的offset、size與鎖鏈表資料塊物件中的offset、size,資料比較巨集定義:
#define is_overlapping(start1, len1, start2, len2) \
((start2) > (start1) ? ((start2) - (start1)) < (len1) : \
((start1) - (start2)) < (len2))
步驟3,若IO資料塊地址衝突,設定鎖鏈表中衝突資料塊的blocked為1;若IO資料塊地址不衝突,初始化IO鎖結構體並加入到鎖鏈表。
資料讀寫操作後,ATS鎖操作函式ssan_handle_ats_after_io(),釋放IO鎖結構體並根據blocked觸發執行緒訊號量。

3.2.4 SSAN UNMAP實現
對精簡配置的儲存陣列,SSAN採用socket C/S通訊模式實現VAAI UMAP,時序如圖11所示。
客戶端:解析UNMAP指令引數,獲取offset、size並更新inode;根據offset、size查詢對應的object ID(oid)。
服務端:根據oid查詢object,存在則remove oid對應的物件並更新inode。

圖11 SSAN UNMAP時序圖

4 VAAI特性小結
實測表明,TaoCloud SSAN儲存能夠良好的支援VMware VAAI儲存特性。

圖12 TaoCloud SSAN儲存支援VMware VAAI儲存特性

對比測試發現,基於VAAI Full Copy特性進行虛擬機器克隆速度提高近2倍,網路頻寬明顯增加。

圖13 VAAI Full Copy虛擬機器克隆對比測試

基於VAAI Block Zero特性建立厚置備置零的虛擬機器磁碟,其磁碟效能得到很大的提升。圖14表明,SSAN STGT支援VAAI Block Zero。

圖14 STGT WRITE_SAME_16操作日誌

對於精簡配置的儲存陣列,基於VAAI Unmap特性刪除資料時,儲存空間得到釋放,每秒查詢儲存空間使用情況。可以發現使用空間以2GB/s減少,Unmap很好地實現空間回收功能。

隨著VAAI的廣泛應用,更多的儲存廠商通過支援VMware VAAI儲存特性,減輕VMware主機CPU、記憶體壓力,降低對網路資源要求,提高VMFS的IO併發能力和效能。TaoCloud SSAN已實現對VAAI儲存特性的完美支援。