無(wú)論是程序員,DBA還是網(wǎng)管,似乎所有的ITer都會(huì)遭遇同一問題:性能優(yōu)化。NAS從業(yè)者也不例外,而且NAS的問題更加棘手,因?yàn)樗婕暗膮f(xié)議和設(shè)備很多。本系列博文將從共享協(xié)議入手,再到網(wǎng)絡(luò),最后到NAS服務(wù)器本身,逐層分析NAS性能的影響因素。
NAS的共享協(xié)議,就是之前介紹過的NFS和CIFS。他們的讀寫方式總體相似,但是細(xì)節(jié)處又有不同。我們先來(lái)看CIFS(SMB)的工作方式。
當(dāng)我們?cè)赪indows Explorer上打開一個(gè)128KB的文件時(shí),底層的讀操作是這樣的:
1. 客戶端:我想讀某文件。
2. NAS: 你有權(quán)限,讀吧。
3. 客戶端:先讀64KB。
4. NAS:給你64KB。
5. 客戶端:再讀接下來(lái)的64KB。
6. NAS:給你64KB。
如果這個(gè)文件不只128KB,5和6就不斷重復(fù),直至整個(gè)文件讀完。在這個(gè)過程中,影響性能的因素有:
1. 客戶端總是在收到上一個(gè)讀請(qǐng)求的回復(fù)后,再發(fā)送下一個(gè)請(qǐng)求。這其實(shí)是一種低效率的工作方式。就像某人今晚想吃肯德基的雞翅和漢堡,他先叫雞翅外賣,等雞翅送達(dá)后,再叫漢堡外賣。合理的方式是雞翅和漢堡外賣一起叫。在讀文件時(shí)體現(xiàn)為:
1. 客戶端:我想讀某文件。
2. NAS: 你有權(quán)限,讀吧。
3. 客戶端:先讀64KB。
4. 客戶端:再讀接下來(lái)的64KB。
5. NAS:給你64KB。
6. NAS:給你64KB。
由于3和4(兩個(gè)請(qǐng)求),以及5和6(兩個(gè)回復(fù))可以接連發(fā)送,所以節(jié)省了往返時(shí)間(如下圖所示)。SMB2的讀操作就是以這種方式工作的。為了優(yōu)化性能,建議把Windows客戶端升級(jí)到Windows Vista或以上,然后啟用SMB2。
2. 客戶端每次讀的數(shù)據(jù)大小,也會(huì)影響到性能。在上面的例子中客戶端每次讀64KB,是一個(gè)比較好的數(shù)值。如果讀的值特別小(比如4KB),會(huì)增加讀操作和往返次數(shù),從而影響性能。這個(gè)值的大小是由客戶端和服務(wù)器協(xié)商決定的??蛻舳松贤耆Q于應(yīng)用程序,服務(wù)器上一般有設(shè)置選項(xiàng)。比如Windows服務(wù)器提供了SizReqBuf這個(gè)注冊(cè)表鍵值供用戶設(shè)置。
3. 另外一個(gè)性能影響因素是服務(wù)器的響應(yīng)時(shí)間。對(duì)于讀操作,最常用的優(yōu)化方式是啟用“prefetch”。即服務(wù)器在回復(fù)了前一個(gè)讀請(qǐng)求后,立即把接下來(lái)的數(shù)據(jù)從硬盤中讀出,等著回復(fù)下一個(gè)請(qǐng)求。
CIFS的寫操作和讀操作方式相似,對(duì)于相同點(diǎn)就不再贅述。不同點(diǎn)主要體現(xiàn)在響應(yīng)時(shí)間的優(yōu)化方式上。服務(wù)器為了優(yōu)化寫操作的響應(yīng)時(shí)間,一般采用write cache的方式。也就是服務(wù)器先把客戶端寫過來(lái)的數(shù)據(jù)存在cache里,然后向客戶端確認(rèn)。接下來(lái)再慢慢把cache里的數(shù)據(jù)刷進(jìn)磁盤。當(dāng)然這種方式存在一定的風(fēng)險(xiǎn),如果服務(wù)器突然斷電,cache里的數(shù)據(jù)就會(huì)丟失??蛻舳说膽?yīng)用程序可以啟用write throuth來(lái)避免write cache。
下面,我們?cè)倏纯碞FS的工作方式。
和CIFS不同,NFS共享在使用前需要掛載(mount)。掛載時(shí)使用的參數(shù)很大程度上影響了讀寫的性能。列舉如下:
1. UDP或TCP:在網(wǎng)絡(luò)非常穩(wěn)定的情況下,UDP理論上比TCP性能好一點(diǎn),因?yàn)閁DP包在協(xié)議上的消費(fèi)比例低。但是如果有網(wǎng)絡(luò)包丟失,TCP就顯示出優(yōu)勢(shì)。因?yàn)閁DP包丟失時(shí),整個(gè)讀/寫操作的所有包都要重傳;而TCP包丟失時(shí),只需重傳丟失的那個(gè)包即可。
2. rsize和wsize,每次讀寫的最大值。該值對(duì)性能的影響和CIFS的第二點(diǎn)是一樣的,所以不再贅述。
3. sync和async,sync意味著服務(wù)器需要把數(shù)據(jù)寫到磁盤再確認(rèn);async則意味著服務(wù)器可以把數(shù)據(jù)存到cache里就確認(rèn),然后再慢慢把cache里的數(shù)據(jù)刷進(jìn)磁盤。有一個(gè)經(jīng)常被忽視的嚴(yán)重問題:sync參數(shù)會(huì)強(qiáng)制wsize變成4KB,這會(huì)大大降低寫性能。
本文介紹的幾種優(yōu)化方式,比如啟用SMB2,增加rsize等,除了它們本身能優(yōu)化性能,還能提高傳輸層的性能,我們將在下一篇博文中詳細(xì)介紹這一點(diǎn)。
聯(lián)系客服