人間とウェブの未来

「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。

CPU使用率100%のWebサーバをOSのチューニングだけでCPU使用率20%まで改善する

こんばんは、 @matsumotoryです。

hb.matsumoto-r.jp

上記エントリにおいて、プロセスの大量メモリ確保に伴うページテーブルサイズとベージテーブルエントリ数の肥大化によるcloneやexecveの性能劣化とCPU使用時間の専有問題、および、それらの解決方法についてシステムコールレベルで確認しました。

そこで今回は、システムコールやそのカーネル内部の処理の性能、というよりは、より実践的な環境であるApache httpdとmod_cgiを用いて、phpinfo()を実行するだけのCGIに対してベンチマークをかけた時にどれぐらいCPUのidleが空くか、システムCPUの使用量が変わるかを、前回示した解決方法の1つであるHugePagesを使うかどうかの観点で比較してみましょう。

特定条件下のWebサーバ環境のシステムCPUに起因する高負荷問題から、システムコールやカーネルのソースコードを読みながら根本原因の仮説をたて、それを前回エントリで検証してミクロな視点で効果を確認した上で、今回は再度実践的な環境で負荷検証を行って、OS・カーネルレベルの対応が全体として実践的な環境でどれぐらい効果があるかを確認したいという意図です。

続きを読む

特定条件下のclone(2)を4倍速くする

とあるサーバで妙にシステムCPUの使用率が高い現象が置きておりました。

そこで、まずはざっくりとperf topでプロファイルをとってみると、以下のようになっていました。

 22.38%  [kernel]             [k] copy_pte_range
 18.44%  [kernel]             [k] zap_pte_range
 11.13%  [kernel]             [k] change_pte_range
  3.58%  [kernel]             [k] page_fault
  3.32%  [kernel]             [k] page_remove_rmap

また、各プロセスのstraceを眺めていると、cloneで0.05秒とかなり時間がかかっているようです。これだと単純計算で1コアで秒間20回のcloneでコア100%占有してしまう程度の非常に低速な処理しかできないことになります。

sudo strace -T -o/dev/stdout -p pid | perl -ane '/<([\d\.]+)>/; print $_ if $1 > 0.01;'
...
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f97ea77ea10) = 7333 <0.051777>
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f97ea77ea10) = 7334 <0.053510>
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f97ea77ea10) = 7335 <0.053426>
...

このサーバはforkを沢山するサーバで、そのfork元のプロセスはRSSが2GBとかなりメモリ多めのプロセスとなっていました。単純にはこの時点で、fork時の中で呼ばれるclone(2)から何らかの形でcopy_pte_rangeなどが呼ばれ、そこで処理に時間がかかって、clone自体が時間がかかっている、と予想できます。

しかしなんだろこれ、ということでKernelのコードからその原因を調査していきました。

続きを読む

エンジニアが技術力を高めるもう一つの理由 - はてな・ペパボ技術大会を経て

はてなさんと共催で行った「はてな・ペパボ技術大会@京都」と「ペパボ・はてな技術大会@福岡」が無事終わりました。

http://developer.hatenastaff.com/entry/2016/06/21/131302

ペパボ社内では、はてなサービスとその技術力の高さのファンが多く、はてなさんと一緒にこんな技術イベントできるなんて!!と喜んでいる人たちも沢山いましたし、僕自身もご一緒できてとても嬉しかったです。技術大会後の打ち上げも含めて、すごく盛り上がったしとにかく最高でめちゃくちゃ楽しかったです。

id:y_uukiさんをはじめ、はてなさんの若手エンジニアのスキルは圧倒的に高く、id:ichirin2501さん、id:masayoshiさん、id:taketo957さん、そして、技術大会で諸々沢山調整してくださった、id:wtatsuruさんとid:tomomiiさん、座談会をモデレータをやってくださったid:stanakaさんありがとうございました!

続きを読む

PHPカンファレンス福岡2016に初参加しひとつの確信を得た #phpconfuk

先日PHPカンファレンス福岡2016に参加してきました。

一つ前の記事でここ半年の登壇についてまとめており、その中でPHPカンファレンスにも触れる程度にとどめていたのですが、PHPカンファレンス福岡の振り返り記事やツイートまとめの中で多くの方に僕の発表について言及して頂けており、僕も初参加なのでちゃんと書こうと思って、今出張先のホテルで書いております。

続きを読む

カーネルスレッドのループと停止をカーネルモジュールで実装

以前Linuxのカーネルスレッドがループして暴走したときに、カーネルスレッドの扱いを調べていた時期があって、それの簡単な動きを再現するべくカーネルモジュールを作りました。まずは、自力で試したい人は以下を見ずに試すと良いでしょう。

続きを読む

1月から5月の技術関連の登壇資料まとめと振り返り

1月から上期がはじまり、昨年は出産関連などで9月を最後にあまり登壇できていなかったので、今年は頑張るぞ〜と意気込んでいたわけですが、怒涛のように登壇依頼がやってきて、やばいこれはきついぞ!と思いながらもなんとか一段落するところまでやり切れたのでちょっとどこかに旅にでたいです。

その前に、結構登壇して色々喋ったり資料作ったりしたので、時系列でまとめておきます。

今期は技術カンファレンスだけでなく、学術研究方面でも発表できたので、自分の立ち位置としてはわりと網羅的に発表できたかなと思います。

全体

まずは以下に1月から5月までの全体の発表実績をリスト化しました。

  1. 松本亮介, ロリポップ!で目指すPHPのためのセキュリティと性能要件を同時に満たすサーバホスティング技術, PHPカンファレンス福岡2016, 2016年5月.
  2. 松本亮介, なめらかなシステムのアイデアと概要設計: 生命の観点からWebシステムを解釈する, e-ZUKA Tech Night, 2016年5月.
  3. 松本亮介, セキュリティと性能要件を同時に満たすサーバホスティング技術の最新動向, 第39回インターネット技術第163委員会研究会 -ITRC meet39-, 2016年5月.
  4. 松本亮介, cgroupとLinux Capabilityの活用 - rcon and capcon internals, 第9回 コンテナ型仮想化の情報交換会@福岡, 2016年4月.
  5. 松本亮介, なめらかなシステム: 人工知能はホスティングサービスの暗闇も救う, GMO HosCon -Hosting Conference- @大阪, 2016年4月.
  6. 松本亮介, モデレータ:GMOグループトークセッション:国内シェア54%を支えるGMOホスティングの裏側, GMO HosCon -Hosting Conference- @大阪, 2016年4月.
  7. 松本亮介, なめらかなシステム: 人工知能はホスティングサービスの暗闇も救う, GMO HosCon -Hosting Conference- @渋谷, 2016年4月.
  8. 松本亮介, 登壇:GMOグループトークセッション:国内シェア54%を支えるGMOホスティングの裏側, GMO HosCon -Hosting Conference- @渋谷, 2016年4月.
  9. 松本亮介, エンジニアトークセッション「ペパボ福岡でたずさわる最高のエンジニアリング」, ペパボ福岡で働く~エンジニア・ディレクター向けトーク&相談会 in大阪~, 2016年3月.
  10. 松本亮介, 人工知能はWEBサーバーの暗闇を救う, IPSJ-ONE 2016, 2016年3月.
  11. 松本亮介, ペパボ福岡の技術的強み なぜ今エンジニアはペパボ福岡で働くべきなのか, 【人気都市・福岡で働く!】移住にまつわるエトセトラ〜エンジニア・ディレクター向けトーク&相談会〜, 2016年2月.
  12. 松本亮介, HTTP/2とmrubyの活用 HTTP/2時代のサーバ設定になぜmrubyが必要か, 第2回技術共有会, 2016年1月.
  13. 松本亮介, PFSを考慮したTLS終端とngx_mrubyによる大量ドメイン設定の効率化 nginxにおける大量ドメインの証明書を動的に処理する方法, 第1回技術共有会, 2016年1月.

ではそれぞれ1つずつ振り返っていきます。

続きを読む