タグ

ブックマーク / qiita.com/k0kubun (6)

  • Linux perfで快適に計測するためのtips - Qiita

    これがあるのとないのとでは分かりやすさが全然違うので、perfを使う時は常に入れておくようにすると便利です。 2. --call-graph は fp 以外で使う 上記の問題を解決すると perf record + perf report では何が呼ばれているかおおむね分かることが多いのですが、call graphを出すために perf record -g をすると [unknown] というのが出てきてしまうことがあります。(以降の計測結果はRack::Utils::HeaderHashを使ったRuby VMのベンチをRubyのmasterで走らせたものです) Samples: 38K of event 'cycles:ppp', Event count (approx.): 271180000 Children Self Command Shared Object Symbol - 1

    Linux perfで快適に計測するためのtips - Qiita
    a2ikm
    a2ikm 2019/12/05
  • VM命令ディスパッチ手法: Context Threading - Qiita

    2005年のそれほど新しくないものだが、Context Threading: A flexible and efficient dispatch technique for virtual machine interpreters という論文を読んだので、内容について少しまとめておく。 前提知識: 既存のThreading手法 http://www.complang.tuwien.ac.at/forth/threaded-code.html にまとまっているが、この論文では以下の2つが関係している: Direct threading: ラベルのアドレスを取得するGCC拡張などを使い、VMのprogram counterからVM命令の実装のアドレスをディスパッチしてそこにジャンプする Subroutine threading: VM命令の実装を関数にしておき、それをcallする命令を並べたネ

    VM命令ディスパッチ手法: Context Threading - Qiita
  • Perfect Frozen String Literal - Qiita

    現時点では解説がパーフェクトではないのを自覚しているが、めんどくさいので後でパーフェクトにする Frozen String Literalとは "str".freezeのようなリテラルのこと。 Feature#8992 (r43627) でこのようなリテラルを書くと事前にallocate & freezeされた文字列オブジェクト(内部的にはfstringと呼ばれる) が取得されるようになり、Ruby 2.1以降ではイミュータブルな文字列が必要な場面でこのリテラルを使うと高速になる。 以下、それに関連した機能や最適化がどのバージョンで入ったか、各バージョンでのお勧めの書き方をまとめておく。 Ruby 2.0.0まで まだ入ってないので気にしなくてよい Ruby 2.1〜2.2 Ruby 2.1: Use String#freeze and compiler tricks to replace

    Perfect Frozen String Literal - Qiita
  • YARV instruction dispatch - Qiita

    insns.def周りの理解を整理するために書いた雑文を置いておく。ソースのバージョンは2.4.1 YARVの命令ディスパッチを行う関数: vm_exec_core vm_exec.c に vm_exec_core なる関数がある。perf recordでRubyのスクリプトを実行してperf reportするとかなり大部分をvm_exec_coreが消費していることが多い。 これはRubyのコードがYARV iseqにコンパイルされた後、この関数がYARV iseqのインタプリタ的に働くことでCRubyが動作しているため。 OPT_CALL_THREADED_CODE = 0 しかしvm_exec_coreなる定義はOPT_CALL_THREADED_CODEのifdefで分岐した上でvm_exec.cに2つある。 vm_opts.h というVMの最適化オプションが定義されたヘッダーファ

    YARV instruction dispatch - Qiita
  • Goのデバッグに便利なpretty printライブラリ「pp」を作った - Qiita

    概要 k0kubun/ppという、pretty printライブラリを作った。 任意の型のオブジェクトをpp.Print()に渡すと色つきでpretty printしてくれるという非常にシンプルなもの。 作った背景 fmt.Printf("%#v", ...)等ではわかりづらい複雑なmapやstructをdebug printするときは、pretty printを使うと便利。既存のpretty printライブラリには、GitHubで人気なものだとdavecgh/go-spewやkr/prettyなどがある。 いままではGoでデバッグのために複雑な構造をダンプするときこれらを使っていたのだが、必要以上に型の情報が書かれていたり、大きなものだと白黒なのでパッと見てわかりづらいなどの問題があった。 そこで、型やフィールドごとに別の色をつけることで視認性を高め、ビルトインの型情報は色にまかせて省

    Goのデバッグに便利なpretty printライブラリ「pp」を作った - Qiita
    a2ikm
    a2ikm 2014/12/02
  • ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い - Qiita

    ActiveRecordでN+1クエリを潰すためにeager loadingを行う場合、preloadやincludesやeager_loadが役に立つ。 Preload, Eagerload, Includes and Joinsという記事にそれらの違いがよくまとめられているんだけど、includesが挙動を変える条件があまり正確に書かれていなくて自信が持てなかったし、そもそも記事が古いのでRails4.1.5のソースを読んで調べた。 せっかく調べたので、全体を通して日語でまとめてみようと思う。 User.joins(:posts).where(posts: { id: 1 }) # SELECT `users`.* FROM `users` INNER JOIN `posts` ON `posts`.`user_id` = `users`.`id` WHERE `posts`.`id

    ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い - Qiita
  • 1