Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CPUに関する話
Search
Takanori Sejima
PRO
October 05, 2015
Technology
0
0
CPUに関する話
CPU のお話です
Takanori Sejima
PRO
October 05, 2015
Tweet
Share
More Decks by Takanori Sejima
See All by Takanori Sejima
互換性のある(らしい)DBへの移行など考えるにあたってたいへんざっくり
sejima
PRO
0
160
NAND Flash から InnoDB にかけての話(仮)
sejima
PRO
0
6
InnoDBのすゝめ(仮)
sejima
PRO
0
1
さいきんのMySQLに関する取り組み(仮)
sejima
PRO
0
1
sysloadや監視などの話(仮)
sejima
PRO
0
0
さいきんの InnoDB Adaptive Flushing (仮)
sejima
PRO
0
1
TIME_WAITに関する話
sejima
PRO
0
9
MySQLやSSDとかの話 その後
sejima
PRO
0
2
binary log と 2PC と Group Commit
sejima
PRO
0
0
Other Decks in Technology
See All in Technology
【社内勉強会】新年度からコーディングエージェントを使いこなす - 構造と制約で引き出すClaude Codeの実践知
nwiizo
26
13k
DMBOKを使ってレバレジーズのデータマネジメントを評価した
leveragestech
0
420
開発チームとQAエンジニアの新しい協業モデル -年末調整開発チームで実践する【QAリード施策】-
kaomi_wombat
0
250
DDD×仕様駆動で回す高品質開発のプロセス設計
littlehands
6
2.6k
大規模ECサイトのあるバッチのパフォーマンスを改善するために僕たちのチームがしてきたこと
panda_program
1
400
FASTでAIエージェントを作りまくろう!
yukiogawa
4
120
Kubernetesの「隠れメモリ消費」によるNode共倒れと、Request適正化という処方箋
g0xu
0
140
開発チームとQAエンジニアの新しい協業モデル -年末調整開発チームで実践する【QAリード施策】-
qa
0
360
「通るまでRe-run」から卒業!落ちないテストを書く勘所
asumikam
2
770
君はジョシュアツリーを知っているか?名前をつけて事象を正しく認識しよう / Do you know Joshua Tree?
ykanoh
4
140
SSoT(Single Source of Truth)で「壊して再生」する設計
kawauso
2
380
Bill One 開発エンジニア 紹介資料
sansan33
PRO
5
18k
Featured
See All Featured
A Soul's Torment
seathinner
5
2.5k
Facilitating Awesome Meetings
lara
57
6.8k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Designing for Timeless Needs
cassininazir
0
170
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
86
The Cult of Friendly URLs
andyhume
79
6.8k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
320
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Navigating Weather and Climate Data
rabernat
0
150
Test your architecture with Archunit
thirion
1
2.2k
Transcript
CPUに関する話 sejima
免責事項 - 本資料において示される見解は、私自身の見 解であって、私が所属する組織の見解を必ずし も反映したものではありません。ご了承くださ い。
はじめに - 最初に推薦図書を列挙しておきます - この手の知識は、十年二十年と役に立つので - 十年後もエンジニアやりたい人は、読んでみて もいいかも
推薦図書 - はじめて読む486 - OSの勉強をするときに読んどくといいかも - CPUの創りかた - Write Great
Code〈Vol.1〉 - 比較的プログラマよりの内容 - 電子書籍版 もある - Write Great Code〈Vol.2〉 - 最近のコンパイラだいぶ賢いから、ちと古いかも
- これらの書籍、十年くらい前に読んだんですが - いま思い返しても、良い内容だった(という気が するので) - いまはじめて読んだとしても(たぶん)役に立つ - 良い書籍は、十年以上経っても価値があると思 います
- ただ、流石に古い気がしなくもないので - 最近の本で良い書籍あったら教えて下さい - 書籍以外でいうと、日本のライターさんは優秀 なので、Web上に日本語でいい記事がけっこう あります。 - わたしはよく後藤弘茂さんや、大原雄介さんの
記事を読んでます
次に、インフラエンジニア向けの一冊 - クラウドを支える技術 ──データセンターサイズ のマシン設計法入門 - Google の人がDCについて書いてる - 個人的には「電気代とビッグデータ」がテーマだ
と感じた。彼らのワークロードに最適化するとこ うなるという - 彼らがCPUをどう捉えているかわかって面白い
CPUの細かい構造や仕組みについては - 作図が嫌いというかめんどくさいのでカツアイし ます - 各々調べてみてください - というわけではじめます
CPUはなぜ遅いのか? - 消費電力や排熱の都合上、動作周波数を上げ にくい - 電圧上げないとクロック上げられないけど、電圧もクロッ クも消費電力に多大な影響を与える - IPC(Instructions Per
Cycle)を上げるのが大 変難しい - execution unit の稼働率を上げるのが難しい
そして何より
DRAMが遅い
CPUから見ると、DRAMは非常に遅い - CPU内部のキャッシュと比べて100倍以上遅い - これは可視化できてて面白い - メモリアクセスを減らせないと、CPUの execution unit の稼働率を上げられない
- DRAMの遅さに引きずられる
DRAMの遅さに引きずられる? - CPU内部の execution unit が欲しい速さでは、 DRAMからデータを転送できない - 複数のスレッドやプロセスが、メモリアクセスをし て、メモリからデータを読み込むのを待って
- パイプライン がストールする - レジスタの取り合いになるなど、ストールするケースは他 にもあるけど、DRAMの遅さはかなり致命的
ちなみに最近の Intel の L1 cache は - いわゆる ハーバード・アーキテクチャ -
命令とデータが別々の領域に格納されてる - 他の cache と異なり、 L1 cache だけは命令と データで二種類ある - 命令がぜんぶ L1 cache から捨てられると大変 なので、これはアリな設計だと思います
DRAMが遅いから - CPU の execution unit の稼働率が低いので、 Intel は Hyper-Threading
導入したそう - Typically, applications make use of about 35 percent of the internal processor execution resources. The idea behind Hyper-Threading Technology is to enable better processor usage and to achieve about 50 percent utilization of resources.
じゃとりあえず - 広範囲にメモリアクセスすると遅いっていう、至 極簡単で、人類にとって何の役にも立たないサ ンプルコード書いてみたんで - これとこれ - じっさいに見てみましょう
で、具体的には - こんな感じでコンパイルして、差分はこんだけ - Xeon L5630 の環境 と E5-2630L v3
の環境 - Xeon L5630 or Xeon E5-2630L v3 - Ubuntu 14.04.3 LTS - kernel 3.13 x86_64 - glibc 2.19 - gcc 4.8.4
実行するとこんだけ違う - けっか - L5630 - E5-2630L v3 - CPUのキャッシュから引けないと、CPUの
backend(演算装置)がめっちゃ待たされる
最近のCPUとDRAMだいぶ優秀ですが - clock down してるとだいぶ性能落ちます - L5630 - E5-2630L v3
- L5630 と E5-2630L v3 の差がなくなる勢い - 最近のCPUは clock の落ち幅が大きい傾向に あるので、このへん注意しましょう - Brendan Gregg は AWS でも MSR 見てるよう ですしね
閑話休題 - 据置型ゲーム機の優位性はざっくり以下の2つ - コストパフォーマンス(ゲーミングPCよりかなり安い) - メモリの帯域 - ゲーム機に限らず、GPUを酷使するならメモリの帯 域は重要になる。GPUはメモリの帯域食うので
- 少々コスパが悪くても、据置型ゲーム機には、PCで 使われてるものより高速なメモリが積まれてる
じゃ、なんでCPUは こんな状況なの?
10年前と比べ、CPUは何が良くなったか - プロセスルールが進んで微細化が進んだ結果、 消費電力減った - 省電力機構が進化した - DRAMの帯域が増えてきた - しかし、まだ足りない。CPUほど進歩してない。
- 動作周波数上げるの難しいから、Coreの数が 増えてきている。特にXeonは劇的に
クロック上げるのが難しいから - 電圧を上げないと、クロック(動作周波数)はそ んなに上げられない - 消費電力は、電圧の二乗×動作周波数 に比例 - 電圧上げたくないから、 今でも、x86
は高くても 4GHzくらいの動作周波数しかない - 電圧上げるくらいなら、ということでコアを増やし てる
そして
トランジスタが 余ってきた
トランジスタが余った結果 - コアの数を増やしたけど - キャッシュを増やしたけど - まだ余るので、アンコア(Uncore)を強化する余 裕ができた - Skylake
に至っては、カメラ用にISP(Image Signal Processor) まで積んだらしい - 確かにイマドキのWindowsマシンには、組み込みの カメラ普通についてる
アンコア? - CPUに統合された、coreじゃない部分 - メモリコントローラや I/O コントローラなど - プロセッサーコアやキャッシュじゃない部分 -
かつてはマザーボード上のチップセットなどで実 現していた、様々な機能を統合している - 消費電力削減やI/Oの性能改善に貢献している
アンコアの強化に至る前、2006年ごろ - Intel は Larrabee で many core の夢を見た -
一方、 Sony、 SCE、IBM、東芝は、 Cell という ヘテロジニアスアーキテクチャをもたらした - Cellは扱いが難しいけど性能でたので、ヘテロ ジニアスな設計を他のCPUベンダーは追いか けることになった
- トランジスタが余ってきたと思うけど - いまのSRAMやプロセッサーコアだけでは、 CPU上のトランジスタを上手く使い切れない - CellがPPEとSPEを分けたように、CPUの中に 様々な機能を持つものを入れていくほうが効率 がいい
ここで Intelさんを 振り返ってみると
Intelさんとしてはきっと - いまの Xeon は大勝利 - NetBurst のときの失敗は取り返せた - もはやサーバ市場で恐れるものは無いのだろう
- 性能が上がるとサーバの高集約化が進んで、台数の伸びは鈍化する だろうけど - PCやサーバ以外の市場も取らないといけない - 自社のFabを自社製品の製造で埋め尽くせるの が理想
Intelは自社の生産ラインを使い切りたい - 研究開発をし、他社の追随を許さない製造技術 を持ち続ける - 研究開発費を回収するために、大量生産する - PCやサーバのCPUだけでは、自社工場の生産 ラインを埋められなくなってきた -
NAND Flash の製造で自社工場を活用するの も必然
それでも足りない - IDF の資料を見ると、そのとき Intel が取りた がってる市場がうかがい知れるんですが - IDF2012 Beijing
に行ってきたとき、 Ultrabook と HPC の話ばかりだったので、「あぁWebサービスなんてIntel から見たら大したことないんだ」と実感できました - Intelは数年前からタブレットやスマートフォン、 いまだとIoT狙ってますけど、研究開発を維持す るために、市場の拡大が必須なわけです
そんなIntelさんだけでなく、業界的に - シングルスレッド性能はもう10年前から伸び悩 んでる - 物理的に今の製造技術や、素材の限界があ るそうで - 新しい素材や製造技術の研究が進められてい るみたいですが、実用化するまでまだまだ年月
は必要そう
閑話休題・2 - 現代のトランジスタ製造技術ってすごいんです - 絶縁膜が原子数個分のレベルらしいです - こうなってくると、もう、電流がリークしてもしょう がないですよね? - ただ、現状を打ち破るには、基礎研究に時間と
経費がかかるんです
個人的に思うんですが - 情報産業は、普通の業界と比べて流行り廃りが 激しいのでドッグイヤーと言われますが - 個人的に、半導体の基礎研究はその7倍の時 間、犬ではなく人間の遅さで進んでると思うので - そう考えると、カーボンナノチューブがノーベル 賞レベルと言われても納得なんですが、我々の
ところまで来るのには時間かかるんです
だから我々は、 物理学や化学を 支援する必要があると 思います
極論すると
エンジニアにとって CERNみたいな研究機関は、 ハードウェアの進化のために 必要なんじゃないでしょうか
ムーアの法則が終わると言われてますが - それは、ブレイクスルーとなるような技術革新が 起きるのに時間がかかるせいだと思うので - 半導体の集積密度とは違うけど、例えば、3D NANDを 東芝が発表したのは2007年で、本格的な出荷開始は 2016年とか -
逆に考えると、注意深く見ていさえすれば、次世 代のハードウェアと、それに伴う環境の変化が あるていど予測できるんじゃないかと
最近のIntelさんの Xeonを見て思うに
- 5年前の低電圧版Xeonと現在の低電圧版 Xeon 、似たような価格帯のを比べると - 物理コアは4から8に増えつつ、 Last Level Cache は1.6倍に
- North Bridge は CPU に統合され、 PCI- Express 経由で GPU や NIC、 NVMe は、 CPU と直結できるようになった
DDIOサイコー - NICとCPU直結できるようになって、 Intel Data Direct I/O ができた - NICがメモリを経由せず、LLCに直接読み書き
できるようになりました - GbEや10GbEでは、大量のパケット受信すると むかしは大変重かったんですが - これでかなりネットワークの性能改善しました
TurboBoostって悪い仕組みじゃない - ARMにはbig.LITTLEっていう構成があります - 高性能なcoreと低消費電力なcoreを、そのときどきで使 い分ける - なんで Intel は採用しないんだろ?って思ったけ
ど、 Intel さんには TurboBoost がありました - 性能出したいcoreだけクロック上げて、熱や消費電力を コントロールすればいい - 省電力的にはARMの方が良い構成だけど
そろそろTurboBoost使いこなしたい - ただ、サーバのことを考えると、全部のコアを無 駄なくつかえる TurboBoost の方が合理的で - 全力でぶん回したとき、CPU上に無駄なものがないから - 実は、
AWSのC4インスタンス も TurboBoost 使えるんすよ - 次のインフラないしシステムでは、個人的に活 用したいとアイデアを練ってるところ
いままで雑多に話し ましたが
さて、現時点で我々は - 最近のXeonは選択肢が増えた - いまどんなXeonを買うかというと - Coreの数、メモリの帯域、消費電力のバランス 次第じゃないですかね - Coreに比例してメモリの帯域増えるわけじゃな
いんで、Coreそんなにいらないかもしれないし - 実際に動かしてみて評価してみないことには
いまコードを書く上で考えるべきは - アンコアが充実して、I/Oが速くなったりしたけど - L2 cache や Last Level Cache
の容量増えて きてるけど、これ以上増やしすぎると、キャッ シュ管理のコストが上がってLatency悪くなるの で、SRAMのキャッシュはそんなに増えないん じゃないかなぁ - となると、如何にしてメモリアクセスを削減する か
クライアントサイドで考えると - CPUのキャッシュを如何に活用するか(如何に メモリアクセスを抑えるか)によって、高い性能 をもたらせる - ARMの事例ですが、 スクエニの杉本さんは、Android版 スクストのフットプリントを数百KBに収めた -
コンソールゲーム業界の職人は、そこまでやっ て性能を叩き出す
サーバサイドでは - MySQLみたいに、巨大なメモリに広範囲にアク セスするソフトウェアは、 L2 cache に全ての データが載るわけではないが - ただ
L2 cache がムダかというとそうでもないと思います - メモリなどI/Oの帯域を節約できるコードは、結 果として速い - MySQL で table がメモリに載っていても、 full table scan は避けるべき
ただ、サーバサイドでも - それでも、メモリの無駄遣いは良くないので - TLB miss 発生するとメモリアクセス増えるし - あと、C/C++ などでコードを書くときは、スタック
を上手く使える方がいいんじゃないでしょうか。 スタックは hotspot で、 TLB で引けるだろうし、 CPUのキャッシュに載ってる可能性高いし - 詳しくは Write Great Code でも読んでください
そして、 たぶん2-3年くらい後の Xeon には
(おそらく)劇的 な変化が来る
Xeon に L4 cache として eDRAM が載れば サーバでも(一部の)コードが cache に載る時代が来る
Intel のロードマップではまだないけど - 最近の Core i7 では 128MB の eDRAM
を L4 cache として使えるようになった - この eDRAM 、実はかなりすぐれもので、いま までの DRAM よりかなり速い - この eDRAM にフィットするコードを書けば、主 記憶へのアクセス減らせるのでサーバでも速い
ただ、 Intel さんにお願いしたいのは - PHPなど Lightweight Language のWebアプリ ケーションなら、 L4
cache にフィットするかもし れませんが - MySQLみたいなRDBMSだとムリなんで - L4 cache のあるXeonと無いXeon、あるいは、 L4 cache の無効化ができると嬉しいです - cacheの階層増えるとメモリアクセスのLatency に影響するんで
直近では L4 cache 来るかもだけど - メモリベンダーが想定している未来だと - メモリの階層がかなり増える - Near
Memory と Far Memory - OSからみたとき、速いメモリと遅いメモリが混在 するという可能性
近いメモリと遠いメモリ - 実はすでに存在している概念 - 具体的にいうとNUMA - x86 で NUMA の概念がもたらされたのは、
も う十年以上前 - いまでは NUMA も珍しくなくなった - OSのサポートや最適化進んできたし - percona server でも NUMA 向けオプションあるし
きっと未来では - NUMA のように、プログラマに受け入れられる 時代になる - 10年先か、20年先はわからないけど - 先ずは Windows
で取り入れられるだろうから、 Windows の動向を見守るのがいい - 何気に Windows ってかなり先進的なOSなんで
私が思うに - 速いメモリが1GB~4GBくらいあるなら - Linuxなら、そこに kernelとlibcとPTE載せちゃう のが、合理的だと思うんだ - それで余ったら、large page
みたいなノリでプロ セスからも使えるようになるかもしれん - mysqld のコードをそこに割り当てたいな - 楽しみやね
ちなみに Xeon Phi では - DDR4 の5倍のバンド幅を持つメモリが、オン パッケージで来る そうですね -
なので、来てくれるんじゃないですかね、いつか そのうち。速いメモリってやつが
最後に - 三年後、どんなサービスが流行ってるのか考え るのは難しい - でも、サーバがどんな進化を遂げるかは、ベン ダーのロードマップや、現時点における半導体 の限界を学んでおけば、ある程度予測できる - その変化を予測して備えておけば、エンジニア
として準備ができる
半導体を学んで、 サーバの未来を より良くする
おわり