Kernelの2.6.30が出たので再構築ついでに、CSのサーバのFPS値について見直しました。
結果、せれろん420を使っているうちの糞鯖も1000FPSが出るようになりました。
以下参考にならないKernel再構築メモと、CSの設定について。
Kernel再構築
現在のバージョンを確認
uname -r 2.6.29
最新版のダウンロードと解凍。
本家では遅いので、日本のミラーサイトからダウンロードしてくる。
解凍時、tar.gzだとなぜか「予期せぬEOFが〜」とかいうエラーを吐いて中断を食らうので、
tar.bz2形式でダウンロード。解凍コマンドもそれにあわせる。
wget http://www.jp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.tar.bz2 tar jxvf linux-2.6.30.tar.bz2 cd linux-2.6.30
設定ファイルの持ち越し。
以前の設定ファイルがある場合は、それを引用することで設定の手間が少し省ける。
cp 〜/.config .config
設定をする。以下のようにすると、GUIっぽい設定画面がでる。
リモート接続の環境によっては正しく見られないらしいので、
リモート操作ではなく直接繋げてみたりする。
make menuconfig
http://wiki.fragaholics.de/index.php/EN:Linux_Kernel_Optimization#Configuring_and_building_the_Kernel
を参考に、設定を行う。
僕の行った主な設定は以下のとおり。
- Processor type and features:
- Tickless System (Dynamic Ticks)を無効
- High Resolution Timer Supportを有効
- Processor family をメーカーと型番、コードネームなどに注意して選択。
- Preemption Modelで「No Forced Preemption (Server)」を選択
- Machine Check Exceptionを有効
- Timer frequency で 1000Hz を指定
- Power management options
- Power Management supportを有効
- Power Management Debug Supportを無効
- Suspend to RAM and standbyを無効
- Hibernation (aka 'suspend to disk')を無効
- ACPI (Advanced Configuration and Power Interface) Supportを有効
- CPU Frequency scaling の CPU Frequency scalingを無効
- Networking support
- Networking options
- Packet socket: mmapped IOを有効
- ファイアーウォールを使わない場合は、Network packet filtering frameworkを無効。
- QoS and/or fair queueingを無効
- Networking options
- Device Drivers
- Watchdog Timer Supportを無効
- Real Time ClockとPC-style 'CMOS'を有効
- Kernel hackingの項目を全て無効にする
不要なデバイスドライバ(Bluetooth, 無線など)混ざっていたりするので、
使うことがないのなら切るとKernelの軽量化に繋がる。
また、もし、iptableを使う場合は、Networking support設定が必要なので注意。
以下を参考に設定をする。
http://www.freewheelburning.com/linux/iptables2.html
その後、param.hの編集を行うのだが、非常に数が多い。
findコマンドで探すとよくわかる。
[root@localhost linux-2.6.30]# find ./ -name 'param.h' ./arch/mn10300/include/asm/param.h arch/s390/include/asm/param.h arch/xtensa/include/asm/param.h arch/sparc/include/asm/param.h arch/um/include/asm/param.h arch/alpha/include/asm/param.h arch/cris/include/asm/param.h arch/m68k/include/asm/param.h arch/avr32/include/asm/param.h arch/arm/mach-netx/include/mach/param.h arch/arm/include/asm/param.h arch/arm/plat-omap/include/mach/param.h arch/arm/mach-pnx4008/include/mach/param.h arch/m32r/include/asm/param.h arch/blackfin/include/asm/param.h arch/x86/include/asm/param.h arch/frv/include/asm/param.h arch/powerpc/include/asm/param.h arch/h8300/include/asm/param.h arch/ia64/include/asm/param.h arch/parisc/include/asm/param.h arch/mips/include/asm/param.h arch/microblaze/include/asm/param.h arch/sh/include/asm/param.h drivers/char/rio/param.h include/linux/param.h
上のファイルの中から、環境にあっているものを開き、以下のように編集。
-# define USER_HZ 100 +# define USER_HZ 1000
環境にあっているものがわからなかったら、全て開いて置き換えると間違いがない。
でも文字列の置換がめんどくさい!という場合は、
以下のコマンドで自動的に上記の置換をしてくれるはず。自己責任で。
find ./ -name 'param.h' -print0 | xargs -0 perl -pe 's/USER_HZ\s+100\s+/USER_HZ\t1000\t/g
設定が終わったら、makeする。
僕の環境では以下のエラーが出た。
CC init/version.o LD init/built-in.o LD .tmp_vmlinux1 ld: unrecognized option '--build-id' ld: use the --help option for usage information make: *** [.tmp_vmlinux1] エラー 1
どうやら、「ldコマンドに--build-idオプションはないよ」っていうことらしい。
心当たりがあるとしたら、どうしても4.3.3のGCCをコンパイル導入できなくて、
得体の知れないGCCバイナリをどこからか拾ってきて、上書き導入したこと。
この時にldコマンドも一緒に上書きされて、調子が悪くなったんじゃないか、と推測。
解決のためには、gnu ldを導入しなおせばいいはずなのだが、コレを入れるには、
GCCを拾ってきて、makefile作成時に--with-gnu-ldってオプションをつけなければならない。
でもGCCをコンパイルがうまくいかないわけで・・・困ったちゃん。
もしかしたらfindコマンドで得体の知れないldコマンドがあるかもしれない、と探してみると、
見事にヒットしたので、/usr/bin/ldにこのldのシンボリックリンクを張ってみた。
気を取り直し、makeをする。非常に長い。
makeを実行したら、風呂入ったり、布団に入って寝たほうがいい。僕は寝た。
make
コンパイルしたもののインストール
make bzImage make modules make modules_install make install
/etc/grub.conf が書き換えられ、新しいKernelではなく古いKernelを使って起動する設定になっているので、
先ほど入れたKernelを使うように、 /etc/grub.conf を編集。
-default=1 +default=0
再起動
shutdown -r now
再起動後、バージョンを確認。
uname -r 2.6.30
お疲れ様でした。
CS鯖
サーバのsys_ticrateを1000→1200に変更。それだけ。
今までの1000だと、なぜか500〜800ぐらいしか出ないので、
思い切って1200にしてみたら、1000FPSが出るようになった。
ただ、POD-BOTを5体入れると、不安定になる。
どうみてもスペック不足
] rcon stats CPU In Out Uptime Users FPS Players 99.90 5.61 7.51 695 12 1000.00 1 ] rcon stats CPU In Out Uptime Users FPS Players 99.90 5.36 7.04 695 12 969.93 1 ] rcon stats CPU In Out Uptime Users FPS Players 99.90 5.32 6.89 695 12 624.61 1
CPU使用率は、
rcon stats読みで99.90だが、topコマンド読みでは30%前後。
結構差があるんだね。なんでだろうか。
CSの鯖はstatsで見るほどCPUを食ってないのか、topコマンドがおかしいだけなのか。