Slide 1

Slide 1 text

「プログラマーのためのCPU入門」 は入り口として丁度よい! ~ Webエンジニア目線 ~ 1 株式会社ラクーンホールディングス 技術戦略部 羽山純

Slide 2

Slide 2 text

自己紹介 ● 名前 ○ 羽山 純(Jun Hayama) ● 所属 ○ 株式会社ラクーンホールディングス 技術戦略部 ● 技術領域 ○ バックエンド・インフラ ○ パフォーマンス改善 ■ MySQLでプライマリキーをUUIDにする前に知っておいて欲しいこと ○ AI(企業審査AI) ● 個人活動 ○ アプリ開発 2

Slide 3

Slide 3 text

紹介する書籍 プログラマーのためのCPU入門 - CPUは如何にしてソフトウェアを 高速に実行するか いわゆる「低レイヤ」の書籍です 3 Takenobu Tani.(2023-1-25).“プログラマーのためのCPU入門 - CPUは如何にしてソフトウェアを高速に実行するか”.ラムダ ノート.https://www.lambdanote.com/products/cpu

Slide 4

Slide 4 text

「低レイヤ」について、こう思っていませんか? ● WebエンジニアにはCPUほどの低レイヤは必要ない ● クラウド環境だから細かいことを考えなくてもよい ● 現代のCPUは十分に速いから気にしなくてもよい → そんなことはありません 4

Slide 5

Slide 5 text

本書で得られるメリット(1) 本書で得られるメリット(1) カーネルの理解を深められる 5

Slide 6

Slide 6 text

カーネルの知識を深められる 上位レイヤは下位レイヤに依存し、 各レイヤの習得には1~2レイヤ下までの知識が必要です 本書はCPUへの理解を通して カーネルの理解を深めてくれます 6 アプリケーション ライブラリ・FW ランタイム・VM コンパイラ ユーザー空間 カーネル ハードウェア OS CPU 他 言語 依存 依存 依存 依存 依存

Slide 7

Slide 7 text

本書で得られるメリット(2) 本書で得られるメリット(2) 長く生きる汎用的な知識と問題解決力 7

Slide 8

Slide 8 text

山で遭難したら登れ 「山で遭難したら登れ」と言われます 逆すり鉢の形状で山頂に近づくほど狭くなるため 登ると正規ルートに復帰できる可能性が 高くなります この形は先ほどの「低レイヤ」の図 と似てませんか? 8

Slide 9

Slide 9 text

低レイヤほどバリエーションが減少 アプリケーションは要件やサービスだけ星の数ほど ライブラリ・FW は Django, Flask, SpringBoot, Rails, , , その下層は Python, Java, Ruby, , , OS は Linux がデファクト 低レイヤほどバリエーションが少なく 長く使える汎用的な知識となります 9 アプリケーション ライブラリ・FW ランタイム・VM コンパイラ ユーザー空間 カーネル ハードウェア OS CPU 他 言語

Slide 10

Slide 10 text

問題解決力 問題解決では、順に低レイヤに降りると解決しやすいです いずこかで発生した問題に対し、 降りられる限界のレイヤが そのエンジニアの力量です 本書でCPUの知識を通して カーネルへの理解を深めると 問題解決力が上昇します 10 アプリケーション ライブラリ・FW ランタイム・VM コンパイラ ユーザー空間 カーネル ハードウェア OS CPU 他 言語

Slide 11

Slide 11 text

本書で得られるメリット(3) 本書で得られるメリット(3) パフォーマンスはやっぱり大切 11

Slide 12

Slide 12 text

アプリ・インフラの高速化のヒントがたくさん ● システムコールが遅い理由を仕組みから理解できた ● メモリは仮想記憶のため1度の取得に2回のアクセスが必要 ○ 仮想アドレスと物理アドレスをページテーブルで変換 ○ ページテーブルのキャッシュ(TLB)をミスするととても遅い ○ 巨大なメモリ空間を利用するとページテーブルが肥大化する ● メモリはCPUより4倍ほど遅いが、L1キャッシュミスすると 100倍ほどまで遅くなる、メインメモリはとても遅い ○ 小さいメモリ空間の利用は速いが、巨大なメモリ空間をランダ ムで使うと、キャッシュミスして100~1000倍は遅い ● 複数コア・マルチスレッドで同一アドレスへの書き込みを行 うと「コヒーレンスミス」が発生して非常に遅い ○ マルチプロセスモデルの方が優れているシーンもある 12

Slide 13

Slide 13 text

まとめと余談 Webエンジニア目線で本書は CPUを通してカーネルの知識を深めるために有用です そして、効率的なアルゴリズムを組むのに最適な知識が たくさん詰まっています パズルの最適解を探すアプリを開発していた時代に 出会っていたら、あと2割は演算を速くできたと思います 13