2013年8月22日木曜日

/etc/hosts はホスト数が増えるとDNSより遅くなる

/etc/hosts にホスト名を書いて配るというのは、数台のマシンを管理する状況では誰しもやったことがあると思います。DNSクエリが発生しないのでとても早く、また単一障害点が発生しないメリットがあります。その反面、台数が増えてくると全部を更新するのがとても大変になるだけでなく、致命的な速度低下をもたらします。

今回は /etc/hosts と dnsmasq でどの程度速度が変わるのかをベンチマークしました。

テスト環境は

  • OS: CentOS 6.4 64bit, Linux 3.10.2
  • CPU: Intel Core i7-2600 @ 3.4GHz
です。

テストにはひたすら getaddrinfo(3) し続けるプログラムを作成し、名前を解決しました。 /etc/hosts には

10.234.130.1 host1301
10.234.130.2 host1302
10.234.130.3 host1303

のように適当なアドレスとホスト名を並べたものを作り、利用しました。なお端数の2件はIPv4とv6のlocalhostです。

比較対象に dnsmasq をローカルに立てて同じ内容の hosts ファイルを読ませたものを使いました。

結果は次のとおりです。単位は秒で、10万クエリあたりの所要時間です。

#hostshostsdnsmasq
21.5164.8068
1022.65984.9224
2524.44744.9286
100213.23764.831


結果は一目瞭然で、ホストのエントリ数が増加するに従って、hosts を引く時間はほぼ線形に増加しています。今回の構成では損益分岐点はおよそ250エントリ程度となりました。なお hosts に見つからなかった場合は hosts の検索時間に加えて DNS を引く時間がかかります。

こうなる理由は、hosts の中身はライブラリ(libc)によって処理されていて、毎回 fopen(3) して線形に検索しているからです。dnsmasqをはじめとする多くのネームサーバーはファイルから読み込んだあと、ハッシュなどを使って高速に検索を行います。

実際には1リクエストあたりの時間に換算すると0.05マイクロ秒程度で、hostsに1000エントリ書いた場合でも0.14マイクロ秒なので大した時間ではありません。ですが、場合によってはhostsを引くよりきちんとDNSを使ったほうが早くなる場合があるということは覚えておいて損はありません。

測定に用いたプログラムは下記のとおりです。
2013/08/23 追記: タイトルが「急激に遅くなる」というのは煽っていると指摘を受けたので変更しました。 測定ポイント数が少ないのは単なる手抜きです...
「そんな多数のホストがある状態で /etc/hosts にすべて書くのはありえない」的な意見も見受けられましたが、実際にあるんですよ... そういう状態に対してきちんとエビデンスを示す目的で書かれました。 DNSで実際に速度や冗長性を担保するには別の工夫が必要になりますが、それはまた別の記事で。

あと nscd 使えばっていう話があったので参考までに1002エントリhostsで走らせたところ
$ ./a.out 100000 host127183
Resolved 100000 times. Elapsed time = 0.740 seconds, 0.007 us per host.

こんくらいの速度だったので、何も考えずに200倍早くなります。

2013年7月27日土曜日

Growth Hacker Andrew Johns Meetup に参加してきました

Open Network Lab で開催されたGrowth Hacker Andrew Johns Meetup に参加して来ました。Facebook、Quoraのユーザー獲得チームで働いていた方です。

講演内容


講演の内容は3つでした。

1. ユーザー獲得は家計と同じ
  • 数パーセントの違いが複利で効いて、1年後には大きな違いを産む
  • 収入(ユーザー)を増やすことと、負債(技術的負債)を減らすことのどちらも重要
  • 一ヶ月で100%の成長が一回きりと、毎週3%の成長が1年間では後者のほうが効果を生む
  • 毎週1%の成長で年1.7倍、毎週3%だと1年で5倍の成長になる
2. 成長は個人だけでやることではなく、会社の変革が必要
  • 会社の文化が成長を求めるよう、文化を変える
  • 社内で積極的に情報発信し、チームを変え、会社のDNAを変える
  • "Growth Hack"の対象には会社自身も含まれる
3. シンプルさが大事
  • 機能を追加すると複雑さが増し、ユーザーは減少する(特に資金を得た後が危ない)
  • ユーザーを追うメトリックも単純なものを選ぶ
  • ゴールやチームのミッションもシンプルで共有しやすいものにする
