1. 程式人生 > >為何測試時性能吊炸天而上線卻慘不忍睹?

為何測試時性能吊炸天而上線卻慘不忍睹?

批量 吞吐量 io處理 ops 套路 12g raid 隨機 上線

轉自:冬瓜哥

為何測試時性能吊炸天而上線卻慘不忍睹?

無數次,讓各個存儲廠商的售前、售後、架構師頭痛的一件事情就是:明明前期測試的時候性能強悍到報表,SPC1之流登頂,結果用戶實際業務部署之後發現,性能慘不忍睹。廠商出動頂級架構師優化,結果還是不行,無力回天,甚至直接退貨。

到底是什麽原因導致這類事件?可以明確的講,90%以上的原因就是因為兩個字:時延。縱觀性能測試,哪個不是“提高隊列深度”、“增加線程數量”。具體體現為IO測試軟件裏的諸如“Outstanding IO Depth”或者“Queue Depth”以及“Job Quantity”、“Woker Quantity”等類似參數。測試人員往往把這些值加高,其作用就是充分利用系統IO路徑上各處的並發度。正如上文中所說,如果IO測試軟件每次就發送一個IO就等在那,那麽性能就是慘不忍睹。這些參數恰恰就是讓IO測試軟件采用異步IO的方式來發送IO,批量下發大量IO,一下子把IO路徑上各處的隊列壓滿,底層的並發度自然就能夠利用起來。同理,那些業界拼性能的公開測試,套路都一樣,就是增加並發度。冬瓜哥看來,這毫無意義,這就像弄它一萬臺爛機器,每臺機器只跑1000的IOPS,那麽整個系統的IOPS就是一千萬一樣滑稽。松耦合,高並發,測出來的性能當然吊炸天了,不僅炸了天,只要願意,砸足夠的錢,宇宙都可以無敵。

那麽,現實中的各類應用系統,比如數據庫、ERP、OA等等傳統企業常用的系統,他們的IO Style是什麽樣子?我們往往都在說“OLTP”、“OLAP”,這是前人們對傳統IT業務的分類,這個分類今天依然適用。OLTP就是所謂Online Transaction Processing”在線交易類,此處的“交易”並不是指狹義的拿錢買東西的交易,而是指一種“有人在焦急的等待恨不得馬上返回狀態”的業務,比如數據庫查詢、更新,網上購物,網聊等,都算OLTP場景,也就是實時性很強的場景;而OLAP中的A就表示Analysis,在線分析類,比如“計算一下本季度銷售數據出n個報表並根據某模型預測下一季度銷售額”該類業務場景並不要求實時性,也很難做到實時性,其需要讀入大量數據做運算,有些甚至需要十幾個小時的運行時間,基本快有點超算的意思了,該類場景有個時尚點的詞叫做“大數據分析”。

可以很明顯的看到,OLTP業務對IO的要求是時延和吞吐量兼具,而OLAP場景一般只要求吞吐量。同時,OLTP類業務發出同步模式的IO的比例遠高於OLAP類業務,因為實時性場景下,很多時候必須一步一步的來,比如點擊購買按鈕,付款後,才能走下一步,沒有任何電商為了實現批量下發IO獲得高吞吐量而在你點擊購買按鈕之後不等你付款就直接讓商家打包包裹去了。同步IO是最難優化的IO場景。一般都是OLTP類業務會遇到性能問題,就是因為其對時延有要求,自己還時不時就發送同步IO。

咋辦?既然原因找到了,就是同步IO唄,那麽同步IO最怕的就是時延大,所以提升同步IO場景的性能,唯有降低IO路徑時延,別無他法。怎麽降低時延?什麽諸如“虛擬化網關”之類,如果非常在乎性能,那趁早別用;LVM?如果不是極度要求管理便捷性,也不要用;軟Raid?這東西增加的時延筆虛擬化網關和LVM都高,趁早也不要用;虛擬機?也增加時延。多路徑軟件?也增加時延;走網絡交換機訪問存儲系統?改用點對點直連,也能節省幾百納秒的時延。反正你就看吧,IO路徑上能砍掉的全砍掉。再不行,就得使用戶態驅動的模式,把IO直接在用戶天下發給HBA,但是這個不是一般人能玩的,只有一些專用系統可能這樣去玩。

瘋了!都砍掉了,代價必然是管理便捷性越來越差。是的,就看你要性能還是管理性了。這還沒完呢!還有一招更狠的,把外部存儲系統直接砍掉把!啥?外部存儲系統也增加IO時延了?是的,在緩存不命中的時候,其時延比單盤還要高。我……,沒道理把?

來,冬瓜哥給你講講。服務器拿什麽連接到磁盤的?HBA啊。接本地磁盤一般用什麽HBA?SASHBA啊!SAS HBA速率是多少?12Gbx4=48Gb/s啊!好,那麽接外置存儲系統用什麽HBA?一般是FC HBA啊,速率16Gb/s。好,那麽SAS HBA是不是直接接磁盤了,而FC HBA還要至少經過下面這些角色才能到磁盤:FC交換機、外置存儲系統控制器(本質上就是服務器)前端HBA、控制器OS內核、控制器上的數據緩存(就是DDR RAM)、用戶態/內核態IO處理程序、後端HBA、JBOD上的SAS Expander、SAS磁盤。哎呦我……,說的連我自己都怕了,一筆IO請求在不命中存儲系統緩存的情況下,後面還要經歷這麽多角色,時延能不大麽?反觀本地盤場景下,IO直接從SAS HBA控制器到SAS盤了,就一跳,時延當然低了!原來如此,SAS HBA+本地盤的方式,在吞吐量上當然比不了動輒上千塊盤的外置存儲系統,但是時延上絕對是有優勢的(相比外置存儲系統緩存不命中前提下,命中則沒有優勢)。那麽在隨機讀場景下,緩存命中率非常低,這麽說SAS HBA+本地盤的方式的優勢會顯現的更加明顯了?是的。所以冬瓜哥說,不行可以考慮直接砍掉外置存儲系統。額,呵呵。酸爽不?

最狠的,當然,就是直接上存儲領域的核武,終極大法:SSD!果不其然,爽了。

為何測試時性能吊炸天而上線卻慘不忍睹?