近期工作主要目標為 Linux環境建置與系統校調的學習,最近也
會將一些實作筆記放上來,方便查詢與複習。利用 Tmpfs特性加
速卻也是無意間閒聊下發現的,實作後的確發現不少怪問題。


前些日子跟小建碰面閒聊最近工作狀況時,發現原來能透過 tmpfs
文件特性,替系統加速。大多的程式暫存區都會放到 /tmp 底下
,方便快取使用,假如能夠將 /tmp 掛載到記憶體上運作,要是
運用在那些吃重的網路服務(Apache、Squid...),那麼會不會因
此提高系統效能呢?嗯,答案呼之欲出囉,畢竟記憶體讀取速度
一定要比硬碟來得快喔!


【tmpfs 簡介】

簡單的說 tmpfs是一套以使用記憶體為基礎的檔案系統,不同於
ramdisk 的最大差別在於,ramdisk 雖也使用記憶體,但它的屬
於 Block device,使用前必須先 format(mkfs),tmpfs 使用上
就很方便囉.. 直接 mount 就可以使用了。


【tmpfs 使用確認】

啟用了「Virtual memory file system support」選項的 2.4系
列核心;這個選項在內核配置選項的「File systems」部分。

※ 建議編譯核心時,將常用的 File systems 編入模組。


【IDE 硬碟加速設定】

# hdparm -d1 -c3 -X69 -m16 /dev/hda

※ 如忘記參數意思,請 man hdparm 查詢,或參考鳥哥‧hdparm文件


【將 /tmp 掛載在記憶體上】

# vi /etc/rc.local

mkdir /dev/shm/tmp
chmod 1777 /dev/shm/tmp
mount --bind /dev/shm/tmp /tmp

※ 將上面那三行加入 /etc/rc.local,重新開機即完成!


照理說,加入上面那三行應該不會有其他問題才對!總會碰到一
堆「帶賽」事情的我,加入那三行後卻發生了個嚴重的問題。只
要這台伺服器有開啟圖形介面〈XWindows〉,系統開進去整個畫
面一片漆黑,什麼都看不到。進入文字介面查看 log,會發現以
下錯誤訊息。

# cat /var/log/messages

Aug 20 20:30:42 paul gdm[3029]: gdm_slave_xioerror_handler: Fatal X error - Restarting :0
Aug 20 20:30:52 paul gdm[3279]: gdm_slave_xioerror_handler: Fatal X error - Restarting :0
Aug 20 20:31:01 paul gdm[3414]: gdm_slave_xioerror_handler: Fatal X error - Restarting :0
Aug 20 20:31:01 paul gdm[2772]: deal_with_x_crashes: Running the XKeepsCrashing script

往前面再翻一點,發現 xinetd、iiim 陸續成功啟動,rc.local
為最後啟動的服務,卻會出現以上錯誤。


Linux 開機服務載入順序:

 1. BIOS
 2. MBR
 3. Linux Loader
 4. Kernel, init (取得 run-level)
 5. /etc/rc.d/
 6. /etc/modules.conf
 7. /etc/rc.d/rc[0-6].d
 8. /etc/rc.d/rc.local


由於系統預設是使用圖形介面啟動,保險起見確認檢查圖形介面
服務啟動的順序有沒有問題。

# ls /etc/rc.d/rc5.d


接著將預設介面改成由文字介面開機,看看是不是會有相同的情
形?沒想到,重開機後相當順利的進入系統,沒有錯誤訊息、記
錄檔,皆為順利開啟服務的記錄,且順利將 /dev/shm/tmp 掛載
。與小建Tsung 討論後,試著將 rc.local 那段寫在 gdm啟動
之前,測試後完全沒問題,因此將上面那三行加入開機系統服務
,即可解決此問題?

測試過手邊不同版本的 Linux,預設改成開啟圖形介面就會有相
相同的問題。〈RedHat Enterprise AS 4、Fedora Core 5〉


【X Windows 圖形介面無法掛載問題排除實作】


步驟一:編寫 shmturbo script,加入系統服務。

# vi /etc/init.d/shmturbo

#!/bin/bash
# chkconfig: 35 80 70
# description: Linux Turbo
#
# History:
# 2007/08/26 Paul

PATH=/sbin:/bin:/usr/bin:/usr/sbin

mkdir /dev/shm/tmp
chmod 1777 /dev/shm/tmp
mount --bind /dev/shm/tmp /tmp


步驟二:將權限設定成 755。

# chmod 755 /etc/rc.d/init.d/shmturbo

※ 這個步驟一點要做喔!要不然重開還是不會執行到這一段!


步驟三:將服務加入 chkconfig。

# chkconfig --add shmturbo

※ 將服務加入開機程序內。

# chkconfig --list shmturbo

※ 檢查 3、5 run-level 是否可執行。


如何將自訂服務加入系統,請參照鳥哥‧chkconfig 說明文件!


重新開機後,預設為圖形介面就可以順利開機登入囉! ^^~


這個解決方法雖有些不求甚解,終究仍是花了不少時間排除,經
測試三週的時間,的確發現執行效能提升不少,讓老舊的硬碟得
以稍微喘息一下。

在此,要提醒各位的是,tmpfs 優點是速度快,請依照您的記憶
體容量作適度調整,至於如何調整,建議參照 Tsung‧拿 RAM
當硬碟來用(RAM Disk)
,裡頭有完整的說明,不熟悉可再Google
一下,應該就可以獲得更多資訊囉!



延伸閱讀:

Tsung‧Linux 加速(拿 RAM 當硬碟)
IBM‧使用虛擬內存(virtual memory,VM)文件系統和綁定安裝
    

                          Paul

                       2007.09.09
arrow
arrow
    全站熱搜

    paul 發表在 痞客邦 留言(0) 人氣()