Lustre I/O性能特色與最佳實踐

1 Lustre概述
Lustre是面向集羣的存儲架構,它是基於Linux平臺的開源集羣(並行)文件系統,提供與POSIX兼容的文件系統接口。Lustre兩個最大特徵是高擴展性和高性能,可以支持數萬客戶端系統、PB級存儲容量、數百GB的聚合I/O吞吐量。Lustre是Scale-Out存儲架構,藉助強大的橫向擴展能力,經過增長服務器便可方便擴展系統總存儲容量和性能。Lustre的集羣和並行架構,很是適合衆多客戶端併發進行大文件讀寫的場合,但目前對於小文件應用很是不適用,尤爲是海量小文件應用LOSF(Lots Of Small Files)。Lustre普遍應用於各類環境,目前部署最多的爲高性能計算HPC,世界超級計算機TOP 10中的70%,TOP 30中的50%,TOP 100中的40%均部署了Lustre。另外,Lustre在石油、自然氣、製造、富媒體、金融等行業領域也被大量部署應用。html

 

2 Lustre Stripe
Lustre採用對象存儲技術,將大文件分片並以相似RAID0的方式分散存儲在多個OST上,一個文件對應多個OST上的對象。Lustre系統中,每一個文件對應MDT上的一個元數據文件,inode以擴展屬性記錄了數據分片佈局信息,包括stripe_count(對象數), stripe_size(分片大小), stripe_offset(起始OST)以及每一個OST對象信息。當客戶數據端訪問文件時,首先從MDS請求文件元數據並得到分片佈局信息(stripe layout),而後直接與多個OST同時交互進行併發讀寫。Lustre這種數據分片策略,提升了多用戶訪問的併發度和聚合I/O帶寬,這是Lustre得到高性能的主要因素。再者,Stripe還可以使得Lustre能夠存儲超大文件,突破單一OST對文件大小的限制。固然,數據分片策略同時也會帶來負面影響,好比增長系統負載和數據風險。node

 

Lustre的OST數量能夠達到數千,可是出於複雜性、性能、實際存儲需求等考慮,目前設計實現中將單個文件對象數限制爲160個。對於EXT4後端文件系統,單個文件最大可達2TB,所以Lustre單個文件最大能夠達到320TB。那麼,Lustre如何在可用OST集合中選擇合適的OST呢?目前有兩種選擇算法,即Round-Robin和隨機加權算法,這兩種算法調度的依據是,任意兩個OST剩餘存儲容量相差是否超過20%的閾值。通常在系統使用之初,直接使用Round-Robin算法以順序輪轉方式選擇OST,這種算法很是高效。隨着文件數據量的增長,一旦達到20%的閾值,Lustre將啓用隨機加權算法選擇OST。Lustre維護着一個剩餘空間的優先列表,採用隨機算法在此列表中選擇OST,這種算法會產生開銷並影響性能。若是任意兩個OST剩餘存儲容量相差從新降到20%閾值以內,則從新啓用Round-Robin算法選擇OST。Lustre在建立文件時就按照分片模式並採用OST選擇算法,預先建立好文件所需的OST對象。分片模式可使用lfs setstripe進行設置,或者由系統自動選擇缺省模式,文件目錄會自動繼承父目錄的分片模式,但能夠進行修改。數據寫入後,文件分片模式就不能修改,新加入的OST只會參與新建立的文件目錄OST選擇調度。Lustre目前尚未實現OST存儲空間的自動均衡,須要手工進行數據遷移複製達到均衡的效果。算法

 

