====== 05 Linuxチューニング ====== ===== ディスクIO ===== ==== ①.午前四時の高負荷(Cron) ==== mlocate, makewhatis のCronを停止する。 chmod 0 /etc/cron.daily/mlocate.cron chmod 0 /etc/cron.daily/makewhatis.cron chmod 0 /etc/cron.weekly/makewhatis.cron ==== ②.Swap ==== [[01_linux:99_その他:02_swappiness]] # echo 1 > /proc/sys/vm/swappiness ==== ③.IOキューサイズ変更 ==== ディスクIOのキューサイズは低いほどレスポンス重視、高いほどスループット重視 # echo 1024 > /sys/block/ディスクデバイス名/queue/nr_requests # echo 128 > /sys/block/ディスクデバイス名/queue/nr_requests ==== ④.IOスケジューラ ==== [[http://city.hokkai.or.jp/~hachikun/IOScheduler.html]] # echo deadline > /sys/block/ディスクデバイス名/queue/scheduler # echo noop > /sys/block/ディスクデバイス名/queue/scheduler ==== read_ahead_kb ==== # echo 4096 > /sys/block/ディスクデバイス名/queue/read_ahead_kb ==== dm-*デバイス ==== dm-*デバイスは設定を反映せずにsd*から設定を継承します。 It is expected behavior that you only see the settings take effect for the sd* devices. The dm-* devices will not reflect the change directly but will inherit it from the sd* devices that make up its path. ==== ⑤.noatime ==== [[01_linux:09_ベンチマーク:31_noatime]] ==== ⑥.Writebackの設定 ==== [[http://portaltan.hatenablog.com/entry/2015/10/15/145823]] === vm.dirty_background_ratio === メモリ上のdirtyメモリが占める割合(%)。 この値を超えるとpdflushが呼び出され、write back処理がが行われる。 但し、このwrite back処理は優先度の低いバックグラウンドプロセスとして実行される。 デフォルト値は10%。単位は% # sysctl vm.dirty_background_ratio vm.dirty_background_ratio = 10 === vm.dirty_ratio === vm.dirty_backgroup_ratioとほぼ同じだが、この値を超えた場合は、write back処理が優先度の高いフォアグラウンドプロセスとして実行される デフォルト値は20%。単位は% # sysctl vm.dirty_ratio vm.dirty_ratio = 20 === vm.dirty_expire_centisecs === メモリ上に存在しているdirtyメモリの存在時間。 この値を過ぎた場合にwrite back処理が実行される デフォルト値は3000(30秒)単位は1/100秒 # sysctl vm.dirty_expire_centisecs vm.dirty_expire_centisecs = 3000 === vm.dirty_writeback_centisecs === pdflushデーモンが起動する間隔。 この間隔でdirtyメモリのデータが物理ディスクに書き込まれる デフォルト値は500(5秒)。単位は1/100秒 # sysctl vm.dirty_writeback_centisecs vm.dirty_writeback_centisecs = 500 ===== ネットワーク ===== ==== ①.sysctl.confに下記を追加 ==== #net.ipv4.tcp_syncookies net.ipv4.tcp_syncookies = 1 # net.ipv4.tcp_window_scaling net.ipv4.tcp_window_scaling = 1 # net.core.rmem_max net.core.rmem_max = 16777216 # net.core.wmem_max net.core.wmem_max = 16777216 # net.ipv4.tcp_rmem net.ipv4.tcp_rmem = 4096 87380 16777216 # net.ipv4.tcp_wmem net.ipv4.tcp_wmem = 4096 87380 16777216 # net.ipv4.tcp_no_metrics_save net.ipv4.tcp_no_metrics_save = 1 # net.ipv4.tcp_moderate_rcvbuf net.ipv4.tcp_moderate_rcvbuf = 1 # net.core.netdev_max_backlog net.core.netdev_max_backlog = 5000 #net.core.somaxconn net.core.somaxconn = 4096 vm.swappiness = 1 === New === https://pleiades.ucsc.edu/hyades/Linux_Network_Tuning # http://fasterdata.es.net/host-tuning/linux/ # allow testing with buffers up to 128MB net.core.rmem_max = 134217728 net.core.wmem_max = 134217728 # increase Linux autotuning TCP buffer limit to 128MB net.ipv4.tcp_rmem = 4096 87380 67108864 net.ipv4.tcp_wmem = 4096 65536 67108864 # increase the length of the processor input queue net.core.netdev_max_backlog = 250000 # recommended default congestion control is cubic net.ipv4.tcp_congestion_control=cubic # recommended for hosts with jumbo frames enabled net.ipv4.tcp_mtu_probing=1 vm.swappiness = 1 /sbin/ifconfig eth0 txqueuelen 10000 /sbin/ifconfig eth1 txqueuelen 10000 txqueuelenは、送信パケットのキューの長さです。OSによって違いがあるとは思いますが一般的にはMTU x txqueuelenの値がキューに保持可能なパケットのサイズ どこかで作ったパケットを送信するために一度パケットを並ばせる場所 == 反映 == # sysctl -p ==== ②.NICのオフロード機能を無効 ==== for file in `ls /etc/sysconfig/network-scripts/ifcfg-eth[0-9]` do ETH=`echo $file| sed 's/.*\(eth[0-9]\)/\1/g'` ethtool -K $ETH rx off ethtool -K $ETH tx off ethtool -K $ETH tso off ethtool -K $ETH gro off done === CentOS6 === CentOS6 ではなら TSO on / GSO off が良さそう。 [[http://uzy-exe.hateblo.jp/entry/2014/05/10/144824]] for file in `ls /etc/sysconfig/network-scripts/ifcfg-eth[0-9]` do ETH=`echo $file| sed 's/.*\(eth[0-9]\)/\1/g'` ethtool -K $ETH tso on ethtool -K $ETH gro off ifconfig $ETH txqueuelen 10000 done ===== tuned ===== コマンド一個で簡単にチューニングできるツール [[01_linux:09_ベンチマーク:tuned]] {{tag>ベンチマーク}}