Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Taketoshi 青野健利
PDF, PPTX
1,040 views
V8 Iginition Interpreter
V8のIgnitionインタープリタについてです。
Software
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 15
2
/ 15
3
/ 15
4
/ 15
5
/ 15
6
/ 15
7
/ 15
8
/ 15
9
/ 15
10
/ 15
11
/ 15
12
/ 15
13
/ 15
14
/ 15
15
/ 15
More Related Content
PDF
WebWorker and Atomics
by
Taketoshi 青野健利
PPTX
2016/12/17 ASP.NET フロントエンドタスク入門
by
miso- soup3
PDF
AWSで開発するサーバレスAPIバックエンド
by
暁 三宅
PDF
GraphQL with React
by
Taketoshi 青野健利
PDF
50分で掴み取る ASP.NET Web API パターン&テクニック
by
miso- soup3
PDF
ASP.NET WEB API 開発体験
by
miso- soup3
PPTX
React native vol3
by
dcubeio
PDF
JSON Schema で Web API のスキマを埋めよう
by
VOYAGE GROUP
WebWorker and Atomics
by
Taketoshi 青野健利
2016/12/17 ASP.NET フロントエンドタスク入門
by
miso- soup3
AWSで開発するサーバレスAPIバックエンド
by
暁 三宅
GraphQL with React
by
Taketoshi 青野健利
50分で掴み取る ASP.NET Web API パターン&テクニック
by
miso- soup3
ASP.NET WEB API 開発体験
by
miso- soup3
React native vol3
by
dcubeio
JSON Schema で Web API のスキマを埋めよう
by
VOYAGE GROUP
What's hot
PDF
react-scriptsはwebpackで何をしているのか
by
暁 三宅
PDF
ASP.NET WebAPI 体験記 #clrh99
by
Katsuya Shimizu
PPTX
React NativeでTwitterクライアントを作ってみよう
by
dcubeio
PDF
OWIN って何?
by
miso- soup3
PDF
2016/05/01 Visual Studio with Cordova
by
miso- soup3
PDF
こんなに使える!今どきのAPIドキュメンテーションツール
by
dcubeio
PDF
Java + React.jsでSever Side Rendering #reactjs_meetup
by
Toshiaki Maki
PPTX
React and-rx
by
Taketoshi 青野健利
PDF
ASP.NETの進化とASP.NET Core Blazorの凄さ
by
Sho Okada
PPTX
10分でわかるOpenAPI V3
by
Kazuchika Sekiya
PDF
[jjug] Java と Benchmark
by
Tokuhiro Matsuno
PDF
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
by
Toshiaki Maki
PDF
Swaggerで始めるモデルファーストなAPI開発
by
Takuro Sasaki
PPTX
明日からはじめられる Docker + さくらvpsを使った開発環境構築
by
MILI-LLC
PDF
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
by
Toshiaki Maki
PPTX
React meetup 3_eight
by
Hideharu Okuma
PPTX
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
by
Takao Tetsuro
PDF
Apiドキュメンテーションツールを使いこなす【api blueprint編】
by
dcubeio
PDF
Jawsug chiba API Gateway
by
Takuro Sasaki
PPTX
React Nativeってどうなの?
by
Ryosuke Hara
react-scriptsはwebpackで何をしているのか
by
暁 三宅
ASP.NET WebAPI 体験記 #clrh99
by
Katsuya Shimizu
React NativeでTwitterクライアントを作ってみよう
by
dcubeio
OWIN って何?
by
miso- soup3
2016/05/01 Visual Studio with Cordova
by
miso- soup3
こんなに使える!今どきのAPIドキュメンテーションツール
by
dcubeio
Java + React.jsでSever Side Rendering #reactjs_meetup
by
Toshiaki Maki
React and-rx
by
Taketoshi 青野健利
ASP.NETの進化とASP.NET Core Blazorの凄さ
by
Sho Okada
10分でわかるOpenAPI V3
by
Kazuchika Sekiya
[jjug] Java と Benchmark
by
Tokuhiro Matsuno
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
by
Toshiaki Maki
Swaggerで始めるモデルファーストなAPI開発
by
Takuro Sasaki
明日からはじめられる Docker + さくらvpsを使った開発環境構築
by
MILI-LLC
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
by
Toshiaki Maki
React meetup 3_eight
by
Hideharu Okuma
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
by
Takao Tetsuro
Apiドキュメンテーションツールを使いこなす【api blueprint編】
by
dcubeio
Jawsug chiba API Gateway
by
Takuro Sasaki
React Nativeってどうなの?
by
Ryosuke Hara
More from Taketoshi 青野健利
PDF
ServiceWorkerとES6 Modules時代のTypescript開発考察
by
Taketoshi 青野健利
PDF
javascriptのデータ構造の話
by
Taketoshi 青野健利
PDF
V8 javascript engine for フロントエンドデベロッパー
by
Taketoshi 青野健利
PDF
非同期javascriptの過去と未来
by
Taketoshi 青野健利
PDF
仮想DOMの実装とパフォーマンス
by
Taketoshi 青野健利
PDF
JavascriptのGC入門
by
Taketoshi 青野健利
PDF
Jspmとtypescriptで開発する
by
Taketoshi 青野健利
ServiceWorkerとES6 Modules時代のTypescript開発考察
by
Taketoshi 青野健利
javascriptのデータ構造の話
by
Taketoshi 青野健利
V8 javascript engine for フロントエンドデベロッパー
by
Taketoshi 青野健利
非同期javascriptの過去と未来
by
Taketoshi 青野健利
仮想DOMの実装とパフォーマンス
by
Taketoshi 青野健利
JavascriptのGC入門
by
Taketoshi 青野健利
Jspmとtypescriptで開発する
by
Taketoshi 青野健利
V8 Iginition Interpreter
1.
V8IgnitionInterpreter
2.
名前: @brn (青野健利) 職業:
フロントエンドエンジニア・ネイティブエンジニア 会社: Cyberagent アドテクスタジオ RightSegment・AI Messenger ブログ: http://abcdef.gets.b6n.ch/
3.
WhatisIgnition? V8には今までインタープリタがなかった。 ソースコードから即full-codegenでアセンブラを生成、実行していた。 しかし、full-codegenは最適化されていない、型情報を持ったアセンブラを 大量に吐き出すため、コードサイズが大きくなってしまう。 そのため、V8は関数単位でlazy compileを行っていたのだが、 これが原因でStartupTimeが大きくなってしまうことがあった。 特に内部関数は全て再パースが必要なため、パースにかかる時間も増大した。
4.
WhatisIgnition? Ignitionはレジスタベースのバイトコードインタープリタ。 full-codegenが引き起こしていた問題を解決する為に実装された。 • コードサイズの低減(50%) • full-codegenと比較してもわずかなパフォーマンスの劣化 •
devtoolの完全なサポート • full-codegenの完全な置き換え(将来的に) • TurboFanのフロントエンドとして、jsの再パースをせずにdeoptimizationを行う
5.
V8sofar… Javascript Ast FullCodegen Crankshaft Architecture(x86, Mips,
Arm etc…)
6.
V8sofar… Javascript Ast Ignition TurboFan Architecture(x86, Mips, Arm
etc…) *CodeAssembler
7.
Ignition overview Bytecode generation バイトコードの生成はBytecodeGeneratorによって行われる BytecodeGeneratorはAstVisitorを実装しており、各Astを巡回して、ByteCodeを生成していく。 バイトコードはBytecodeArrayBuilderによって配列として生成される。 バイトコードの生成が完了すると、 各アーキテクチャのGenerate_InterpreterEntryTrampolineが呼び出され、 インタープリタの開始コードが生成される。 Bytecode
execution バイトコードの実行は、InterpreterEntryTrampolineから各BytecodeHandlerが呼び出されて行われる。 各BytecodeHandler内では、新たに追加されたCodeStubAssemblerが、 アーキテクチャ独立のアセンブラコードを生成し、それをTurboFan経由で各アーキテクチャの コードに変換、実行結果をaccumulatorに格納していく。 このバイトコードの実行時にプロファイリング用コードも出力しておく。
8.
Ignition overview Javascript Ast Ignition MachineCode InterpreterEntryTrampoline BytecodeArray BytecodeHandler Bytecode Generate 呼び出し Browser 呼び出し
9.
Ignition execution BytecodeArray Bytecodes dispatch dispatch
… BytecodeHandler CodeStubAssembler AccessorAssembler RawMachineAssembler MachineOperatorBuilder CodeAssembler BytecodeHandler CodeStubAssembler AccessorAssembler RawMachineAssembler MachineOperatorBuilder CodeAssembler
10.
Ignition Bytecode [generating bytecode for function: ] Parameter count 1 Frame size 32 0x75a3212fece @ 0 : 09 00 LdaConstant [0] 0x75a3212fed0 @ 2 : 1f f9 Star r1 0x75a3212fed2 @ 4 : 02 LdaZero 0x75a3212fed3 @ 5 : 1f f8 Star r2 0x75a3212fed5 @ 7 : 20 fe f7 Mov <closure>, r3 0x75a3212fed8 @ 10 : 55 aa 01 f9 03 CallRuntime [DeclareGlobalsForInterpreter], r1-r3 0 E> 0x75a3212fedd @ 15 : 92 StackCheck 39 S> 0x75a3212fede @ 16 : 0a 01 02 LdaGlobal [1], [2] 0x75a3212fee1 @ 19 : 1f f9 Star r1 0x75a3212fee3 @ 21 : 03 01 LdaSmi [1] 0x75a3212fee5 @ 23 : 1f f8 Star r2 0x75a3212fee7 @ 25 : 03 01 LdaSmi [1] 0x75a3212fee9 @ 27 : 1f f7 Star r3 39 E> 0x75a3212feeb @ 29 : 52 f9 f8 f7 05 CallUndefinedReceiver2 r1, r2, r3, [5] 0x75a3212fef0 @ 34 : 1f fa Star r0 49 S> 0x75a3212fef2 @ 36 : 96 Return Constant pool (size = 2) 0x75a3212fe79: [FixedArray] - map = 0x180f21302309 <Map(FAST_HOLEY_ELEMENTS)> - length: 2 0: 0x75a3212fd71 <FixedArray[4]> 1: 0x344fee497319 <String[3]: add> [generating bytecode for function: add] Parameter count 3 Frame size 0 12 E> 0x75a32130196 @ 0 : 92 StackCheck 23 S> 0x75a32130197 @ 1 : 1e 02 Ldar a1 32 E> 0x75a32130199 @ 3 : 2c 03 02 Add a0, [2] 37 S> 0x75a3213019c @ 6 : 96 Return
11.
TurboFan optimization Code optimization Ignitionによって生成されたバイトコードはTurboFanアーキテクチャを利用して最適化される。 BytecodeGraphBuilderによってTurboFanはグラフ指向のIRを生成し、コードの最適化を行う。 最適化自体はループ・Closureの生成等でランタイム呼び出しによって実行される。 Code
deoptimization TurboFanが脱最適化を行う際は、TurboFanによって生成された、TranslatedStateオブジェクトから、 インタープリタのスタックフレームを再生成し、NotifyDeoptimizedランタイム を呼び出して、再度インタープリタに入る。
12.
TurboFan optimization overview Javascript Ast Ignition *CodeAssembler Architecture(x64,
Mips, Arm, etc…) TurboFan 最適化 脱最適化
13.
TurboFan optimization detail ... OptimizePhase PeelingLoop etc... LoadElimination SimplifiedLoweringPhase IR
Graph IR Node Operator etc... IR Node Operator 1. Optimize Graph nodes Generate Arch OP Code InstructionSelector InstructionSelectorX64 InstructionSelectorX87 InstructionSelectorMips InstructionSelectorArm etc... 2. Generate new instruction CodeGenerator OptimizedCode 3. Generate Machine Code
14.
TurboFan Inlining Caching
(IC) これまでのICの問題点 プロパティアクセスのたびに、Map(hidden class)の存在チェックと、Mapからの値のロード を行うコードを生成しており、オブジェクトの情報もオブジェクト自身にエンコーディング されて持っていたため、メモリを圧迫していた。 また、ファストパスかキャッシュミスヒットのいずれかの状態しかなかったため、 キャッシュミスヒットの速度低下も問題であった。 新たなIC FeedbackVectorというコード・オブジェクトの情報に責務を持つクラスを新たに設け、 ICのオーバーヘッドを大きく減らした。 このFeedbackVectorを利用することで、以前のICではLoadIC_MissかFoundの二通りだったが、 TurboFanのICでは、fast・noninlined・missの三通りになり、LoadIC_Missのケースを減らしている。
15.
まとめ TurboFanのところは結構怪しい… V8のコード追うのホントにしんどい 参考 https://github.com/v8/v8 https://v8project.blogspot.jp/2016/08/firing-up-ignition-interpreter.html https://docs.google.com/document/d/11T2CRex9hXxoJwbYqVQ32yIPMh0uouUZLdyrtmMoL44/edit# http://benediktmeurer.de/2017/03/01/v8-behind-the-scenes-february-edition/
Download