Lustre缺省狀況下,stripe_count = 1, stripe_size = 1MB, stripe_offset = -1,即每一個文件僅包含一個OST對象,分片大小爲1MB,起始OST由Lustre自動選擇。實際上這種分片模式就是不對文件進行分片存儲,顯然不能知足許多應用的存儲需求,實際應用時須要在分析數據特色、網絡環境、訪問行爲的基礎上進行適當配置。分片不是越多越好,在知足存儲需求的前提下,應該使得OST對象數量儘量少。應用lustre Stripe時,應該考慮以下因素:
(1)提供高帶寬訪問。Lustre文件分片並存儲於多個OSS,對於單一大文件來講,它能夠提供遠大於單一OSS提供的聚合I/O帶寬。在HPC環境中,成百上千的客戶端會同時併發讀寫同一個文件,當文件很大時,分散與多個OSS可以得到很是高的聚合帶寬。Lustre文件系統理論上能夠提供2.5 TB/s的帶寬,通過驗證的帶寬達到240 GB/s。固然對於小於1GB的文件來講,分片數量不宜多於4個,更多分片不會帶來更高的性能提高,還會引入額外開銷。對於小文件,文件大小自己可能小於分片大小,其實是不做分片,對性能不會有提高。
(2)改善性能。若是聚合的客戶端帶寬超過單個OSS的帶寬,文件分片存儲策略能夠充分利用聚合的OSS帶寬,極大提升性能,爲應用程序提供高速的數據讀寫訪問。合理的分片數量能夠估算,客戶端聚合I/O帶寬除以單個OSS I/O性能便可獲得。
(3)提供超大容量文件。Lustre後端文件系統採用改進的EXT3文件系統(接近於EXT4),單個文件最大爲2TB。若是不進行分片,則單個Lustre文件最大隻能爲2TB。Lustre目前分片最多可達到160個,所以文件最大能夠達到320TB,這是容量是很是大的,基本上能夠知足全部單一文件存儲容量的需求。
(4)提升存儲空間利用率。當Lustre剩餘存儲空間有限時,每一個OSS的剩餘空間也就更加有限,這時再寫入一個的大文件至單一OSS很大可能會因爲空間不足而失敗。採用分片策略,寫入單個OSS的對象容量會成倍減少,若是OSS數量選擇合適,文件仍然能夠寫入Lustre系統。這使得Lustre存儲空間利用更爲充分,有效提升了利用率。
(5)增長負載。Stripe會致使額外的鎖和網絡操做消耗,好比stat, unlink,雖然這些操做能夠併發執行,但仍會對性能產生影響。另外,分片多會形成服務器的開銷。設想這樣一個情形:Lustre中有100個OSS,100個客戶端,100個文件,每一個客戶端訪問一個文件。若是不分片,則每一個客戶端僅與一個OSS相互,能夠進行順序I/O讀寫。若是每一個文件分紅100片,則每一個客戶端都須要分別與100個OSS進行相交,併發訪問時,OSS上的磁盤I/O爲隨機讀寫。這些都是額外的負載開銷,必定程度上影響性能。
(6)增長風險。從機率的角度看,多個OSS發生故障的機率要高出單個OSS許多。文件分片存儲於多個OSS上,一個分片不可用就會致使整個文件不可訪問,即便其餘分片仍然是無缺的。所以,分片大大增長了數據發生丟失的風險,須要採用適當的措施進行保護,好比RAID5/6或者Failover。後端

 

3 Lustre I/O性能特徵緩存

(1)寫性能優於讀性能
Lustre系統中一般寫性能會優於讀性能。首先,對於寫操做,客戶端是以異步方式執行的,RPC調用分配以及寫入磁盤順序按到達順序執行,能夠實現聚合寫以提升效率。而對於讀,請求可能以不一樣的順序來自多個客戶端,須要大量的磁盤seek與read操做,顯著影響吞吐量。其次,目前Lustre沒有實現OST read cache,僅僅在客戶端實現了Readahead。這樣的設計也是有充分理由的,每一個OST有可能會有大量客戶端併發訪問,若是進行數據預讀,內存消耗將會很是大,並且這個是不可控制的。Writecache是在客戶端上實現的,內存佔用不會太大而且是可控的。再者,對於TCP/IP網絡而言,讀會佔用更多的CPU資源。讀操做,Lustre須要從網絡接口緩存進行數據Copy而得到所需數據,而寫操做能夠經過sendfile或Zero Copy避免額外的數據複製。服務器

(2)大文件性能表現好
Lustre的元數據與數據分離、數據分片策略、數據緩存和網絡設計很是適合大文件順序I/O訪問,大文件應用下性能表現很是好。這些設計着眼於提升數據訪問的並行性,實現極大的聚合I/O帶寬,這其中關鍵得益於數據分片設計(具體見上面的分析)。另外,後端改進的EXT3文件系統自己也很是適合大文件I/O。網絡

(3)小文件性能表現差
然而,Lustre的設計卻很是不利於小文件I/O,尤爲是LOSF(Lots of small files)。Lustre在讀寫文件前須要與MDS交互,得到相關屬性和對象位置信息。與本地文件系統相比,增長了一次額外的網絡傳輸和元數據訪問開銷,這對於小文件I/O而言,開銷是至關大的。對於大量頻繁的小文件讀寫,Lustre客戶端Cache做用會失效,命中率大大下降。若是文件小於物理頁大小,則還會產生額外的網絡通訊量,小文件訪問越頻繁開銷越大,對Lustre整體I/O性能影響就越大。OST後端採用改進的EXT3文件系統,它對小文件的讀寫性能自己就很差,其元數據訪問效率不高,磁盤尋址延遲和磁盤碎片問題嚴重。這也是大多數磁盤文件系統的缺點,Reiserfs是針對小文件設計的文件系統,性能表現要好不少。Lustre的設計決定了它對小文件I/O性能表現差,實際I/O帶寬遠低於所提供的最大帶寬。在4個OSS的千兆網絡配置下,單一客戶端小文件讀寫性能不到4MB/s。多線程

 

