SCSI軟件層如何對性能造成影響
對于閃存存儲而言,一切都發(fā)生了變化,SSD的性能無論是帶寬還是IOPS都非常高,因此,存儲的性能瓶頸點從Disk端轉(zhuǎn)移到了CPU、OS以及網(wǎng)絡(luò)端。
在閃存存儲領(lǐng)域,我們可以看到無論在市場、客戶還是在研發(fā),大家都在支持NVMe標(biāo)準(zhǔn),其很重要的一個原因是傳統(tǒng)的SCSI已經(jīng)不能滿足性能需求,其變成了存儲系統(tǒng)的一個重要性能瓶頸點。從軟件層、傳輸協(xié)議效率、軟件接口標(biāo)準(zhǔn)、芯片接口、傳輸鏈路,傳統(tǒng)的SAS/SATA都存在很多不足的地方。今天存儲老吳和大家一起分享一下SAS/SATA接口在軟件層面的重要性能瓶頸點,從研發(fā)的角度來解釋為什么SCSI軟件層是一個重要的性能瓶頸點。
大家都比較清楚SCSI軟件層的組織結(jié)構(gòu),其主要由三大部分組成:
1, SCSI上層驅(qū)動層。這層驅(qū)動主要完成SCSI設(shè)備的功能,例如磁盤的驅(qū)動、Tape的驅(qū)動,CD-ROM的驅(qū)動都在這層實現(xiàn)。對于磁盤驅(qū)動,通常也被稱之為SD驅(qū)動,實現(xiàn)了一個塊設(shè)備功能。對上接入塊設(shè)備驅(qū)動層;對下和SCSI中間層對接。
2, SCSI中間層。中間層軟件主要完成SCSI命令的處理、出錯處理、超時處理等。中間層的上面是各個SCSI的功能驅(qū)動;下面是SCSI的底層驅(qū)動。
3, SCSI底層驅(qū)動。底層驅(qū)動實現(xiàn)了SCSI的數(shù)據(jù)傳輸和HBA的驅(qū)動。在底層可以實現(xiàn)ISCSI的發(fā)送器;可以模擬一個SCSI的HBA;當(dāng)然也可以實現(xiàn)LSI的HBA驅(qū)動程序,并通過DMA的方式將數(shù)據(jù)提交給實際的硬件板卡。
在傳統(tǒng)磁盤存儲中,性能瓶頸點在磁盤端。CPU處理器、NUMA體系架構(gòu)、軟件的并發(fā)性對存儲的性能影響幾乎為零。存儲老吳在07年研發(fā)Thin Provisioning邏輯卷系統(tǒng)的時候,試圖通過優(yōu)化鎖資源競爭來提升IO性能,結(jié)果是預(yù)料之中的徒勞。對于磁盤存儲來說,CPU性能一直是搓搓有余的。一個磁盤的IOPS最多只能跑到200,所以中斷對CPU來說也毫無壓力,在這種情況下,SCSI軟件層無論如何實現(xiàn)對性能基本是沒有影響的。所以,磁盤存儲是一個實實在在的IO Intensive應(yīng)用。
但是,對于閃存存儲而言,一切都發(fā)生了變化,SSD的性能無論是帶寬還是IOPS都非常高,因此,存儲的性能瓶頸點從Disk端轉(zhuǎn)移到了CPU、OS以及網(wǎng)絡(luò)端。在這種情況下,我們再來看一看SCSI的軟件棧。如下圖所示,每個SCSI設(shè)備只提供了一個請求隊列(request queue),那么無論系統(tǒng)中存在多少個處理線程,無論系統(tǒng)中存在多少個CPU核,所有的請求都會以競爭的方式入隊列。SCSI設(shè)備的請求隊列是系統(tǒng)的一個競爭資源。
對于SMP系統(tǒng)而言,競爭資源的處理都需要通過加鎖的方式來實現(xiàn)訪問。在Linux的實現(xiàn)中通過Spinlock的方式對請求隊列進行互斥保護。由于SSD性能非常高,所以系統(tǒng)中的CPU都在忙于請求的處理,這些忙碌的CPU最終都需要去競爭請求隊列鎖,將請求放入隊列。這種大量的競爭導(dǎo)致每個CPU的處理效率大為降低,大量時間處于自旋狀態(tài),等待獲取請求隊列鎖。從而使得整體IO處理的效率降低,存儲性能由于軟件上的限制而得不到提升。
針對這個問題,我們做過實際的測試,發(fā)現(xiàn)當(dāng)IO壓力上來之后,系統(tǒng)中的CPU絕大部分時間都處于自旋狀態(tài),都在競爭請求隊列的自旋鎖。所以,SCSI層的單請求隊列是一個嚴(yán)重的性能瓶頸點。
為了解決這個問題,Linux對SCSI的單隊列做了改進,引入了Multi-queue的方式。通過多隊列的方式可以減少、避免線程/CPU之間的競爭,可以充分發(fā)揮單個CPU處理IO的效率,從而整體提升IO處理的性能。SCSI引入多隊列之后的示意圖如下圖所示:
需要注意的是,在軟件上為每個SCSI設(shè)備引入多隊列之后,同樣需要在HBA端為軟件訪問提供多隊列支持,否則性能將會局限在HBA卡上。閃存存儲軟件的設(shè)計與實現(xiàn)和傳統(tǒng)存儲相比,不僅數(shù)據(jù)分布、數(shù)據(jù)的組織形式發(fā)生了變化;而且軟件的實現(xiàn)效率、CPU并發(fā)潛能的挖掘、計算機體系結(jié)構(gòu)的考慮都會變得尤其重要。所以,我一直認(rèn)為,閃存存儲不僅玩的是存儲技術(shù),而是高性能計算技術(shù)。