タグ

performanceに関するgfxのブックマーク (40)

  • 【これはすごい】Twitter検索を3倍高速化した記事の翻訳 - nokunoの日記

    これはすごい! というわけでTwitter検索を3倍高速化したという記事を翻訳してみました。Twitter Engineering: Twitter Search is Now 3x Faster2010年春。Twitterの検索チームは、我々の増え続けるトラフィックに対応し、エンドユーザにとっての遅延を減らし、我々のサービスの可用性を向上させ、新しい検索の機能を素早く開発できるようにするため、検索エンジンを書きなおす作業を始めた。 その努力の一部として、我々は新しいリアルタイム検索をリリースし、検索のバックエンドをMySQLからLuceneのリアルタイム版に変更した。そして先週、我々はRuby-on-Railsに取って代わるフロントエンドをローンチした。我々がBlenderと呼ぶJavaサーバーである。我々はこの変更によって検索のレイテンシが3分の1になり、検索機能の開発を促進できるよう

  • ソーシャルゲーム開発者なら知っておきたい MySQL INDEX + EXPLAIN入門|技術ブログ|北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ

    ソーシャルゲーム開発者なら知っておきたい MySQL INDEX + EXPLAIN入門 広く浅くを担当してます、ota です。 技術ブログ第一回から早速流用スライドで申し訳ありませんが、社内勉強会資料として作成した「MySQL INDEX + EXPLAIN入門」です。 当社でもソーシャルゲームの開発を行っていますが、このような大量のデータを使用する・クエリの速度が求められる場合にインデックスは大変重要です。 インデックスの有効な利用にはDB設計者だけではなくプログラマにもある程度の知識が最低限必要となりますが、インデックスについての初心者向け資料があまりないようです。 このスライドではプログラマに知っておいて欲しい以下の基的な点をまとめました。 INDEXを使用する時に気をつけること WHERE句 !=、<>はインデックスが使用できない WHERE句の全てのANDにかかっていないイン

    ソーシャルゲーム開発者なら知っておきたい MySQL INDEX + EXPLAIN入門|技術ブログ|北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ
  • Objective-Cの『遅さ』を計測したら、JavaやC++の5倍も遅かった

    なお、メモリ消費量はtopコマンドで測ったので、かなり大雑把な数字だ。また、Cで同様の処理のコードを書くと、ほぼC++と同じ速度になる。 追記(2011/02/17 8:50):Rubyによるベンチマークを追加。 追記(2011/02/17 11:00):Smalltalkによるベンチマークを追加。ソースコードは「Smalltalkのtは小文字です」のループ回数を修正した。 追記(2011/02/17 16:00):Perlによるベンチマークを追加。 追記(2011/02/18 10:30):Java 1.6.0_22で実行した、Scalaによるベンチマークを追加。また、clang/llvmでC++とObjective Cの値を取り直し、改善が見られないのを確認。 追記(2011/02/18 14:30):Ruby 1.8.7によるベンチマークを追加。1.9.2との速度差については、@IT

    Objective-Cの『遅さ』を計測したら、JavaやC++の5倍も遅かった
    gfx
    gfx 2011/02/16
    C++ = Java (JIT) > Objective C = Java って感じか。Javaスゴス。
  • 開発メモ: Kyoto Cabinetのロック機構の改善

    Kyoto CabinetはIO負荷が高い場合にCPU負荷も高くなりがちだという指摘を受けて、それを解決すべくロック機構を見直したという話。 スロットロック ハッシュテーブルの操作はハッシュバケット毎に完全に独立して実行できるのが強みだ。ハッシュテーブルは計算量が有利なだけでなく、並列性にも優れるということ。実際には下層のファイルIOで実装依存の排他制御が行われることになるが、ハッシュ層だけ見れば理想的な並列性を備えている。ただし、同じバケットに連なるレコード群の操作は互いに依存関係があるので、それらは一括して排他制御してやる必要がある。となると、バケット毎にロックを用意するのが理想だが、実際にはメモリを節約するために、予め決めた数のロックを用意して、ここのロックに複数のバケットを割り当てる構成をとる。リソース空間をスロットに分けるというイメージから、これをスロットロックと呼ぼう。 スロッ

    gfx
    gfx 2011/02/13
    "ほとんどブロックしないユースケースでは自作スピンロックの方が効率が良いのだが、それなりにブロックが発生する場合にはやはりOSのrwlockの方が総合的に得であると判断した"
  • 開発メモ: DBサーバのnoreplyオプションによる高速化

    Kyoto Tycoonやmemcachedにてnoreplyオプションを使ってパフォーマンスを上げる話。 noreplyの功罪 DBに対する更新操作はその成否を真偽値などとして呼出側に返すのが通常であるが、それを省略することでパフォーマンスを上げることができる。memcachedではnoreplyオプションとして知られている。KTの最新版からは、memcachedプラグインと独自バイナリプロトコルでもnoreplyオプションをサポートすることにした。 noreplyを有効にするとなぜ高速化するのか。クライアントはクエリをsendしただけで、recvをせずに次の処理に移れるからだ。sendシステムコールに渡したデータはカーネルが非同期に処理するので、カーネルとアプリケーションは並列に処理を進めることができる。recvをした場合にはその時点で両者の待ち合わせが発生してしまうのだが、それをしな

    gfx
    gfx 2011/01/14
    "ダサくて後ろめたいnoreplyだが、驚くほど高速化してしまうのが困ったものだ。使える部分ではうまく使っていただきたい。"
  • Sam Graham's website > Projects > Perl Template Roundup > October 2010 > Performance vs Variant Report: instance_reuse

    In each of the charts below, a bigger bar and higher number for performance is better. In the performance drop-off charts a higher (less negative) percentage is better, that is -75% is better than -95%. Proportionally speaking, a narrow difference between the biggest and smallest colours of the performance drop-off chart is better than a wide difference, although pay attention to the percentage va

    gfx
    gfx 2010/11/08
    Xslate速いなー(ただしinstanceを再利用できるばあいに限る)
  • 404 Blog Not Found:HTTPサーバーのパイプライン対応

    2006年12月21日17:30 カテゴリSciTech HTTPサーバーのパイプライン対応 今回は、HTTPのパイプラインの話。 「RFC2616の同時接続数の規定」@水無月ばけらのえび日記 「HTTPの同時接続数はどうあるべきか? (slashdot.jp) 」というお話。誰も原文を引用していないのが悲しかったので、引いておきます。 スラッシュドット ジャパン | HTTPの同時接続数はどうあるべきか?-taka2さんのコメントそれなら、「同時接続」しなくても、結果が返ってくる前に次のリクエストを送出して「リクエスト送信」と「結果受信」を並行して行えるようになれば、スループットの向上は見込める。 それがパイプライン化 [mozilla-japan.org]で、同時接続するよりも効率が良い。パイプライン化の前に、HTTPで何が行われているのかを、実際に見てみよう。telnetコマンドがあ

    404 Blog Not Found:HTTPサーバーのパイプライン対応
  • キャッシュしよう

    京都観光で散財しすぎて貯金がないmalaです。こんにちは。キャッシュの話を書きます。 色んなキャッシュがあります データベースから引く前にmemcachedから取得したり テンプレートエンジンのレンダリング結果をキャッシュしたり 各種ウェブサービスのリクエスト結果をキャッシュしたり その他諸々CPUったり時間のかかる処理をキャッシュしたり 簡単に思いつくのはこの程度ですが、スケーラブルなウェブサイトを構築するには常識的に考えてそんなのキャッシュしねーだろうというようなものをキャッシュする必要があります。 DateTimeをキャッシュしよう 同じ時刻に対するDateTimeオブジェクトをキャッシュします。 package MyDateTime; use strict; use base qw(DateTime); my %CACHE; sub now { my $class = shif

  • Devel::NYTProf v4 201007 (OUTDATED, see 201008)

    Slides of my talk on Devel::NYTProf and optimizing perl code at OSCON in July 2010. It covers the new features in NYTProf v4 and outlines a multi-phase approach to optimizing your perl code. Best viewed fullscreen. A screencast of this talk, that includes a demo, can be viewed at http://blip.tv/file/3913278 An updated version of the slides can be viewed at http://www.slideshare.net/Tim.Bunce/devel

    Devel::NYTProf v4 201007 (OUTDATED, see 201008)
    gfx
    gfx 2010/07/22
    すばらしいスライド!
  • はてなダイアリーの高速化の裏側 - stanaka's blog

    先週、ダイアリーがリニューアルされました。今回のリニューアルはダイアリーの応答時間の改善が目玉の一つとなっており、そのために1週間リリースを延ばし、改善の時間を確保していました。今回は、この改善について記しておきます。 はてなでは「推測するな、計測せよ」の原則にしたがって、ダイアリーのユーザーページの全アクセスの応答時間を解析し、ヒストグラムを作っています。また、特定の閾値(1秒、2秒とか)以内に何%のリクエストを返却できている割合をグラフ化しています。 このグラフを見ると、応答時間時間は時間とともに劣化することが一目瞭然です。実際に今年初めの値と比較すると10%〜20%程度の悪化が確認されました。あとは、これをひたすら改善していくのみです。今回実施した主な対策は、以下の通りです。 ネットワーク パケットロスが発生しているようなトラフィック経路上のボトルネックの解消(L2スイッチの置換、物

    はてなダイアリーの高速化の裏側 - stanaka's blog
  • 貧乏だってプロファイリングは出来る!! - poor man's profiler

    従来より、プロファイリングのためのソフトウェアと言えば高価なものが中心であった。もっと安く、お金を掛けずに、簡単に、早くプログラムのボトルネックを探し出す方法はないのか?!ということで編み出されたプロファイリングテクノロジーがある。その名も、「poor man's profiler」だ。 poor man's profilerの全容は、次のページで知ることが出来る。 Poor Man's Profiler http://poormansprofiler.org/ poor man's profilerは、現Facebook(元MySQL ABのサポートエンジニア)のDomas Mituzasによって開発されたプロファイリングテクノロジーである。以下が、その全ソースコードである。 #!/bin/bash nsamples=1 sleeptime=0 pid=$(pidof mysqld) f

    貧乏だってプロファイリングは出来る!! - poor man's profiler
  • JavaScriptのswitch文の速度はブラウザの違いでこんなにも差があった。 - 風と宇宙とプログラム

    はじめに JavaScriptswitch文は、CやJavaと異なりcaseのところに任意の式が書けるため、実行時にcaseの式も評価されるので基的にはif-else文の並びと類似のものになります。つまり、caseの数に応じてパフォーマンスも低下すると予想されます。当にそうなのか確認してみました。 測定した各ブラウザのバージョンは以下の通りです。 Firefox Chrome Safari Opera IE 3.5.6 4.0.249.30 4.0.4 (531.21.10) 10.10 8.0.6001 caseが数値リテラルの場合 パフォーマンスを測定するテストコードは下記のような簡単なものです。caseが1000個あるswitch文を10万回繰り返して実行したときの時間を測定しました。perf_test()関数の引数vに与える値に応じてcaseの条件で一致する場所が変わります。

    JavaScriptのswitch文の速度はブラウザの違いでこんなにも差があった。 - 風と宇宙とプログラム
  • kumofsはなぜスケールするか - Blog by Sadayuki Furuhashi

    先日、分散Key-valueストア kumofs を公開しました。 多く方から反響とフィードバックをいただいています。ありがとうございます。 今回は、kumofs はなぜスケールするのか、なぜスケールすると言えるのかーということについて紹介したいと思います。 ところでスケーラビリティとは何か? スケーラビリティとは、利用者や仕事の増大に適応できる能力・度合い とされています(端的!)*1 。Scalability を日語にすると、拡張性 と訳されるようです。 ただ一口でスケーラビリティと言っても、様々な側面があります。ITシステムでは主には処理性能と運用に関することを指す場合が多いと思いますが*2、その中にも様々な側面があります。 なぜスケーラビリティが必要か スケーラビリティは システムなどが持つべき望ましい特性 であって、高いに越したことはありません。しかし、高いスケーラビリティはタ

    kumofsはなぜスケールするか - Blog by Sadayuki Furuhashi
  • Plack/PSGI performance

    [Original Spanish source] In my post about PSGI & Plack I said that it was fast, to demonstrate this I benchmarked the program running as CGI in Apache (ACGI) as a standalone server in CGI::Emulate::PSGI (CEP) and as a native PSGI application. The test was very not rigorous, because I really just wanted to confirm what I've read. The command to report the rate was: $ ab -n 1000 -c 10 -k "http://lo

  • Kazuho@Cybozu Labs: TCP通信ではデータの送信をまとめて行うべき、もうひとつの理由(& サーバのベンチマーク手法の話)

    TCP通信をするプログラムを書く際に「データの送信はまとめて1回で」行うべき、というのは鉄則と言っていい、と思います。その理由としては、パケット数を最小限に抑えることでオーバーヘッドを少なくするためだと一般に説明されますが、自分はもうひとつポイントがあると考えています。次のグラフを見てください。 グラフは、一定量のデータを転送するのにかかる時間と使用するブロックサイズ(1回のwrite(2)で書き込むサイズ)の関係を表したものです注1。 ホスト間のTCP通信を行っている場合は、TCPのバッファが有効に機能するので、ブロックサイズ(=パケット数の逆数)による速度の変化は、ほぼありません。一方、同一ホスト上で通信を行うと、ブロックサイズと反比例して所要時間が反比例の関係にあることがわかります。 原因は、同一ホスト上の通信では、送信プロセスがwrite(2)を呼ぶたびにコンテクストスイッチが発生

  • oinume journal

    大規模なコードベースでリファクタリングを省エネ化するためにcodemodを最近調べていて、軽く試行錯誤したのでそのメモ。 やりたいこと 例えば以下のようなTable Driven TestなコードをBEFOREからAFTERに書き換えたい。コード量が多いため人間がやるのは現実的ではなく、codemodで機械的に書き換えたい。 BEFORE package main import ( "slices" "testing" ) func TestContains(t *testing.T) { type args struct { ss []string s string } tests := []struct { name string args args want bool }{ { name: "empty: false", args: args{[]string{}, ""}, wan

    oinume journal
  • Rubyでフィボナッチ数列の演算が遅い問題についてのその後の考察。@解決編 - CanI's diary

    @Python編?何それおいしいの?(ぁ ついに解決! ずっと、ここ一連のエントリで、Rubyの多倍長演算の遅さについて嘆いてきたわけですが、何度かささださんからアドバイスをいただきつつも、ついにボトルネックを発見し、解消することができました。 ボトルネックの正体。 過去のエントリでは、Pythonとほとんど同じ処理だよ?おかしいね?とか言ってたわけですが、かなり煮詰まってきて、静的にコードを眺めてるだけじゃどうにもいかなくなったので、実行時のプロファイルをとってみることにしました。 使用したプロファイラはgprofです。 Ubuntu 9.04で、 make CFLAGS=-pg とかして、(cygwinでは-pgオプションつけるとmake通らなかった><) 適当に、スクリプトを実行、 ./ruby hoge.rb その後、 gprof ruby gmon.out とかしてあげると、Cレ

    Rubyでフィボナッチ数列の演算が遅い問題についてのその後の考察。@解決編 - CanI's diary
  • Kazuho@Cybozu Labs: MySQL のボトルネックを統計的に監視・解析する方法

    MySQL のチューニング、と言った場合には、サーバーパラメータの調整や EXPLAIN コマンドを利用したクエリ実行計画の最適化が話題に上ることが多いです。しかし、発行する全ての SQL について、いちいち EXPLAIN コマンドを使って確認していては、いくら時間があってもたりません。チューニングを効率的に進めるには、まず、ボトルネックとなっている SQL クエリを特定し、次にその最適化を行うべきです。 ではどのようにして、ボトルネックを特定するのか。MySQL Conference & Expo 2009 のキーノートにおいて Mark Callaghan 氏は、Google では SHOW PROCESSLIST コマンドを使った統計的アプローチを使っていると述べていらっしゃいます (参照: MySQLConf 09: Mark Callaghan, "This is Not a

  • 最適化の心得 or HTTP::MobileAttribute最適化祭りに参加してみた - D-6 [相変わらず根無し]

    最適化の心得 or HTTP::MobileAttribute最適化祭りに参加してみた HTTP::MobileAttributeの最適化祭りに突発的に参加してみた。 正直言うと未だにHTTP::MobileAttributeの中身であるClass::Componentを分かってない。なのでできることも限られてるわけだが。 今回のミニ祭りを見ていてよくわかるのは結局のところスピードに最も影響があるのは端的なコードの書き方ではなく構造(ストラクチャ)を見直す事であるというだ。id:tokuhiromのところでパフォーマンスチューニングの結果を追ってる人はわかると思うけど、結局俺が参加したのはもう当にコードの書き方をチューニングするというレベルのところで、例えばループをアンロールしてif/elseで実装してみるとかね。でもそこはどんなにがんばっても数%のパフォーマンスゲインにしかならない。

  • パフォーマンスチューニングする時の基礎の基礎 - 宇宙行きたい

    みんなパフォーマンスチューニングの環境とかってどうやってるのかなぁと 思ったので書いてみますた. 全然専門外なのでまったく自信無いですが,僕はこうやってるよって事で まずは普通に実装 最初からパフォーマンスを気にして書いちゃうと, 何が有効で何があまり有効でないかわからなくなっちゃうので, とりあえず普通に実装する. (ifelse より switch の方が早いとかやっても微々たるものだし) もちろん,後々のために TDD でやっておく. 計測環境を作る テストケースとして記載する 重い処理を探すために,100回くらい繰り返して実行して 平均を見れるようにする. Java の実行時最適化とかの影響もあると思うので, 最初の一回の時間と平均を見れるようにする. assert も書いておくと,何秒以内を目指すのかが, 残せるので書いておく. StopWatch stopWatch = new

    パフォーマンスチューニングする時の基礎の基礎 - 宇宙行きたい