干貨:如何正確描述存儲IO類型?

架構師技術聯(lián)盟
EMC技術社區(qū)
存儲系統(tǒng)作為數(shù)據(jù)的載體,為前端的服務器和應用程序提供讀寫服務。存儲陣列某種意義上來說,是對應用服務器提供數(shù)據(jù)服務的后端“服務器”。應用服務器對存儲系統(tǒng)發(fā)送數(shù)據(jù)的“讀”和“寫”的請求。然而,不同的應用程序?qū)Υ鎯Φ臄?shù)據(jù)訪問類型有所不同。

存儲系統(tǒng)作為數(shù)據(jù)的載體,為前端的服務器和應用程序提供讀寫服務。存儲陣列某種意義上來說,是對應用服務器提供數(shù)據(jù)服務的后端“服務器”。應用服務器對存儲系統(tǒng)發(fā)送數(shù)據(jù)的“讀”和“寫”的請求。然而,不同的應用程序?qū)Υ鎯Φ臄?shù)據(jù)訪問類型有所不同。

本文描述典型的不同應用程序的存儲IO類型。幫助讀者了解不同應用程序存儲IO類型的同時,提供的數(shù)據(jù)也可以為存儲模擬和壓力測試的數(shù)據(jù)參考。

IO類型描述:

描述不同應用的存儲IO類型之前,先要描述存儲中的定義IO的幾個術語:

IO大?。↖O Size):IO Size是應用程序發(fā)起,經(jīng)過操作系統(tǒng)的磁盤子系統(tǒng),向存儲系統(tǒng)發(fā)送的讀寫請求的單位大小。不同的應用程序所發(fā)送的IO大小都不相同,例如對于數(shù)據(jù)庫應用,它在數(shù)據(jù)讀寫的時候IO Size是8KB,而在事務日志的寫入的時候可能是512Bytes-64KB不等。所以,通常所說的IO Size都是一個平均的概念。即某一款應用在一段時間內(nèi)的平均IO大小。

讀寫比例(Read/Write):讀寫比例比較容易理解,就是應用程序讀數(shù)據(jù)和寫數(shù)據(jù)分布。這個在規(guī)劃存儲的時候也至關重要,因為存儲系統(tǒng)中的保護級別(RAID)的不同,對寫有損失。例如RAID-5單次寫入需要分別對數(shù)據(jù)位和校驗位進行2次讀和2次寫。所以說,如果用RAID-5作為寫入比例較高的應用,顯然會對性能有很大影響。

順序與隨機讀寫比例(Random/Sequential):順序和隨機讀寫取決與應用的獲取數(shù)據(jù)的方式。通常情況下,如果數(shù)據(jù)的讀取和寫入是在連續(xù)的磁盤空間上,可以認為是順序讀寫。如果應用讀取的數(shù)據(jù)分布在不同磁盤空間,且無固定的順序,則視為隨機讀寫。由于傳統(tǒng)的機械磁盤(閃存盤不再討論之列)讀寫數(shù)據(jù)需要盤面的轉(zhuǎn)動和磁頭的移動,這使得隨機讀寫的效率在物理磁盤層面要遠小于順序讀寫。通常存儲系統(tǒng)都都會利用緩存來減少這部分的延遲,減緩因為磁頭的移動而帶來的性能損失。隨機讀寫的代表的是OLTP的數(shù)據(jù)庫文件,順序讀寫的代表則是數(shù)據(jù)的事務日志。

應用程序存儲IO類型:

11.jpg

下面的表中描述的不同的應用程序?qū)腎O大小、讀寫比例、隨機和順序比例。表中的比例為一個通用的參考值,比例接近真實各種應用的IO類型。當然不能包含全部的應用類型因為根據(jù)不同生產(chǎn)環(huán)境,數(shù)值也會有很大的差異。這里的數(shù)據(jù)提供一個參考,可以用于使用壓力測試工具,例如IOMeter,模擬不同應用的IO負載。

IOmeter是一款用于單系統(tǒng)和集群系統(tǒng)的I/O子系統(tǒng)度量(Measurement)和特征化(Characterization)工具,它是一個負載生成器(Workload Generator),也是一個度量工具(Measurement tool),可用于模擬任何程序或benchmark的磁盤或網(wǎng)絡I/O操作,在單個或多個(聯(lián)網(wǎng))系統(tǒng)上生成并度量負載。