そして大事なこととして「ダメなサイトを持続的に成長させることは不可能。プロダクトが優れていることは絶対条件。」が示されました。良いプロダクトの目安として、例えば1000人の新規登録ユーザーのうち2~3割が翌月も使い続けているとすると、そこそこ良い線だということです。

話の途中、いくつかの事例が示されました。

KPIとしては K + sqrt(abc) を使う。変数はそれぞれ

  • K: バイラルでの成長
  • a: プロダクト数の増加
  • b: プロダクトあたりのトラフィック
  • c: 売上のコンバージョン率
例えばamazonでは、aは極めて大きく、bも「プロダクトごとにpermalinkがあり、検索エンジンから流入するし、口コミでリンクを貼れる」などと工夫しています。Qiitaのようなサイトではaは記事数、bは記事あたりのトラフィック、cをサインアップする人の割合と読み替えると良いでしょう。
そして単純なKPIを決定したら、それぞれの部分、K, a, b, cごとにチームを組み、ミッションを割り当てるのが重要とのことです。例えばaを増やすのに専念する渉外チーム、bに専念するエンジニアチーム、cに専念するデザイナーチームという感じです。
この中でKを増やそうとするのは危険だそうです。というのも、口コミはコントロール出来ないし、企業が展開すると「押し付け」のようになってしまうからだそうです。

劇的な改善ができた例として、Twitterのサインアップページの例がありました。
Twitterでは、ユーザーが増加するに従いユーザー名の衝突が起きやすくなりました。そこで、サインアップページで氏名を入力すると、自動的に衝突しないユーザー名を提案し、フォームに自動入力する機能をつけました。そうすると、毎日6万人の新規登録が増えたそうです。

企業のDNAが重要な例として、MySpaceのトップページが挙げられました。
MySpaceでは収益を重視して、トップページに広告を掲載しました。すると新規登録が減少したというのです。逆にFacebookはユーザー増加が最重要ということで、トップページは新規登録に必要な情報に絞った結果、ユーザー数が増加するようになったとか。

実験を簡単に、多数できるようにする環境づくりも重要だそうです。
Quoraでは新しいことをすぐ実験、数値解析ができるプラットフォームに投資し、200以上の実験を行なってくることができたと示されました。とにかく実験しないと、例えば70個ぐらいのアイデアのうち多少なりともうまく行ったのは15個、大成功したのは3個程度という打率で、やってみないとわからないことも多そうです。

感想


今までのKPIはDAU, ARPUなど「ストック」に注目するものが多かったところ、「フロー」に着目して成長を定量化するという視点が新鮮でした。いかにユーザーが登録までに遭遇する障害を取り除くかというところに着目するとこれだけ新規登録が増えるということは、変なフォームで諦めてしまう人も多いのかなと思いました。
最近どのようなKPIを取ればプロダクトの状態がわかるかというのが話題になっていますが、この「フロー」をよく見るいうのはひとつの答えだと思いました。

2013年7月26日金曜日

コミケ84、3日目に参加します!(東5 ヘ-46b)

8月12日に、コミケ84に参加します!
スペースは東5ホール ヘ-46bです。通路すぐなのでわかりやすいと思います。

販売予定の本は

Linux Kernel Updates, Vol. 2013.08

内容は、
  • Linux 3.8~3.10の新機能
  • カーネルを更新するには
  • Modern Socket Programming
  • カーネルソース読書ガイド
  • マルチコアを使いこなす
です。
表紙はきのとなおとさんに描いていただきました。

冬コミで頒布した本も増刷して持っていきます。こちらは3.7の話と、主にスケジューラーについてまとめてあります。

みなさまとお会いできることを楽しみにしています!

2013年6月28日金曜日

グリーを退社しました

本日がグリー株式会社での最終出社日でした。実際の退職は月末ですが、事実上もう会社に行くことはありません。 ... 前にパナソニックの退職エントリを書いてから1年ちょっとしか経っていませんが、新しい仕事に挑戦したくなり、退職を決めました。

組み込みエンジニアからWebのインフラエンジニアへの転身という「どうしてこうなった」的なキャリアパスでしたが、コンピュータサイエンスやプログラミングの知識そのものは共通で使えました。カーナビのブートローダーやデバイスドライバを書いた経験なんてどれぐらい役に立つのかなと思っていましたが、案外 Linux のカーネルレベルでの解析やチューニングに携わることが多く、また Apache や PHP も C言語で書かれているので、直接経験が生かされた感じです。本当に幸運でした。 でも PHP は結局書けないままです...

働いてみて一番よかったと思ったのが、書籍や勉強会などで積極的に発表している人が身近にいたということです。グリーで働くまでは結構遠い存在のように思っていたのですが、入ってみると隣の机だったりすることがあり、とても良い刺激になりました。 また社内での勉強会もあり、仕事に関係があってもなくてもとにかく「学ぶ」ことに意欲的な人が多かったです。

相変わらず女性エンジニアはレア度が高く、これはもう業界にいる限り仕方がないかなという気がします... でもそんな中、以前掲載されたTech総研でのインフラ女子特集に載っている人たちが同僚で、とても楽しかったです。

転職の理由で一番大きいのは、もっと小さなところから新しいものを作り上げる過程に挑戦してみたいということです。 次は社員数二桁、設立2年ちょっとの会社で働きます。

狭い業界なので会社が変わってもお付き合いする人は変わらないと思いますし、次も東京で働くので今後ともよろしくお願いします。

2013年4月3日水曜日

SimCity がプレイできるようになるまで

EA/Maxis から新しい SimCity が発売されました。私はこのシリーズのファンなので、昨年の11月に予約し、発売を今か今かと待っていました。2月17日のβテストにも参加しました。発売日にはダウンロードしてプレイし、サーバーに接続できない苦しみも味わいました。
ところが、その後3月8日に異変が起こります。注文がキャンセルされ、6日後の14日にはプレイできない状況になります。その後再びプレイできるようになるまで、いろいろな問い合わせを行い、最後は国際電話をしましたので、その記録です。

2012年11月にゲームを予約注文します。しかし、その後注文に使ったクレジットカードが不正使用され、新しい番号に切り替えてもらっていました。SimCity の注文を切り替えてはいませんでした。

3月7日、SimCity が日本で発売されたのでプレイを始めました!

3月8日、「注文がキャンセルされました」というメールが届いたので、カードに請求がないことを確認の上もう一度購入しようとしました。すると「すでに購入したことがあります」と表示され購入出来ません。EAのサポートにフォームで問い合わせました。この時点ではゲームはプレイできていました。

3月14日に、SimCity をプレイしようとすると「アカウントのシムシティが有効になっていません。 Origin でシムシティを有効にしてください。」というメッセージが現れました。終了するをクリックするとゲームが終了し、全くプレイ出来ません。EA から返答がないので、再びフォームから問い合わせました。

3月15日。全く返事がないので電話しました。意外とあっさりつながったので要件を伝えました。問題を認識したのでエスカレーションすると言われ、電話は終了しました。

3月18日、ためしてみると SimCity が購入できるようになっていたので、もう一度購入しました。すると、購入してマイゲームには現れたのですが、相変わらず「有効になっていません」という表示が出ます。カードの請求も発生しました。状況が変わったのですでに問い合わせていたフォームのチケットにコメントを書き込みました。その一方で、このままでは埒があかないので、Origin の言語設定を英語にすると現れる Live Chat を使って問い合わせました。事情を一から説明すると「処理が遅れてるので、少し待ってほしい。すぐにプレイできるようになるはず」と言われました。

3月19日、相変わらずプレイできないので、もう一度 Live Chat で問い合わせました。問い合わせ番号を伝えたのですが、もう一度最初から説明させられました。すると「ゲームをプレイする権利が何らかの理由で付与されていない。これを解決する専門の部署があるので、電話してほしい」と言われ、アメリカの電話番号を伝えられました。要件を転送して解決できないのかと言いましたが、転送はするが電話も必要だと言われました。日本の窓口に電話したのですが、混雑しているという録音とともに切断されました。

その日の深夜に電話をしたのですが、30分経ってもつながらなかったので諦めました。

3月20日、時間を確保して電話しました。1時間20分待たされてつながりました。問い合わせ番号を伝えましたがまた最初から説明する必要がありました。 20分ほどかかって問題を解決してくれ、その場でゲームを有効にしてくれました。もう一度電話するのは嫌だったので、その場でプレイできるか確認し、電話を切りました。

