4 research outputs found

    Warming Up a Cold Front-End with Ignite

    Get PDF
    Serverless computing is a popular software deployment model for the cloud, in which applications are designed as a collection of stateless tasks. Developers are charged for the CPU time and memory footprint during the execution of each  serverless function, which incentivizes them to reduce both runtime and memory usage. As a result, functions tend to be short (often on the order of a few milliseconds) and compact (128–256 MB). Cloud providers can pack thousands of such functions on a server, resulting in frequent context switches and a tremendous degree of interleaving. As a result, when a given memory-resident function is re-invoked, it commonly finds its on-chip microarchitectural state completelycold due to thrashing by other functions — a phenomenon termed lukewarm invocation. Our analysis shows that the cold microarchitectural state due to lukewarm invocations is highly detrimental to performance, which corroborates prior work. The main source of performance degradation is the front-end, composed of instruction delivery, branch identification via the BTB and the conditional branch prediction. State-of-the-art front-end prefetchers show only limited effectiveness on lukewarm invocations, falling considerably short of an ideal front-end. We demonstrate that the reason for this is the cold microarchitectural state of the branch identification and prediction units. In response, we introduce Ignite, a comprehensive restoration mechanism for front-end microarchitectural state targeting instructions, BTB and branch predictor via unified metadata. Ignite records an invocation’s control flow graph in compressed format and uses that to restore the front-end structures the next time the function is invoked. Ignite outperforms state-of-the-art front-end prefetchers, improving performance by an average of 43% by significantly reducing instruction, BTB and branch predictor MPKI

    言語仮想機械におけるカスタマイズ可能なごみ集めモジュールの実装

    Get PDF
     近年では,あらゆるモノをネットワークで結ぶ新たな技術としてIoT(Internet of Things)に注目が集まっている.IoTを始めとして,組込み機器上で動作させるプログラムはハードウェアに最適化させるために,Cやアセンブラといった低レベルのプログラミング言語を用いて開発されることが多い.しかし,こうした言語による開発には,時間がかかる上に,バグが発生しやすいという問題がある. この問題を解決するため,組込み向けプログラムの開発にJavaScriptを利用することを目的とし,各IoTデバイスとその上で動作するプログラムに特化したJavaScript仮想機械を生成するカスタマイズ可能なフレームワークが開発されている.このフレームワークは,プログラマがデータ型に関する定義ファイルを作成することで,デバイスや動作させるプログラムに最適化した仮想機械を生成できる. 本研究ではこのフレームワークのカスタマイズ性の拡張を目的とし,メモリ管理の部分に着目した.このフレームワークに現在実装されているごみ集めは,マークスイープ方式と呼ばれるアルゴリズムのものだが,本研究では新たにコピー方式と呼ばれるアルゴリズムも実装し,プログラマが,動作させるプログラムに合わせて使用するごみ集めのアルゴリズムを選択できるようにした.また,性能評価実験を行い,ごみ集めのアルゴリズムをプログラムごとに選択できることの効果を確認した.電気通信大学201

    Optimizing JavaScript Engines for Modern-day Workloads

    Get PDF
    In modern times, we have seen tremendous increase in popularity and usage of web-based applications. Applications such as presentation softwareand word processors, which were traditionally considered desktop applications are being ported to the web by compiling them to JavaScript. Since JavaScript is the de facto language of the web, JavaScript engine performance significantly affects the overall web application experience. JavaScript, initially intended solely as a client-side scripting language for web browsers, is now being used to implement server-side web applications (node.js) that traditionally have been written in languages like Java. Web application developers expect "C"-like performance out of their applications. Thus, there is a need to reevaluate the optimization strategies implemented in the modern day engines.Thesis statement: I propose that by using run-time and ahead-of-time profiling and type specialization techniques it is possible to improve the performance of JavaScript engines to cater to the needs of modern-day workloads.In this dissertation, we present an improved synergistic type specialization strategy for optimized JavaScript code execution, implemented on top of a research JavaScript engine called MuscalietJS. Our technique combines type feedback and type inference to reinforce and augment each other in a unique way. We then present a novel deoptimization strategy that enables type specialized code generation on top of typed, stack-based virtual machines like CLR. We also describe a server-side offline profiling technique to collect profile information for web application which helps client JavaScript engines (running in the browser) avoid deoptimizations and improve performance of the applications. Finally, we describe a technique to improve the performance of server-side JavaScript code by making use of intelligent profile caching and two new type stability heuristics
    corecore