タグ別アーカイブ: isucon

isucon4予選AMIが公開されたのでPHPでやってみた(score:54491)

前置き

人がやったことは見ないようにはしてたけど、

まあ概要知っちゃってるし、

合間の時間でやったために合計で何時間かかったかは

分からない(体感では実作業時間は合計10時間くらい)ので、

それなりに良いスコアが出ましたが、

自慢でもなんでもなく、ただの自己満であり、兼メモです。

 

やったこと

  • MySQL5.6への入れ替え&チューニング
    • MySQLの存在感がほぼ無くなったので意味無かったw
  • Nginxの細かいチューニング(参考
  • Sessionの保存先をtmpfsに移す
  • ついでに静的ファイルもtmpfsに移す
    • 再起動時に消えるとOUTなので、
      /etc/rc.localに移すコマンドを入れておく
  • トップページの静的ファイル化
    • 初めはプロキシキャッシュにしようとしたんですが、
      Session IDのSet-Cookieもキャッシュされるため(?)
      ダメだったので諦めました
    • ベンチマークではクエリストリングを見てなかったので、
      クエリストリングを目印に返す対象をrewriteする
  • php-fpmのプロセス数調整
    • プロセス数は固定
      pm=static
    • プロセスの再生成は行わない
      pm.max_requests=0
    • 結果的にはNginx、php-fpm共に
      CPUコア数(4)と同じプロセス数がベストだった。
  • Opcacheのスクリプト更新チェックや不要なオプションをOFFにする
    opcache.revalidate_freq=0
    opcache.validate_timestamps=0
    opcache.save_comments=0
    opcache.load_comments=0

  • データを全てAPCuキャッシュに載せる
    • login_logはINSERTはするけど、
      永続化が必須条件の最後の集計だけのために使う
    • login_logは単純に置き換えるのではなく、
      必要な形で集計した値
    • usersはそのまま
    • 初期化処理でDBに入るデータは、
      初期化処理の最後でAPCuに写す
  • APCuキャッシュによって、
    login_logは遅延書き込みが許されるようになったため、
    ENGINE=MyISAMにしてINSERT DELAYED文にして非同期化
  • 集計処理がタイムアウトするようになったので、
    少しだけインデックス追加

実際の設定ファイルやらソース

 

結果

[isucon@ip-10-175-1-202 ~]$ ./benchmarker bench --workload='8'
13:54:13 type:info message:launch benchmarker
13:54:13 type:warning message:Result not sent to server because API key is not set
13:54:13 type:info message:init environment
13:54:36 type:info message:run benchmark workload: 8
13:55:36 type:info message:finish benchmark workload: 8
13:55:41 type:info message:check banned ips and locked users report
13:55:43 type:report count:banned ips value:1033
13:55:43 type:report count:locked users value:5071
13:55:43 type:info message:Result not sent to server because API key is not set
13:55:43 type:score success:252250 fail:0 score:54491

 

ということで、

あと少しで、しばらくPHP書かなくなると思うので、

最後に腕試しを兼ねてやってみた。

実際に参加して、時間制限内に同じことができるかというと、

たぶん無理だけど、予選結果の中でも上位で、

PHP実装の中では一つ頭抜けたスコアが出せたので、

心置きなくPHP卒業(?)できますw

 

来年は相棒見つけて出たいなー