4 Lustre小文件優化
實際上前面已經提到,Lustre並不適合小文件I/O應用,性能表現很是差。所以,建議不要將Lustre應用於LOSF場合。不過,Lustre操做手冊仍然給出了一些針對小文件的優化措施。
(1)經過應用聚合讀寫提升性能,好比對小文件進行Tar,或建立大文件或經過loopback mount來存儲小文件。小文件系統調用開銷和額外的I/O開銷很是大,應用聚合優化能夠顯著提升性能。另外,可使用多節點、多進程/多線程儘量經過聚合來提升I/O帶寬。
(2)應用採用O_DIRECT方式進行直接I/O,讀寫記錄大小設置爲4KB,與文件系統保持一致。對輸出文件禁用locking,避免客戶端之間的競爭。
(3)應用程序儘可能保證寫連續數據,順序讀寫小文件要明顯優於隨機小文件I/O。
(4)OST採用SSD或更多的磁盤,提升IOPS來改善小文件性能。建立大容量OST,而非多個小容量OST,減小日誌、鏈接等負載。
(5)OST採用RAID 1+0替代RAID 5/6,避免頻繁小文件I/O引發的數據校驗開銷。架構

Lustre提供了強大的系統監控與控制接口用於進行性能分析與調優,對於小文件I/O,也能夠經過調整一些系統參數進行優化。
(1)禁用全部客戶端LNET debug功能:缺省開啓多種調試信息,sysctl -w lnet.debug=0,減小系統開銷,但發生錯誤時將無LOG可詢。
(2)增長客戶端Dirty Cache大小:lctl set_param osc./*.max_dirty_mb=256,缺省爲32MB,增大緩存將提高I/O性能,但數據丟失的風險也隨之增大。
(3)增長RPC並行數量:echo 32 > /proc/fs/lustre/osc/*-OST000*/max_rpcs_in_flight,缺省爲8,提高至32將提升數據和元數據性能。不利之處是若是服務器壓力很大,可能反而會影響性能。
(4)控制Lustre striping:lfs setstripe -c 0/1/-1 /path/filename,若是OST對象數大於1,小文件性能會降低,所以將OST對象設置爲1。
(5)客戶端考慮使用本地鎖:mount -t lustre -o localflock,若是肯定多個進程從同一個客戶端進行寫文件,則可用localflock代替flock,減小發送到MDS的RPC數量。
(6)使用loopback mount文件:建立大Lustre文件,與loop設備關聯並建立文件系統,而後將其做爲文件系統進行mount。小文件做用其上,則原先大量的MDS元數據操做將轉換爲OSS讀寫操做,消除了元數據瓶頸,能夠顯著提升小文件性能。這種方法應用於scratch空間可行,但對於生產數據應該謹慎使用,由於Lustre目前工做在這種模式下還存在問題。操做方法以下:
 dd if=/dev/zero of=/mnt/lustre/loopback/scratch bs=1048576 count=1024 
 losetup /dev/loop0 /mnt/lustre/loopback/scratch
 mkfs -t ext4 /dev/loop0 
 mount /dev/loop0 /mnt/losf併發

 

5 Lustre I/O最佳實踐
Lustre具備鮮明的I/O特色,並具備很是高的擴展性和大文件I/O性能。若是進行適當的配置和操做,Lustre則會展示更高的性能。下面給出一些Lustre I/O最佳實踐,可根據實際應用狀況擇優實踐。
(1)使用單進程讀取完整的共享小文件,須要時傳輸數據至其餘進程。
(2)使用單進程訪問容量在(1MB, 1GB)之間的小文件,將文件OST對象數設爲1。
(3)使用單進程訪問大於1GB的中等文件,文件OST對象數不超過4個。
(4)遠大於1GB的大文件OST對象數應設爲>4,這種文件不要採用順序I/O或file-per-process的I/O訪問模式。
(5)限制單個目錄下的文件數量,包含大量小文件的目錄stripe_count設置爲1。
(6)小文件存放在單一OST上,單進程文件建立和讀寫性能會獲得提升。
(7)包含大量小文件的目錄存放在單一OST上,文件建立性能會提到極大提高。
(8)儘可能避免頻繁地打開和關閉文件。
(9)僅在必要時使用ls -l,它會與全部相關的OST交互,操做代價很大,儘量使用ls和lfs find代替。
(10)考慮使用I/O中間件來改善性能,如ADIOS、HDF五、MPI-IO。

 

6 Lustre深刻閱讀
[1] Luster: http://www.lustre.org
[2] Lustre 2.0 Operations Manual http://wiki.lustre.org/manual/LustreManual20_HTML/index.html
[3] Understanding Lustre Internals http://wiki.lustre.org/images/d/da/Understanding_Lustre_Filesystem_Internals.pdf
[4] Lustre Architecture ftp://ftp.uni-duisburg.de/Linux/filesys/Lustre/lustre.pdf
[5] Lustre White Paper http://www.raidinc.com/pdf/whitepapers/lustrefilesystem_wp.pdf
[6] Lustre Sources: https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_SMI-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=LUSTRE-185-G-F@CDS-CDS_SMI

相關文章
相關標籤/搜索