IOmeter由兩個程序組成,Iometer和Dynamo。Iomter是控制程序/GUI,它告訴Dynamo需要做什么,收集數(shù)據(jù)結(jié)果并總結(jié)到一個輸出文件。一次只應該運行一個Iometer,通常運行在服務器上。

Dynamo是一個負載生成器,它沒有GUI,在Iometer的命令下執(zhí)行I/O操作并記錄性能信息,然后返回數(shù)據(jù)給Iometer。一次可以運行多個Dynamo,通常是一個副本運行在服務器上,另一個副本運行在每一臺客戶端上。Dynamo是多線程的,每一個副本可以模擬多個客戶端程序的工作(Workload),每一個正在運行的Dynamo副本被稱為是一個Manager,Dynamo中的每一個線程被稱為worker。

不同應用通常具有不同的I/O類型,了解應用的I/O類型是為其設計解決方案、排錯性能問題的首要工作。那I/O類型通常包括哪些需要考慮的因素?我們今天就來談一談I/O類型的幾個重要方面。

讀 vs. 寫

應用程序的讀寫請求必須量化,了解他們之間的比列,因為讀寫對存儲系統(tǒng)的資源消耗是不通的。了解讀寫比率直接關系到如何應用緩存、RAID類型等子系統(tǒng)的最佳實踐。寫通常需要比讀更多的資源,SSD的寫操作相對讀更是慢得多。

順序 vs. 隨機

傳統(tǒng)存儲系統(tǒng)通常都是機械硬盤,因此整個系統(tǒng)設計為盡可能順序化I/O,減少由于磁盤尋道所帶來的延遲。所以,順序I/O相對隨機I/O的性能會好很多。隨機小I/O消耗比順序大I/O更多的處理資源。隨機小I/O更在意系統(tǒng)處理I/O的數(shù)量,即IOPS;而順序大I/O則更在意帶寬,即MB/s。因此,如果系統(tǒng)承載了多種不同的應用,必須了解它們各自的需求,是對IOPS有要求,還是對帶寬有要求。這往往需要在兩種之間進行折衷考慮。閃盤是一個例外,它沒有機械尋道操作,因此對隨機小I/O的處理是非常迅速的,由此是讀操作。

大I/O vs. 小I/O

我們通常把<=16KB的I/O認為是小I/O,而>=32KB的I/O認為是大I/O。就單個I/O來講,大I/O從微觀的角度相比小I/O會需要更多處理資源,不過對于智能存儲系統(tǒng)來說,會盡可能把I/O整理為順序的,以單個操作執(zhí)行,如此依賴,將多個小I/O整理成單個大I/O處理后,反而會更快。I/O的大小依然取決于應用程序本身,了解I/O的大小,影響到后期對緩存、RAID類型、LUN的一些屬性的調(diào)優(yōu)。

位置引用

數(shù)據(jù)的位置分布影響到后期對二級緩存或存儲分層技術的應用,因為這些技術都會根據(jù)I/O的位置分布來判斷是否將I/O放置到緩存或快速的層級。位置引用是指那些被頻繁的存儲位置,我們通常認為最新創(chuàng)建的數(shù)據(jù)以及最近被訪問過的數(shù)據(jù),它們周圍的數(shù)據(jù)也同時被訪問的可能性會比較大。因此,了解應用程序的I/O位置特性,有助于應用正確的性能優(yōu)化技術。

穩(wěn)定 vs. 爆發(fā)

I/O數(shù)量在一天中的不同時段會有不同的表現(xiàn)。例如,早高峰時段的I/O數(shù)量相比下班后的I/O會多出許多。如果能準確預測和估計應用的I/O在不同時間段的穩(wěn)定性和爆發(fā)性,可以正確分配資源,提高資源利用率。在前期的設計階段,就應該考慮系統(tǒng)是否能夠處理I/O高峰期。

多線程 vs. 單線程

多線程是實現(xiàn)并發(fā)操作的一種方式,同時也意味著對存儲系統(tǒng)的資源消耗更多。這種高IOPS的請求方式,在有些情況下會造成磁盤繁忙,進而導致I/O排隊,增加了響應時間。因此,適度的調(diào)整線程數(shù)量,不僅可以實現(xiàn)并發(fā),而且能在不拖累整個存儲系統(tǒng)的情況下,達到最優(yōu)的響應時間。

THEEND

最新評論(評論僅代表用戶觀點)

更多
暫無評論