aboutsummaryrefslogtreecommitdiffhomepage
path: root/slide.saty
blob: 543db117e68ae378102f1afb054baef99cfba108 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
@require: class-slydifi/theme/akasaka
@require: code-printer/code-design
@require: code-printer/code-printer
@require: code-printer/code-syntax
@require: code-printer/code-theme
@require: figbox/figbox

let ex-big-textbox ?:size-opt it =
  let size = Option.from 48pt size-opt in
    FigBox.textbox?:(set-font-size size) it

let big-textbox ?:size-opt it =
  let size = Option.from 32pt size-opt in
    FigBox.textbox?:(set-font-size size) it

let mid-textbox ?:size-opt it =
  let size = Option.from 24pt size-opt in
    FigBox.textbox?:(set-font-size size) it

let small-textbox ?:size-opt it =
  let size = Option.from 16pt size-opt in
    FigBox.textbox?:(set-font-size size) it

let with-frame figbox = figbox
  |> FigBox.hvmargin 16pt
  |> FigBox.frame 2pt Color.black

let-block +code-block-php source =
  '<
    +code-printer?:(
      CodePrinter.make-config CodeSyntax.php CodeTheme.iceberg-light
      |> CodePrinter.set-number-fun CodeDesign.number-fun-null
    )(source);
  >

open FigBox
in

document '<
  +set-config(|
    SlydifiThemeAkasaka.default-config with
    color-emph = Color.black;
  |);

  +make-title(|
    title = {
      |Tracing JIT の発動条件
      |};
    author = {|nsfisis (いまむら)|};
    date = {|第163回PHP勉強会@東京|};
  |);

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  +frame{自己紹介}<
    +fig-center(vconcat [
      gap 30pt;
      big-textbox{いまむら};
    ]);
    +fig-center(vconcat [
      ex-big-textbox{nsfisis};
    ]);
    +fig-center(vconcat [
      include-image 128pt `assets/me.jpeg`;
    ]);
    +fig-center(vconcat [
      big-textbox{\@ デジタルサーカス株式会社};
    ]);
  >

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  +frame{PHPカンファレンス小田原}<
    +fig-center(vconcat [
      gap 60pt;
      big-textbox{来る新 JIT エンジンについて};
    ]);
    +fig-center(vconcat [
      gap 30pt;
      big-textbox{知った気になる};
    ]);
  >

  +frame{おさらい}<
    +fig-center(vconcat [
      gap 30pt;
      big-textbox{Tracing JIT とは?};
    ]);
  >

  +frame{おさらい}<
    +fig-center(vconcat [
      gap 30pt;
      big-textbox{Tracing JIT とは?};
    ]);
    +fig-center(vconcat [
      gap 30pt;
      mid-textbox{実行された opcode/operand を記録して (トレース)};
      gap 20pt;
      mid-textbox{その情報を使って opcode を機械語に変換する};
    ]);
  >

  +frame{おさらい}<
    +fig-center(vconcat [
      gap 30pt;
      big-textbox{Tracing JIT とは?};
    ]);
    +fig-center(vconcat [
      gap 30pt;
      mid-textbox{実行された opcode/operand を記録して (トレース)};
      gap 20pt;
      mid-textbox{その情報を使って opcode を機械語に変換する};
    ]);
    +fig-center(vconcat [
      gap 40pt;
      mid-textbox{毎回実行するとオーバヘッドが大きすぎる};
    ]);
  >

  +frame{Tracing JIT 詳細}<
    +listing{
      * 実行詳細
        ** PHP スクリプトにカウンタ機構を埋め込む
          *** 何度も実行される関数・ループを記録
        ** 何回も実行されると、実行パターンの記録 (トレース) を開始
        ** トレースを元に JIT コンパイル
    }
  >

  +frame{Tracing JIT 詳細}<
    +listing{
      * 実行詳細
        ** PHP スクリプトにカウンタ機構を埋め込む
          *** 何度も実行される関数・ループを記録
        ** 何回も実行されると、実行パターンの記録 (トレース) を開始
        ** トレースを元に JIT コンパイル
      * 制御するオプション
        ** \code(`opcache.jit_hot_loop`);      (デフォルト値: \code(`64`);)
          *** 64 回実行されたループは JIT コンパイル
        ** \code(`opcache.jit_hot_func`);      (デフォルト値: \code(`127`);)
          *** 127 回実行された関数は JIT コンパイル
    }
  >

  +frame{まとめ}<
    +fig-center(vconcat [
      gap 30pt;
      ex-big-textbox{ムズい!};
      gap 30pt;
      big-textbox{バス係数 = 1};
    ]);
  >

>