wiki:jazz/Performance_Tuning

Version 29 (modified by jazz, 14 years ago) (diff)

--

Performance Tuning

System Performance Tuning : CPU

  • 檢查 CPU 是否為 64 位元的方法 - 參考自 Ubuntu 論壇
    ~$ sudo lshw -C cpu | grep width
           width: 32 bits ---> 為 32 位元
    =======
           width: 64 bits ---> 為 64 位元
    
  • 檢查 CPU 是否支援虛擬化 - 旗標(flags)分別是: Intel (vmx) 與AMD (svm) (KVM 安裝 (rock))
    ~$ cat /proc/cpuinfo | egrep 'vmx|svm' --color
    

System Performance Tuning : Memory

  • 查詢記憶體時脈與單一條的大小
    $ sudo dmidecode
    搜尋 Memory Device 會看到類似的結果
    Memory Device
           Array Handle: 0x1000
           Error Information Handle: Not Provided
           Total Width: 64 bits
           Data Width: 64 bits
           Size: 2048 MB
           Form Factor: DIMM
           Set: None
           Locator: DIMM_4
           Bank Locator: Not Specified
           Type: DDR2
           Type Detail: Synchronous
           Speed: 800 MHz (1.2 ns)
           Manufacturer: 7F4F000000000000
           Serial Number: 0007D1E4
           Asset Tag: 540834
           Part Number: TS256MLQ64V8U
    
  • Share Memory - 有些程式需要用到比較多 Share Memory (共享記憶體), 如: Kerrighed (2008-03-20 (rock/rider))
    echo "kernel.shmall = 796917578" >> /etc/sysctl.conf
    echo "kernel.shmmax = 796917578" >> /etc/sysctl.conf
    echo "kernel.shmmni = 4096"      >> /etc/sysctl.conf
    
  • Cache Memroy - [參考] 回收 Linux cached memory
    • 設定 vm.drop_caches 觸發 kernel 回收用於 cache 的記憶體。 至於 1, 2, 3 的等級,可參考 LinuxInsight 的說明
      • 1: free pagecache
      • 2: free dentries and inodes
      • 3: free pagecache, dentries and inodes
        echo 1 > /proc/sys/vm/drop_caches
        
        sysctl -w vm.drop_caches=1
        
    • 設定 vm.vfs_cache_pressure 使 kernel 更勤於回收 cache。
      sysctl -w vm.vfs_cache_pressure=n  (n > 100)
      

System Performance Tuning : File System

  • 如何調整每個使用者可以開啟的檔案個數
    • [參考] Increasing the file descriptor limit
    • [參考] GNU/Linux - How Many Open Files?
    • 注意:修改 /etc/security/limits.conf 中間必須確定是 TAB ,如果有設定 vim 的 softwaretab 的話,得特別當心!!!
    • /proc/sys/fs/file-max - 核心預設最多可以開啟的檔案個數
      ~$ cat /proc/sys/fs/file-max
      743964
      
      • 修改方法: 使用 sysctl 指令或編輯 /etc/sysctl.conf
        sysctl -w fs.file-max=100000
        
    • /proc/sys/fs/file-nr - 目前已開啟檔案個數、可供開啟檔案個數、總開啟檔案上限
      [root@srv-4 proc]# cat /proc/sys/fs/file-nr
      3391    969     52427
      |	 |       |
      |	 |       |
      |        |       maximum open file descriptors
      |        total free allocated file descriptors
      total allocated file descriptors
      (the number of file descriptors allocated since boot)
      
    • /etc/security/limits.conf - 每個程序(process)可以開啟檔案的個數(number limits of open files per process) - 像 HDFS 的 DataNode 就需要調整這種參數(2010-02-22)
      • /etc/security/limits.conf

        old new  
        4949#ftp             -       chroot          /ftp
        5050#@student        -       maxlogins       4
        5151
         52*      soft        nofile        4096
         53*      hard        nofile        743964
         54
        5255# End of file
    • /etc/pam.d/login - 告訴系統要用 /etc/security/limits.conf 來設定一些上限
      # Sets up user limits according to /etc/security/limits.conf
      # (Replaces the use of /etc/limits in old login)
      session    required   pam_limits.so
      
    • 指令: ulimit - 可以告訴你一些系統限制,並且設定想要的値
      jazz@Wdebian:~$ ulimit -a
      core file size          (blocks, -c) 0
      data seg size           (kbytes, -d) unlimited
      scheduling priority             (-e) 0
      file size               (blocks, -f) unlimited
      pending signals                 (-i) 72704
      max locked memory       (kbytes, -l) 32
      max memory size         (kbytes, -m) unlimited
      open files                      (-n) 1024
      pipe size            (512 bytes, -p) 8
      POSIX message queues     (bytes, -q) 819200
      real-time priority              (-r) 0
      stack size              (kbytes, -s) 8192
      cpu time               (seconds, -t) unlimited
      max user processes              (-u) 72704
      virtual memory          (kbytes, -v) unlimited
      file locks                      (-x) unlimited
      
  • 假設 /proc/sys/fs/file-max 跟 /etc/security/limits.conf 都有設定上限為 743964,且 /etc/pam.d/login 也有打開,但是 ulimit -a 指令仍顯示 1024 (預設),可以修改 /etc/rc.local 或 /etc/profile 強制用 ulimit -n 743964 來提高開檔個數。
    ~$ ulimit -n 743964
    
  • [備註] 如果 ulimit 超出可容許範圍,會顯示 Operation not permitted,此時請檢查相關設定値
    ~$ ulimit -n 7439640
    -bash: ulimit: open files: cannot modify limit: Operation not permitted
    

