干貨:如何正確描述存儲(chǔ)IO類型?

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

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

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

IO類型描述:

描述不同應(yīng)用的存儲(chǔ)IO類型之前,先要描述存儲(chǔ)中的定義IO的幾個(gè)術(shù)語:

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

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

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

應(yīng)用程序存儲(chǔ)IO類型:

11.jpg

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

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

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

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

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

讀 vs. 寫

應(yīng)用程序的讀寫請(qǐng)求必須量化,了解他們之間的比列,因?yàn)樽x寫對(duì)存儲(chǔ)系統(tǒng)的資源消耗是不通的。了解讀寫比率直接關(guān)系到如何應(yīng)用緩存、RAID類型等子系統(tǒng)的最佳實(shí)踐。寫通常需要比讀更多的資源,SSD的寫操作相對(duì)讀更是慢得多。

順序 vs. 隨機(jī)

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

大I/O vs. 小I/O

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

位置引用

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

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

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

多線程 vs. 單線程

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

THEEND

最新評(píng)論(評(píng)論僅代表用戶觀點(diǎn))

更多
暫無評(píng)論