結局フォームから問い合わせたものは、電話で解決するまでに返事はありませんでした。Live Chat の待ち時間はだいたい50分ぐらいで、こちらは残り時間が出るのでいいのですが、電話で待ち時間が出ないまま延々待たされるのはつらかったです。 また、タイムゾーンが東海岸なのでそれに合わせて電話しなければならないのと、秘密の質問を日本語で記入していたためこれを英語で説明するのに戸惑った、というのが日本からアメリカへの電話ならではの苦労でしょうか。

EA のゲームはプレイするまでもゲームというのを身を持って体験しました。結局1週間弱プレイできなかったのですが、その間にそこそこサーバーは安定し、プレイできるようになってました。バグはいっぱい残ってますが... その後は睡眠不足になるぐらいに楽しんでます。

メインは東欧3でプレイしてます。アカウントは Yuryu-Haruka です。ぜひ誰かと一緒にプレイしたいです!

2013年1月4日金曜日

Plextor PX-256M5P vs 東芝 DT01ACA300BOX

初SSD記念でベンチマーク取りました。

両方ともシステム入れて使ってたり、いろんなデータすでに置いている状態なので、理想状態よりは遅くなっているであろうことを申し添えておきます。

SSD: Plextor PX-256M5P

-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 Shizuku Edition x64 (C) 2007-2013 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :   513.421 MB/s
          Sequential Write :   446.646 MB/s
         Random Read 512KB :   381.395 MB/s
        Random Write 512KB :   427.883 MB/s
    Random Read 4KB (QD=1) :    28.854 MB/s [  7044.4 IOPS]
   Random Write 4KB (QD=1) :    50.956 MB/s [ 12440.3 IOPS]
   Random Read 4KB (QD=32) :   388.745 MB/s [ 94908.5 IOPS]
  Random Write 4KB (QD=32) :   348.163 MB/s [ 85000.8 IOPS]

  Test : 1000 MB [C: 24.1% (57.3/238.0 GB)] (x5)
  Date : 2013/01/04 0:36:10
    OS : Windows 8  [6.2 Build 9200] (x64)

HDD: 東芝 DT01ACA300BOX(3TB, 7200rpm)

-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 Shizuku Edition x64 (C) 2007-2013 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :   174.792 MB/s
          Sequential Write :   174.704 MB/s
         Random Read 512KB :    48.242 MB/s
        Random Write 512KB :    71.147 MB/s
    Random Read 4KB (QD=1) :     0.554 MB/s [   135.2 IOPS]
   Random Write 4KB (QD=1) :     0.620 MB/s [   151.4 IOPS]
   Random Read 4KB (QD=32) :     1.516 MB/s [   370.2 IOPS]
  Random Write 4KB (QD=32) :     0.641 MB/s [   156.5 IOPS]

  Test : 1000 MB [D: 25.3% (707.1/2794.4 GB)] (x5)
  Date : 2013/01/04 0:42:54
    OS : Windows 8  [6.2 Build 9200] (x64)

文字通り桁が違います。システムドライブはもう SSD 以外考えられません。

2013年1月3日木曜日

コミケ83報告

コミケ83で Linux Kernel Updates を出します!(31日東X-58b)の事後報告です。

予想外に好評をいただき、50部持っていったのですが11時半ごろに完売してしまいました。「どうせ余るだろうから、ゆっくりいらしてください」と事前にアナウンスしていたので、午後にいらっしゃった方々、申し訳ありませんでした。

いただいたご意見の中に「Linux の変更点を最近追いかけているサイトがないので、まとめてもらえるなら実は需要あるんじゃない」というものがありました。実は KernelNewbies.org がすごくよくまとまっているので、そこを見ながら、自分が気になった新機能についてはまとめていく、なんてことが出来ればいいなぁと思います。

夏コミにも応募します。もし受かれば内容は若干古くなってしまいますが、同じ物を再販して持っていきます。そして、新しい本も出します。今度は調子に乗ってもう少し多めに持っていくつもりです。中身はまだ決定はしていませんが、Linux Virtual Server の中身と、スケジューラーの SMP 対応コードの解説なんかを考えてます。

なお、冬コミ本の中身のうち What's New in Linux 3.7? については、旬を過ぎるとおもしろくないのでBlogに掲載しました。買ってくださった方には少し恐縮ですが、もともとが Web に載っている情報なのでご容赦いただければと思います。