最終所有數(shù)據(jù)都是要存儲(chǔ)在硬盤上的,硬盤訪問的速度通常都是毫秒級(jí)別的,這個(gè)速度和內(nèi)存和PCI設(shè)備納秒和微秒級(jí)別的訪問速度要慢上千倍。Linux文件系統(tǒng)是在硬盤上進(jìn)行數(shù)據(jù)存儲(chǔ)和管理的方法。
Linux
有多種可用的文件系統(tǒng),他們的性能和可擴(kuò)展性各有特點(diǎn)。除了存儲(chǔ)和管理硬盤上的數(shù)據(jù),文件系統(tǒng)也負(fù)責(zé)保持?jǐn)?shù)據(jù)的一致性。新的Linux發(fā)行版本包括日志文
件系統(tǒng)做為默認(rèn)安裝的一部分。日志能在系統(tǒng)宕機(jī)時(shí)保持?jǐn)?shù)據(jù)的一致性,所有對(duì)文件系統(tǒng)元數(shù)據(jù)的修改都被維護(hù)在一個(gè)獨(dú)立的日志中,并且能在系統(tǒng)宕機(jī)后恢復(fù)
數(shù)據(jù)的一致狀態(tài)。日志也能加快恢復(fù)時(shí)間,因?yàn)樵谙到y(tǒng)重新啟動(dòng)不必進(jìn)行文件系統(tǒng)檢查的操作。另一方面,你也需要平和性能和數(shù)據(jù)完整性之間的關(guān)系,但使用
在數(shù)據(jù)中心或企業(yè)級(jí)應(yīng)用中的Linux服務(wù)器對(duì)高可用性是有著嚴(yán)格的需求的。在這部分我們介紹Red Hat Enterprise Linux
AS默認(rèn)的和其他文件系統(tǒng)的一些簡(jiǎn)單的調(diào)優(yōu)方法。
3.12.1 安裝Linux系統(tǒng)前的硬件準(zhǔn)備
目前的Linux發(fā)行版本都有文件來需求安裝系統(tǒng)
的硬件設(shè)置的最小需求,比如最小的CPU頻率和內(nèi)存大小,也會(huì)提供完全安裝系統(tǒng)所需的最小的磁盤空間。然而這些文件都沒有提供怎么初始化磁盤子系統(tǒng),因?yàn)?br>Linux服務(wù)器能適應(yīng)各種不同的應(yīng)用環(huán)境,所以我們需要面對(duì)的第一個(gè)問題是:需要安裝的Linux服務(wù)器的應(yīng)用環(huán)境是什么?
服務(wù)器的磁盤子系統(tǒng)是系統(tǒng)性能的主要組成部分,判斷I/O子系統(tǒng)是否會(huì)對(duì)系統(tǒng)性能產(chǎn)生直接影響首先需要理解服務(wù)器所運(yùn)行的應(yīng)用。下面例子幫助我們理解I/O子系統(tǒng)和應(yīng)用的關(guān)系,
磁盤I/O對(duì)性能影響非常大的服務(wù)器例子:
一個(gè)文件和打印服務(wù)器必須快速的在用戶和磁盤子系統(tǒng)間移動(dòng)數(shù)據(jù),因?yàn)槲募?wù)器的目
的就是分發(fā)文件到各個(gè)客戶端,服務(wù)器對(duì)磁盤上的數(shù)據(jù)有大量的訪問操作。
一個(gè)數(shù)據(jù)庫服務(wù)器最終目的是查找和處理存儲(chǔ)在磁盤上的數(shù)據(jù)。即使有足夠的內(nèi)存,大多數(shù)數(shù)據(jù)庫服務(wù)器還是需要執(zhí)行大量的磁盤I/O操作來進(jìn)行內(nèi)存和硬盤之間的數(shù)據(jù)交換。
磁盤I/O對(duì)性能影響非常小的服務(wù)器例子:
一個(gè)郵件服務(wù)器的功能是對(duì)電子郵件進(jìn)行存儲(chǔ)和發(fā)送,通常會(huì)產(chǎn)生大量的網(wǎng)絡(luò)通信負(fù)載,在這樣的服務(wù)器里網(wǎng)絡(luò)是更重要的參數(shù)。
一個(gè)web服務(wù)器的功能是提供對(duì)web頁面的訪問支持(包括靜態(tài)的、動(dòng)態(tài)的或兩者都有),對(duì)這樣的服務(wù)器來講,網(wǎng)絡(luò)和內(nèi)存子系統(tǒng)是更好的調(diào)優(yōu)選擇。
磁盤技術(shù)的選擇
在安裝部署服務(wù)器之前需要了解應(yīng)用的規(guī)模,目前不同磁盤子系統(tǒng)技術(shù)所適合的應(yīng)用環(huán)境也是不相同的,下表列出了在ibm xSeries服務(wù)器上所用到的磁盤技術(shù)和相關(guān)特性。
技術(shù)
價(jià)格
功能
限制和容量
EIDE
低價(jià)格
直連存儲(chǔ);例如低端服務(wù)器的本地硬盤(x305)
是用來連接內(nèi)部存儲(chǔ)的增強(qiáng)型IDE,每個(gè)EIDE控制器支持兩個(gè)硬盤
SCSI
低價(jià)格
直連存儲(chǔ):中端或高端服務(wù)器的本地存儲(chǔ)(x346,x365)
雖然scsi標(biāo)準(zhǔn)有超過10年的發(fā)展歷史,但目前高端服務(wù)器的I/O需求已超過了scsi的能力,scsi技術(shù)的限制包括線纜長(zhǎng)度,總線上連接服務(wù)器數(shù)量,傳輸速度,總線上可訪問的設(shè)備數(shù)量等,這些都影響了集群系統(tǒng)的可擴(kuò)展性。
Serial ATA(SATA)
低價(jià)格
中端數(shù)據(jù)存儲(chǔ)應(yīng)用
從2002年發(fā)展起來的SATA新標(biāo)準(zhǔn)在硬盤/主板接口上繼承了EIDE的技術(shù),是點(diǎn)對(duì)點(diǎn)的傳輸協(xié)議,為每個(gè)設(shè)備提供了一個(gè)獨(dú)立的通道。在順序磁盤訪問應(yīng)用上SATA能和SCSI相比,在隨機(jī)磁盤訪問上稍遜于SCSI技術(shù),SATA技術(shù)也支持RAID功能。
iSCSI
適中的價(jià)格
中端存儲(chǔ),例如文件或web服務(wù)器
iSCSI技術(shù)主要適合中端存儲(chǔ)和遠(yuǎn)程啟動(dòng)需要,主要的好處是相對(duì)較低的成本和無盤服務(wù)器,也提供了基于TCP/IP/以太網(wǎng)的可擴(kuò)展性和可靠性。同時(shí)TCP/IP的高延遲也對(duì)性能產(chǎn)生了一些影響。
Fibre Channel
高價(jià)格
企業(yè)級(jí)存儲(chǔ),例如數(shù)據(jù)庫
提供了低延遲和高吞吐量能力并且克服了scsi技術(shù)的一些限制,通過光纖鏈路線纜距離能擴(kuò)展到10km,
2Gbps傳輸速度,提供冗余鏈路改善可靠性,理論上能連接1600萬個(gè)設(shè)備,在loop拓?fù)渲校?27個(gè)存儲(chǔ)設(shè)備或服務(wù)器能共享同一個(gè)光纖通道連
接,允許部署更大規(guī)模的集群。
關(guān)于ibm存儲(chǔ)的更多信息請(qǐng)?jiān)L問下面鏈接
http://www.ibm.com/storage
磁盤的數(shù)量
磁盤的數(shù)量會(huì)對(duì)系統(tǒng)的性能產(chǎn)生重要的影響,因?yàn)槊總€(gè)硬盤都會(huì)對(duì)整個(gè)系統(tǒng)的吞吐量做出貢
獻(xiàn)。在設(shè)置服務(wù)器硬盤數(shù)量的時(shí)候,磁盤的容量需求通常被作為唯一的參考。吞吐量需求經(jīng)常沒有被非常好的考慮甚至被完全忽略。一個(gè)性能良好的磁盤子系統(tǒng)的關(guān)鍵
是最優(yōu)化能提供I/O請(qǐng)求的讀寫操作。
通過RAID(redundant array of
independent
disks)技術(shù),能將I/O請(qǐng)求分成條帶化處理,在Linux環(huán)境下部署RAID有兩種選擇:軟件RAID和硬件RAID。你能通過Linux發(fā)行
版本自帶的軟件RAID來設(shè)置,如果需要,也能升級(jí)使用更有效率的硬件RAID解決方案。在Linux
2.4內(nèi)核中,軟件陣列的實(shí)現(xiàn)是通過md設(shè)備驅(qū)動(dòng)來實(shí)現(xiàn)的,這個(gè)驅(qū)動(dòng)的實(shí)現(xiàn)是不依靠設(shè)備類型的,因此能靈活的部署多種磁盤子系統(tǒng),比如EIDE或
SCSI磁盤都能設(shè)置軟件陣列。軟件RAID支持的陣列級(jí)別有RAID-0(條帶化),RAID-1(映像)和RAID5(帶校驗(yàn)位的條帶化),能在
初始化安裝的過程中或使用mdadm工具進(jìn)行設(shè)置。
如果必須部署一個(gè)硬件RAID陣列,你的系統(tǒng)需要一個(gè)RAID控制器,在這種情況下磁帶子系統(tǒng)包括物理磁盤和控制器,IBM提供了完整的磁盤控制器產(chǎn)品線。
注:通常增加硬盤是最有效的改動(dòng)服務(wù)器性能的方法之一。
3.12.2 其他日志文件系統(tǒng)
下面是Linux可用的文件系統(tǒng),但在Red Hat Enterprise Linux安裝過程中并不可用。
ReiserFS
ReiserFS是個(gè)快速日志文件系統(tǒng),特點(diǎn)是能提供優(yōu)化的磁盤利用率和快速的crash恢復(fù),是SUSE LINUX默認(rèn)的文件系統(tǒng)。
JFS
JFS是個(gè)全64bit的文件系統(tǒng)能支持更大的文件和分區(qū)。JFS是由IBM為AIX系統(tǒng)研發(fā)的,目前可用于GPL license。在HPC和數(shù)據(jù)庫應(yīng)用中JFS是個(gè)最佳的文件系統(tǒng),因?yàn)槟芴峁└蟮姆謪^(qū)和文件容量。
XFS
XFS是個(gè)SGI研發(fā)的高性能的日志文件系統(tǒng)。特性和使用和IBM的JFS非常相似。
3.12.3 在2.4內(nèi)核中調(diào)整elevator算法
磁盤I/O elevator算法是Linux 2.4內(nèi)核的一個(gè)特性,通過調(diào)整elevator算法的讀寫值能增加延遲時(shí)間使I/O請(qǐng)求在隊(duì)列中等待更多的時(shí)間,從而使得I/O調(diào)度器能有更多的時(shí)間來完成I/O操作,能提高系統(tǒng)的吞吐量。
如果你的Linux服務(wù)器應(yīng)用于大量的磁盤I/O操作的環(huán)境,在吞吐量和延遲方面找到一個(gè)合理的平衡點(diǎn)是非常重要的。Linux文件系統(tǒng)
使用塊設(shè)備,因此改動(dòng)塊讀寫的頻率能改善未經(jīng)系統(tǒng)的性能。一個(gè)方針是,較小的緩存和平衡的高延遲讀寫對(duì)I/O操作比較重的服務(wù)器是有益的。
像其他系統(tǒng)的調(diào)優(yōu)參數(shù)相同,對(duì)elevator算法的調(diào)整是個(gè)重復(fù)的過程。你需要對(duì)現(xiàn)有磁盤性能做出評(píng)估,然后做出改動(dòng),最后再測(cè)試出改動(dòng)參數(shù)所產(chǎn)生的影響。下面是使用/sbin/elvtune命令去查看當(dāng)前參數(shù)值隨后做出改動(dòng)的例子:
Red Hat建議你將讀延遲(-r)調(diào)整為寫延遲(-w)的一半。如果對(duì)算法進(jìn)行的調(diào)整,需要把/sbin/elvtune調(diào)用加到/etc/rc.d/rc.local文件中以確定在下次系統(tǒng)重新啟動(dòng)后改動(dòng)依然生效。
下面是查看默認(rèn)值并且做出改動(dòng)的示例
3.12.4在Linux 2.6內(nèi)核中選擇正確的I/O elevator算法
對(duì)大多數(shù)應(yīng)用來說,complete fair queuing(CFQ) elevator算法是個(gè)合適的選擇,他已對(duì)一個(gè)典型的多用戶、多處理器環(huán)境做了相應(yīng)的優(yōu)化。不過,一些特定的環(huán)境下選擇其他的I/O elevator可能會(huì)獲得更好的效果。
智能的磁盤子系統(tǒng)
benchmark
測(cè)試結(jié)果顯示NOOP elevator在高端服務(wù)器環(huán)境下能給性能帶來有趣的變化,當(dāng)使用IBM ServeRAID或TotalStorage
DS系列磁盤子系統(tǒng)的情況下,缺少命令能力的NOOP elevator顯示出了他的優(yōu)勢(shì),因?yàn)橹悄艽疟P子系統(tǒng)例如IBM
ServeRAID和TotalStrrage DS系統(tǒng)磁盤子系統(tǒng)用自己的I/O命令能力彌補(bǔ)了NOOP
elevator的缺點(diǎn)。企業(yè)級(jí)的磁盤子系統(tǒng)通常包括多個(gè)SCSI或光纖通道磁盤,每個(gè)磁盤都有獨(dú)立的磁盤頭和數(shù)據(jù)條帶。對(duì)操作系統(tǒng)來說正確的處理如此
復(fù)雜的I/O特性子系統(tǒng)是非常困難的,因此你會(huì)觀察到在獲得性能相同的情況下使用NOOP I/O elevator會(huì)帶來更少的系統(tǒng)資源開銷。
數(shù)據(jù)庫系統(tǒng)
因?yàn)榇蠖鄶?shù)數(shù)據(jù)庫應(yīng)用需要進(jìn)行大量的尋址操作,所以在選擇deadline elevator的情況下會(huì)獲得更好的性能體現(xiàn)。
虛擬機(jī)
虛
擬機(jī)系統(tǒng),無論是VMware或zSeries上的VM都只在虛擬層和下面的硬件層進(jìn)行通信,因此虛擬機(jī)不知道他被指派的磁盤設(shè)備是個(gè)獨(dú)立的SCSI
磁盤設(shè)備或是多個(gè)光纖磁盤組成的磁盤陣列設(shè)備。虛擬層只關(guān)注必需的I/O記錄和和物理設(shè)備之間的通信。因此,我們建議為虛擬機(jī)選擇使用NOOP
elevator以確保更少的系統(tǒng)資源開銷。
獨(dú)立ATA或SATA磁帶子系統(tǒng)
如果你選擇使用獨(dú)立ATA或SATA的磁盤子系統(tǒng),考慮使用anticipatory I/O elevator會(huì)獲得比較好的性能。
3.12.5 訪問時(shí)間更新
Linux文件系統(tǒng)當(dāng)文件被創(chuàng)建、更新和訪問的情況下都會(huì)進(jìn)行記錄,默
認(rèn)情況操作包括更新最近讀取時(shí)間屬性(last-time-read)當(dāng)文件被讀寫的時(shí)候,因?yàn)閷懖僮魇莻€(gè)“昂貴”的操作,排除不必要的I/O操作能
提升整個(gè)系統(tǒng)的性能。Mount文件系統(tǒng)的時(shí)候加入noatime和nodirtime選項(xiàng)能避免inode時(shí)間訪問記錄被更新,如果文件和目錄的更新
時(shí)間對(duì)你的應(yīng)用來說并不關(guān)鍵,比如一個(gè)web服務(wù)器環(huán)境,系統(tǒng)管理員應(yīng)該選擇mount文件系統(tǒng)附上noatime和nodirtime選項(xiàng)來改善性能,
能將改動(dòng)寫入/etc/fstab來實(shí)現(xiàn)長(zhǎng)期的改動(dòng),下面是個(gè)更新/etc/fstab的示例:
tips:通常為/var建立獨(dú)立的分區(qū)并且mount附上noatime選項(xiàng)是個(gè)好的建議。
3.12.6 增加操作文件數(shù)量
系統(tǒng)有一個(gè)重要的參數(shù)就是允許操作文件的數(shù)量,標(biāo)準(zhǔn)的Linux配
置的數(shù)量可能過低從而影響性能。查看/proc/sys/file-nr對(duì)比全部指派文件數(shù)量和最大文件操作數(shù)量(第一個(gè)或最后一個(gè)值)。能通過改動(dòng)
/proc/sys/fs/file-max來改動(dòng)這個(gè)參數(shù)的值。
3.12.7 選擇ext3文件系統(tǒng)的目錄模式
ext3文件系統(tǒng)有三個(gè)可選的日志模式,能通過在mount命令的附加data項(xiàng)來進(jìn)行改動(dòng)。
data=journal
journal選項(xiàng)通過將文件數(shù)據(jù)和元數(shù)據(jù)都設(shè)置為日志模式,提供了最高級(jí)別的數(shù)據(jù)一致性保障。同時(shí)也帶來了較高的性能開銷。
data=ordered(default)
順序方式寫入,文件數(shù)據(jù)先寫入然后是元數(shù)據(jù)。
data=writeback
提供最快的訪問速度,不過犧牲了數(shù)據(jù)的一致性。元數(shù)據(jù)仍然被記錄到日志,從而確保元數(shù)據(jù)的完整。文件數(shù)據(jù)會(huì)在系統(tǒng)崩潰之后恢復(fù)到原先的狀態(tài)。
三種方法能改動(dòng)日志模式:
使用mount 命令:
mount -o data=writeback /dev/sdb1 /mnt/mountpoint 這里/dev/sdb1 是掛載的文件系統(tǒng)
在/etc/fstab文件的選項(xiàng)中:
/dev/sdb1 /testfs ext3 defaults,journal=writeback 0 0
更改root分區(qū)的data=ordered,更改上述/etc/fstab 文件,執(zhí)行mkinitrd命令來掃描/etc/fstab 文件并創(chuàng)建新的印象文件。升級(jí)grub或lilo指向新的印象文件。更多有關(guān)Ext3的介紹,請(qǐng)參考下面鏈接:
http://www.redhat.com/support/wpapers/redhat/ext3/3.12.8 SCSI設(shè)備的Tagged command queuing(TCQ)
SCSI磁
盤的Tagged command queuing
(TCQ),產(chǎn)生于SCSI-2標(biāo)準(zhǔn),是一種將到達(dá)SCSI驅(qū)動(dòng)器的指令序列進(jìn)行打標(biāo)簽和重新排序的方法。對(duì)于繁重、隨機(jī)訪問的I/O負(fù)荷,這種方法通過
對(duì)I/O請(qǐng)求的重排序,使驅(qū)動(dòng)器磁頭位置最優(yōu)化,改進(jìn)I/O性能。
一些IBM
xSeries服務(wù)器集成Adaptec AIC-7xxx SCSI控制器。執(zhí)行命令:cat
/proc/scsi/aic7xxx/0來檢查當(dāng)前TCQ的設(shè)置,能在/usr/src/linux-
2.4/drivers/scsi/README.aic7xxx中查看scsi設(shè)備設(shè)定的細(xì)節(jié)。
不必重新編譯內(nèi)核。能在/etc/modules.conf中添加如下兩行內(nèi)容,指定參數(shù)aic7xxx=global_tag_depth:xx,
注:如果在/etc/modules.conf里更改了initrd中的模塊,需要使用mkinitrd命令重新生成initrd image。
3.12.9 Block sizes大小
數(shù)據(jù)塊大小是對(duì)磁盤讀寫的最小單位,直接影響服務(wù)器性
能。如果服務(wù)器處理的多為小文件,那么較小的數(shù)據(jù)塊尺寸會(huì)更有效。反之,如果服務(wù)器處理的多為大文件,大的數(shù)據(jù)尺寸塊會(huì)提高系統(tǒng)性能。如果要改動(dòng)數(shù)據(jù)塊的
大小必須重新格式化磁盤。做了RAID的磁盤,stripe size
就是數(shù)據(jù)塊的容量(光纖盤采用segment)。根據(jù)應(yīng)用的不同合理選擇正確的塊大小,通常的原則是順序讀寫應(yīng)使用大的塊容量,象數(shù)據(jù)庫這樣的隨機(jī)讀寫操
作使用等同于記錄大小的塊容量更合適。
Red Hat Enterprise Linux允許的block sizes有1K,2K和4K。
3.12.10 分區(qū)設(shè)置的原則
一個(gè)分區(qū)是磁盤上一組連續(xù)的數(shù)據(jù)塊,就似乎是獨(dú)立的磁盤相同。Red Hat Enterprise Linux 3默認(rèn)只安裝三個(gè)簡(jiǎn)單的分區(qū),在Red Hat Enterprise Linux 4中通過使用邏輯卷提供了更靈活的分區(qū)劃分。
關(guān)于Linux磁盤分區(qū)的優(yōu)化存在許多的爭(zhēng)論。如果只有一個(gè)根分區(qū)的話,對(duì)于將來要增加新分區(qū)時(shí)會(huì)比較麻煩。而分區(qū)太多對(duì)文件系統(tǒng)的管理又會(huì)變的復(fù)雜。Linux安裝過程中,允許創(chuàng)建多個(gè)分區(qū)。
創(chuàng)建多個(gè)磁盤分區(qū)的好處:
文件系統(tǒng)出色的顆粒度屬性使安全性得到改進(jìn)。例如,允許所有用戶和進(jìn)程容易地訪問/var和/tmp分區(qū),并防止惡意訪問。通過將這些分區(qū)分布到不同的磁盤,可在不影響系統(tǒng)正常運(yùn)行的情況下對(duì)一些分區(qū)進(jìn)行重建和恢復(fù)。
某塊磁盤故障導(dǎo)致的數(shù)據(jù)丟失不影響其他磁盤的數(shù)據(jù),改進(jìn)數(shù)據(jù)完整性。
全新的安裝或升級(jí)不影響其他分區(qū)。
更有效的備份過程