2008年12月27日 星期六

Performance tuning for Ubuntu 8.10 by modifying kernel parameters

雖然Ubuntu一直在進步,但是在desktop環境上還是有點效能不滿意的感覺。在Google過後,看了一些文章跟討論,加上自己的實驗,得到以下的一些調整步驟跟心得:
  1. 編輯/etc/sysctl.conf:
    sudo nano /etc/sysctl.conf
  2. 加入以下核心參數設定:
    #
    # for kernel
    #
    kernel.sem = 250 32000 100 128
    kernel.shmall = 2097152
    kernel.shmmax = 2147483648
    kernel.shmmni = 4096
    fs.file-max = 65535
    vm.swappiness = 1
    vm.vfs_cache_pressure = 50
    vm.dirty_writeback_centisecs=1500

    #
    # For net connections
    #
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    net.ipv4.tcp_rmem = 4096 87380 16777216
    net.ipv4.tcp_wmem = 4096 65536 16777216
    net.ipv4.tcp_no_metrics_save = 1
    net.ipv4.tcp_moderate_rcvbuf = 1
    # recommended to increase this for 1000 BT or higher
    net.core.netdev_max_backlog = 2500
    net.ipv4.tcp_rfc1337 = 1
    net.ipv4.ip_no_pmtu_disc = 0
    net.ipv4.tcp_sack = 1
    net.ipv4.tcp_fack = 1
    net.ipv4.tcp_window_scaling = 1
    net.ipv4.tcp_timestamps = 1
    net.ipv4.tcp_ecn = 0
    net.ipv4.route.flush = 1
  3. 重新讀取設定即ok:
    sudo sysctl -p
  4. 加上block device讀取參數的修改,來改善讀取的效能:
    修改/etc/rc.local
    sudo nano /etc/rc.local
    在最後的exit 0之前加上
    echo 1024 > /sys/block/sda/queue/read_ahead_kb
    echo 1024 > /sys/block/sda/queue/nr_requests
    其中,sda是指欲調整的磁碟代號,如果有多個磁碟想調整,則重複以上設定,但是將磁碟代號修改完欲調整的。
以上參數調整主要是針對在kernel memory跟cache設定,以及有關網路連線方面的設定,所以調整後應該會覺得在檔案讀取跟網路連線上有改善。其中,有關kernel的部份,建議最好在主記憶體>512MB時才調整。尤其在於fs.file-max、vm.swappiness、vm.vfs_cache_pressure此3個參數。(fs.file-max: 可開啟最大檔案個數;vm.swappines:kernel對於使用swap的情況,越小表示越不使用swap,預設值為60;vm.vfs_cache_pressure:kernel對inode的cache,預設為100,<100表示儘量保留在cache中,>100則反之)

以上的修改只是針對透過修改核心參數來達到提升效能的方式,事實上,還有很多其他部份可以調整。個人使用的感覺是還不錯,有蠻顯著的效果