SCSI軟體層對效能的影響

2021-09-05 03:56:16 字數 2646 閱讀 7033

在快閃儲存器儲存領域,我們可以看到無論在市場、客戶還是在研發,大家都在支援

nvme

標準,其很重要的乙個原因是傳統的

scsi

已經不能滿足效能需求,其變成了儲存系統的乙個重要效能瓶頸點。從軟體層、傳輸協議效率、軟體介面標準、晶元介面、傳輸鏈路,傳統的

sas/sata

都存在很多不足的地方。今天儲存老吳和大家一起分享一下

sas/sata

介面在軟體層面的重要效能瓶頸點,從研發的角度來解釋為什麼

scsi

軟體層是乙個重要的效能瓶頸點。

大家都比較清楚

scsi

軟體層的組織結構,其主要由三大部分組成:

1, scsi

上層驅動層。這層驅動主要完成

scsi

裝置的功能,例如磁碟的驅動、

tape

的驅動,

cd-rom

的驅動都在這層實現。對於磁碟驅動,通常也被稱之為

sd驅動,實現了乙個塊裝置功能。對上接入塊裝置驅動層;對下和

scsi

中間層對接。

2, scsi

中間層。中間層軟體主要完成

scsi

命令的處理、出錯處理、超時處理等。中間層的上面是各個

scsi

的功能驅動;下面是

scsi

的底層驅動。

3, scsi

底層驅動。底層驅動實現了

scsi

的資料傳輸和

hba的驅動。在底層可以實現

iscsi

的傳送器;可以模擬乙個

scsi

的hba

;當然也可以實現

lsi的

hba驅動程式,並通過

dma的方式將資料提交給實際的硬體板卡。

在傳統磁碟儲存中,效能瓶頸點在磁碟端。

cpu處理器、

numa

體系架構、軟體的併發性對儲存的效能影響幾乎為零。儲存老吳在

07年研發

thin provisioning

邏輯卷系統的時候,試圖通過優化鎖資源競爭來提公升

io效能,結果是預料之中的徒勞。對於磁碟儲存來說,

cpu效能一直是搓搓有餘的。乙個磁碟的

iops

最多只能跑到

200,所以中斷對

cpu來說也毫無壓力,在這種情況下,

scsi

軟體層無論如何實現對效能基本是沒有影響的。所以,磁碟儲存是乙個實實在在的

io intensive

應用。

但是,對於快閃儲存器儲存而言,一切都發生了變化,

ssd的效能無論是頻寬還是

iops

都非常高,因此,儲存的效能瓶頸點從

disk

端轉移到了

cpu、

os以及網路端。在這種情況下,我們再來看一看

scsi

的軟體棧。如下圖所示,每個

scsi

裝置只提供了乙個請求佇列(

request queue

),那麼無論系統中存在多少個處理執行緒,無論系統中存在多少個

cpu核,所有的請求都會以競爭的方式入佇列。

scsi

裝置的請求佇列是系統的乙個競爭資源。

smp系統而言,競爭資源的處理都需要通過加鎖的方式來實現訪問。在

linux

的實現中通過

spinlock

的方式對請求佇列進行互斥保護。由於

ssd效能非常高,所以系統中的

cpu都在忙於請求的處理,這些忙碌的

cpu最終都需要去競爭請求佇列鎖,將請求放入佇列。這種大量的競爭導致每個

cpu的處理效率大為降低,大量時間處於自旋狀態,等待獲取請求佇列鎖。從而使得整體

io處理的效率降低,儲存效能由於軟體上的限制而得不到提公升。

針對這個問題,我們做過實際的測試,發現當

io壓力上來之後,系統中的

cpu絕大部分時間都處於自旋狀態,都在競爭請求佇列的自旋鎖。所以,

scsi

層的單請求佇列是乙個嚴重的效能瓶頸點。

為了解決這個問題,

linux

對scsi

的單佇列做了改進,引入了

multi-queue

的方式。通過多佇列的方式可以減少、避免執行緒

/cpu

之間的競爭,可以充分發揮單個

cpu處理

io的效率,從而整體提公升

io處理的效能。

scsi

引入多佇列之後的示意圖如下圖所示:

需要注意的是,在軟體上為每個

scsi

裝置引入多佇列之後,同樣需要在

hba端為軟體訪問提供多佇列支援,否則效能將會侷限在

hba卡上。快閃儲存器儲存軟體的設計與實現和傳統儲存相比,不僅資料分布、資料的組織形式發生了變化;而且軟體的實現效率、

cpu併發潛能的挖掘、計算機體系結構的考慮都會變得尤其重要。所以,我一直認為,快閃儲存器儲存不僅玩的是儲存技術,而是高效能計算技術。

synchronized 對效能的影響

public static void main string args throws exception runnable run2 new runnable runnable run3 new runnable runnable run4 new runnable newthread run1 s...

影響軟體效能的因素

軟體效能是軟體的一種非功能特性,它關注的不是軟體是否能夠完成特定的功能,而是在完成該功能時展示出來的及時性。由於感受軟體效能的主體是人,不同的人對於同樣的軟體能有不同的主觀感受,而且不同的人對於軟體效能關心的視角也不同。目前,大部分系統都是為多使用者 跨地域 多部門機構提供服務的,目前一般中小企業的...

繫結變數對效能的影響

使用繫結變數對效能的影響,oracle 程式設計入門經典 beginning oracle programming 中的例子 sql alter system flush shared pool sql set serveroutput on declare l start number l cnt...