Shibuya.Pm#10 Lt Wakapon

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite

    Shibuya.Pm#10 Lt Wakapon - Presentation Transcript

    1. SV アリーナ概要 話者: wakapon
    2. アジェンダ
      • なぜ今回,話者になったのか
      • Perl 処理系のヒープメモリプールについて
      • 時間があれば ExtraStage
    3. まずは自己紹介から
    4. こんなブログを 書いている 中の人
    5. こんなブログを やっています
    6. まだ本題に いきません
    7. 引き続き
    8. 今回話者になった いきさつ
    9. ひとことで表すと
    10. ゆっくりしすぎた
    11. ゆっくり
    12. ゆっくり
    13. ゆっくりしすぎた この結果
      • 21:30 ころにはすでに締切り
      • だいたい 2 時間くらい?
      • わらにすがってみた
    14. そんな折,
    15. 残り 1 つの LT 枠で 何か話しませんか? from 竹迫さん
    16. ktkr ! でもなに話そう ...
    17. そうだ, ブログに書いた あれにしよう
    18. 処理系のヒープメモリプール管理
      • 処理系内部のメモリ管理ってどうなってるの?
      • 必要になったら毎回 malloc ?
      • それとも独自の管理機構を持ってるの?
    19. 本発表内容の 位置づけ
    20. SvREFCNT よりも 下の階層
    21. リファレンスカウンタ 方式のその先
    22. いろいろな AP Web AP  フレームワーク 神々しい CPAN モジュール群 XS モジュール Perl API 構文解析 / 字句解析 OP ツリー生成 インタプリタ ヒープメモリ プール管理 libXXX
    23. いろいろな AP Web AP  フレームワーク 神々しい CPAN モジュール群 XS モジュール Perl API 構文解析 / 字句解析 OP ツリー生成 インタプリタ ヒープメモリ プール管理 libXXX .pl / .cgi .pm .xs / .h .c / .h .c / .h / .asm 熱い領域 暗黒面 別世界
    24. いろいろな AP Web AP  フレームワーク 神々しい CPAN モジュール群 XS モジュール Perl API 構文解析 / 字句解析 OP ツリー生成 インタプリタ ヒープメモリ プール管理 libXXX 今回のテーマはここ
    25. ぜんぜん LT に 持って来いな内容じゃあないですね 分かります
    26. ということで
    27. 残り 3 分半で 本題にいきます
    28. Perl に関する 周知の事実
    29. メモリを もりもり食う
    30. そもそもメモリって 具体的になぁに?
    31. 1 プロセスの仮想アドレス空間 (U) コード (.text) データ (.data .bss) ヒープ スタック 伸 伸 ← ここ! 0x00000000 0xC0000000
    32. ヒープメモリ
      • プログラム実行中に動的確保
      • 空きが無くなってきたらおっきさせる
      • ヒープ内部はライブラリで管理
      • malloc/free 関数でヒープを利用
    33. Perl プログラム中 malloc の利用例
    34. よくある 1 ステートメント my $hoge = 'foo';
      • レキシカル変数の管理表
      • 変数名
      • 文字列を格納するスカラ変数
      • 文字列の実体
      • 代入 OP
        • 他にもいっぱい
    35. 毎回 malloc していると malloc がボトルネック
    36. これに対する Perl 処理系の solution
      • ある程度まとめて一括して malloc
      • libc ではなく処理系自身でヒープ管理
    37. 利点
      • ライブラリコールのオーバヘッド削減
      • ヒープ領域拡張のためのシステムコール回数の削減
    38. わかりやすい?例 一軒家 × 賃貸マンション
    39. いちいち立て直す家 = 一軒家
    40. のではなく
    41. 中の人 / 荷物だけ 入れ替わる,再利用 = 賃貸
    42. かつ
    43. 一定人数の 住居スペースを いっぺんに確保 = マンション
    44. 1 度構築した スペースを 再利用することで
    45. 入れ物の再構築分 の コスト減
    46. コスト 新規建築 >> 引越し
    47. ここで #9 の復習 begin
    48. SV
    49. SV = スカラ変数 すべての型の基底クラス
    50. スカラ変数以外の型 ( 配列 / ハッシュ / サブルーチン ...) ↓ SV のサブクラス
    51. 出典: http://www.perl.org/tpc/1998/Perl_Language_and_Modules/Perl%20Illustrated/
    52. SV = SV ヘッド (struct sv) + SV ボディ (struct xpvFOO)
    53. SV はヘッドとボディからの 2 部構成
    54. SV のサブクラス ↓ SV ヘッドの構造は共通 SV ボディの部分は異なる
    55. 復習おわり end
    56. 閑話休題
      • ある程度まとめて一括して malloc
      • libc ではなく処理系自身で ヒープメモリ管理
    57. 1 に対する内部構造
      • アリーナ (arena) 1 回の malloc で取得するヒープメモリの 単位 = 管理情報 + 生メモリチャンク
      • SV ヘッド, SV ボディごとにアリーナを用意
    58. 2 に対する内部構造
      • 処理系で回収したメモリは全部 free しない
      • いつでも再利用可能な状態で処理系内部にためこんでおく
    59. 今回は SV ヘッドのアリーナだけ
    60. SV ボディは SV ヘッドとほとんど同じ
    61. まずは 1 つ目 アリーナの構造から
    62. SV ヘッドのアリーナの最小構成単位 = SV(struct sv)
    63. SV ヘッドの アリーナの構造 ↓ SV ヘッドの線形リスト
    64. SVヘッドのアリーナ 1 アリーナ ・・・ SV SV SV SV 利用不可 利用可
    65. 1 アリーナ 処理系の SV ヘッダ malloc の単位 (※ 発表上の造語 )
    66. 1 アリーナ中の SV に 空きが無くなると ...
    67. ふえる つながる
    68. ふえてつながった アリーナ群 = アリーナリスト
    69. SVヘッドのアリーナリスト ・・・ SV SV SV SV 利用不可 利用可 使用済み 1アリーナ 新規1アリーナ ・・・ SV SV SV SV
    70. 続いて 2 つ目 未使用 SV の管理構造
    71. アリーナ中の 未使用 SV の管理 ↓ 未使用 SV ヘッダリスト
    72. 新たに SV ヘッドが 要求された場合 ↓ 未使用 SV ヘッドを返す
    73. それとは逆に
    74. プログラム内で メモリ回収が 行われた場合
    75. 構造体の内容を 初期化後 ↓ 未使用リストへ
    76. アリーナリストと未使用リスト ・・・ SV SV SV SV ・・・ SV SV SV SV 利用不可 利用可 使用済み 1アリーナ 1アリーナ 未使用 リスト アリーナ リスト ・・・
    77. 5.10.0 における 実装
    78. SV ヘッドに関連する変数
      • PL_sv_root SV ヘッドの未使用リストのルート
      • PL_sv_arenaroot SV ヘッドアリーナリストのルート
    79. PL_sv_root と PL_sv_arena ・・・ SV SV SV SV ・・・ SV SV SV SV アリーナ アリーナ PL_sv_root PL_sv_arena sv_any sv_any sv_any sv_any sv_refcnt 個 利用不可 利用可 使用済み ・・・
    80. アリーナ操作の内部API (抜粋)
      • new_SV 未使用リストから SV の取得
      • more_SV アリーナの新規作成とアリーナリストへ接続
      • del_SV 構造体を初期化後,未使用リストへ接続
    81. SvREFCNT_dec マクロと 未使用 SV リストの関係
      • リファレンスカウンタを減算後, カウンタ値が 0 だった場合 ↓ 該当 SV を PL_sv_root の 末尾に接続
    82. アリーナリストの解放のタイミング
      • アリーナリストの解放 インタプリタ終了時 = perl_destruct
      • perl_destruct
        • SV ボディの解放
        • SV ヘッダの解放
        • SV ボディアリーナの解放
        • SV ヘッダアリーナの解放
    83. SV ボディについても ちょっとだけ
    84. SV ボディに関連する変数
      • PL_body_roots[ SVt_LAST ] SV ボディの未使用リストルートの配列 配列の index = SV type
      • PL_body_arenas SV ボディディスクリプタのリストのルート ディスクリプタ内部の set にアリーナ
    85. PL_body_roots と PL_body_arenas PL_body_arenas PL_body_roots[2] PL_body_roots[11] アリーナ集合 xpviv xpviv ・・・ xpvav xpvav ・・・ アリーナ集合 xpvcv xpvcv ・・・ xpvav xpvav ・・・ 利用可 使用済み ・・・ PL_body_roots[13] PL_body_roots[0] ・・・ ・・・ arena_desc arena_desc
    86. アリーナ操作の内部API (抜粋)
      • new_body クラスを指定して未使用リストから SV の取得
      • more_bodies アリーナの新規作成とアリーナリストへ接続
      • del_body 構造体を初期化後,未使用リストへ接続
    87. SV アリーナ 番外編
    88. SV アリーナを 使いたくない場合
    89. 夢のマイホームを 購入したい人向け ( うそです )
    90. 次のマクロで 実現可能
    91. PUFIRY デバッガ用マクロ
    92. アリーナを使わない memory-paranoid な メモリ管理方式
    93. おそらく SV アリーナよりも 管理コスト高 ( 未検証 )
    94. まとめ
      • 処理系内部では SV ヘッド,ボディごとにアリーナによるヒープメモリプール管理が行われている
      • SV アリーナによるメモリ管理を使わないモードも存在する
    95. すみません
    96. SV アリーナ × PURIFY マクロ × MYMALLOC マクロ のプロファイリング
    97. ありません! ごめんなさい
    98. ご清聴ありがとう ございました
    99. Extra Stage ( 時間外のため cut)

    + waka ponwaka pon, 11 months ago

    custom

    869 views, 1 favs, 1 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 869
      • 672 on SlideShare
      • 197 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 2
    Most viewed embeds
    • 197 views on http://pub.ne.jp

    more

    All embeds
    • 197 views on http://pub.ne.jp

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories