天天看點

實測Linux ext3/4檔案系統的規模與瓶頸

在檔案系統方面,Linux可以算得上作業系統中的 “瑞士×××”。Linux 支援許多種檔案系統,從日志型檔案系統到叢集檔案系統和加密檔案系統。對于使用标準的和比較奇特的檔案系統以及開發檔案系統來說,Linux 是極好的平台。本文讨論 Linux 核心自帶的檔案系統Ext3、Ext4檔案數、目錄數、檔案名長度等各種限制。

  <b>實測ext3的限制瓶頸</b>

  <b>1. 測試目的:ext3檔案系統下filename最大字元長度</b>

  測試平台:RHEL5U3_x64

  測試過程:

  LENTH=`for i in {1..255};do for x in a;do echo -n $x;done;done`

  touch $LENTH

  當增加到256時,touch報錯,File name too long

  linux系統下ext3檔案系統内給檔案/目錄命名,最長隻能支援127個中文字元,英文則可以支援255個字元

  <b>2. 測試目的:ext3檔案系統下一級子目錄的個數限制</b>

  [root@fileserver maxdir]# for i in {1..32000};do mkdir $i;done

  mkdir: cannot create directory `31999': Too many links

  mkdir: cannot create directory `32000': Too many links

  ext3檔案系統一級子目錄的個數為31998(個)。

  Linux為了cpu的搜尋效率而規定的,要想改變數目大概要重新編譯核心.

<b>  3. 測試目的:ext3檔案系統下單個目錄裡的最大檔案數</b>

  測試平台: RHEL5U3_x64

  單個目錄下的最大檔案數似乎沒什麼特别限制,也是受限于所在檔案系統的inode數限制:

  df -i或者使用tune2fs -l /dev/sdaX或者dumpe2fs -h /dev/sdaX檢視可用inode數,後兩個指令

  輸出結果是一樣的,但是跟df所得出的可用inode數會有些誤差,至今不明白什麼原因。

<b> </b> 網上常用兩種解決辦法:

  1) 重新mkfs,ext3預設block大小4096 Bytes,block設定小一些inode數設定大一些

  2) 使用loopback檔案系統臨時解決:在/usr中(也可以在别處)建立一個大檔案,然後做成loopback檔案系統,将原來的檔案移到這個檔案系統中,并将它mount到/usr下合适的位置。這樣可以大大減少你/usr中的檔案數目。但是系統性能會有點損失。

  <b>4. 測試目的: 打開檔案數限制(檔案句柄、檔案描述符)</b>

  測試平台: RHEL5U3_x64

  ulimit -n 65535設定,或者/etc/security/limit.conf裡設定使用者打開檔案數、程序數、CPU等

Linux新檔案系統Ext4

  Ext4(The fourth extended file system)是一種針對ext3系統的擴充日志式檔案系統,是專門為 Linux 開發的原始的擴充檔案系統(ext 或 extfs)的第四版。Linux kernel 自 2.6.28 開始正式支援 Ext4。

  <b>相容性</b>

  Ext3更新到ext4能提供系統更高的性能,消除存儲限制,和擷取新的功能,并且不需要重新格式化分區,ext4會在新的資料上用新的檔案結構,舊的檔案保留原狀。以ext3 檔案系統的方式mount到ext4上會不用新的磁盤格式,而且還能再用ext3來重新挂載,這樣僅僅失去了ext4的優勢。

  <b>大檔案系統/檔案大小</b>

  現在ext3支援最大16TB的檔案系統。單個檔案最大2TB。Ext4增加了48位塊位址,最大支援1EB檔案系統,和單個16TB的檔案。1EB=1024PB 1PB=1024TB 1TB=1024GB。

  <b>子目錄可伸縮性</b>

  EXT3每個目錄最大包含32000個子目錄。減去.和..也就是31998,ext4打破了這個限制可以無限制數量的子目錄

  <b>Extents</b>

  傳統的Unix派生檔案系統,使用間接塊映射方案,以跟蹤每塊用于塊相應的資料檔案,這對大檔案來說是低效率的。現代檔案系統使用不同的方法稱為“extends” 。extends基本上指一串連續的實體快。通常叫做資料在下面的N個塊中。一個100MB的檔案可以配置設定到一extends中。而不需要建立一個間接映射表為256000個blocks,(每個block 4kb)大檔案被分割為很多範圍。Extends改進了性能并且減少了碎片。因為extends鼓勵在磁盤上連續布局。

  <b>Multiblock 配置設定</b>

  ext4使用了一個多塊配置設定來在一次調用中配置設定很多塊。替換掉每次配置設定一個塊,減少系統開銷。在延時配置設定和extends上十分有用。

  <b>延遲配置設定</b>

  延遲配置設定是一個性能特性(它不修改磁盤格式)。現代檔案系統例如XFS,ZFS,btrfs or Reiser 4 并且它盡可能多的延時塊的配置設定。相對于傳統檔案系統(例如Ext3 reiser3 etc)所做的立刻配置設定塊提供了更好的性能。

  <b>日志校驗和</b>

  日志是磁盤中最常用的一部分,組成日志的這部分也是最容易出現硬體故障的。并且從一個受損的日志上恢複資料會導緻巨大的資料損壞。Ext4 校驗和提供了改進,它允許将EXt3的雙向送出日志格式轉換為單向的,加速檔案系統操作,在某些情況下達到20%---是以可靠性和性能同時被改進。

  <b>線上碎片整理</b>

  當 延遲配置設定,extents 和 multiblock 配置設定 幫助減少碎片的時候,使用中的檔案系統依然會産生碎片。為了解決這個問題,Ext4 将會支援線上碎片整理,并且有一個e4defrag工具可以整理個别檔案在整個檔案系統中。

  <b>索引節點-關聯</b>

  擁有大索引節點,納秒時間戳,快速擴充屬性,索引節點保留的特點。Ext3 支援可設定的索引節點大小(通過 mkfs -l參數)但是預設索引節點大小是128位元組。Ext4将預設為256位元組。這需要适應一些額外的字段(比如納秒時間戳或者索引節點版本)并且剩餘索引節點空間會被用于存放擴充屬性為那些足夠小的對象來适合空間。這樣使通路那些屬性更快,提高那些使用擴充屬性的應用程式性能3-7倍。在目錄建立的時候保留若幹索引節點在裡面,預期它們在未來使用。這樣改進性能,因為新檔案被建立在目錄中他們可以使用保留索引節點。檔案建立和删除是以更高效。納秒時間戳意味着索引節點字段例如修改時間可以用納秒分辨率替代Ext3中的秒。

  <b>持續預配置設定</b>

  這個特性在ext3最新的核心版本中已經可用了,由glic仿真來實作檔案系統不支援的功能,允許應用程式預配置設定磁盤空間:應用程式告訴檔案系統來預配置設定空間,檔案系統預配置設定需要的塊和資料結構。