I/O Performance Tuning : NFS

  • NFS Tuning - /etc/fstab - 加大 NFS read/write size 可以提升檔案系統的 I/O 效率 (2008-03-20 (rock/rider))
    192.168.0.111:/home /home nfs rw,bg,soft,intr,rsize=262144,wsize=262144 0 4
    192.168.0.111:/opt  /opt  nfs ro,bg,soft,intr,rsize=262144,wsize=262144 0 4
    192.168.0.111:/usr  /usr  nfs ro,bg,soft,intr,rsize=262144,wsize=262144 0 4
    

I/O Performance Tuning : IOWait

  • 2010-03-31 : 高 IOWait 有什麼好的解決之道呢??

Network Performance Tuning

  • TCP Tuning - (2008-03-20 (LSI))
    echo 262144               > /proc/sys/net/core/rmem_default
    echo 8388608              > /proc/sys/net/core/wmem_max
    echo 8388608              > /proc/sys/net/core/rmem_max
    echo "4096 87380 4194304" > /proc/sys/net/ipv4/tcp_rmem
    echo "4096 65536 4194304" > /proc/sys/net/ipv4/tcp_wmem
    
  • TCP TIME_WAIT & Reuse - 適用網站伺服器 (2010-03-26)
    echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout 
    sysctl net.ipv4.tcp_tw_reuse=1
    sysctl net.ipv4.tcp_tw_recycle=1
    
  • 如果沒辦法 ping 224.0.0.1 的話,代表 Broadcast ICMP 封包被濾掉了,因為預設 Linux kernel 2.6 是 disable 的。解法如下:(2009-09-07)
    echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
    
    ~# echo "net.ipv4.icmp_echo_ignore_broadcasts = 0" >> /etc/sysctl.conf
    ~# sysctl -p
    net.ipv4.ip_forward = 1
    net.ipv4.icmp_echo_ignore_broadcasts = 0
    

Power Management

  • 啟動 SATA ALPM 電源管理功能 - powertop 提供之建議
    echo min_power > /sys/class/scsi_host/host0/link_power_management_policy
    
  • 虛擬機器的 clocksource (2010-02-11)
    echo acpi_pm > /sys/devices/system/clocksource/clocksource0/current_clocksource
    
  • 直接修改系統參數讓 Linux 休眠 (2010-03-03 (rock))
    # echo 4 > /proc/acpi/sleep  /** 適用 Kernel 2.4 (swsusp)**/
    # echo disk > /sys/power/state  /** 適用 Kernel 2.4 & 2.6 (swsusp)**/
    

Security / Management Tip

  • [緣起] 有時因為 Kernel 顯示 DEBUG 訊息,縱使下 reboot 或 shutdown, halt 都無效時,可以使用這個技巧。
    • 強迫重新開機

{{ echo 1 > /proc/sys/kernel/sysrq echo b > /proc/sysrq-trigger }}}

  • 強迫直接關機
    echo 1 > /proc/sys/kernel/sysrq
    echo o > /proc/sysrq-trigger