Performance Scalability Analysis of JavaScript Applications with Web Workers
Javier Verduacute; and Alex Pajuelo
Abstract—Web applications are getting closer to the performance of native
applications taking advantage of new standard-based technologies. The recent HTML5 standard includes, among others, the Web Workers API that allows
executing JavaScript applications on multiple threads, or workers. However, the internals of the browserrsquo;s JavaScript virtual machine does not expose direct
relation between workers and running threads in the browser and the utilization of logical cores in the processor. As a result, developers do not know how
performance actually scales on different environments and therefore what is the optimal number of workers on parallel JavaScript codes. This paper presents the first performance scalability analysis of parallel web apps with multiple workers.
We focus on two case studies representative of different worker execution models.
Our analyses show performance scaling on different parallel processor
microarchitectures and on three major web browsers in the market. Besides, we study the impact of co-running applications on the web app performance. The
results provide insights for future approaches to automatically find out the optimal number of workers that provide the best tradeoff between performance and
resource usage to preserve system responsiveness and user experience, especially on environments with unexpected changes on system workload.
Index Terms—HTML5, web workers, javascript, web apps, parallelism, multithreading
Ccedil;
- INTRODUCTION
WEB applications follow the new HTML5 standard developed by the World Wide Web Consortium [4] to address the requirements of current and future platforms, web contents, and cloud services. HTML5 provides new HTML elements, libraries extensions, and APIs to take further advantage of the underlying hardware, as well as reducing the need to install third-party plugins. Hence, current web apps show similar performance to native applications.
Some programming languages exploit parallelism by the use of specific APIs for multithreading (e.g., CUDA, OpenMP) with a per- formance scaling closely related to the underlying hardware resources. Other parallel programming languages, that require vir- tual machines (e.g., Erlang, Java), increase deviations of perfor- mance scalability, since it is not only related to hardware resources, but also to the internals of the virtual machine [1], [2]. This paper focuses on JavaScript, an interpreted language, largely employed to develop web apps executed in web browsers. HTML5 pays special attention to the support of JavaScript and brings, among others, a new mechanism and the API called Web Work- ers [6]. Even though JavaScript follows a single-thread execution model, Web Workers API allows multiple JavaScript codes to con- currently run in background threads, from now on workers, com- municated by message passing with the main thread. As JavaScript web apps run on top of a web browserrsquo;s virtual machine, it increases the unpredictability of performance scaling of languages that run on virtual machines.
By the use of Web Workers API, the developers are responsible of extracting the parallelism and properly express it in the web apps, unlike Thread-Level-Speculation techniques of JavaScript engines that automatically extract parallelism from sequential codes [5]. Programmers currently use the processor resources availability as heuristic to find out how many workers should be
- The authors are with the Department of Computer Architecture, BarcelonaTECH (UPC), Barcelona, Spain. E-mail: {jverdu, mpajuelo}@ac.upc.edu.
Manuscript received 23 June 2015; revised 18 Sept. 2015; accepted 19 Oct. 2015. Date of
publication 25 Oct. 2015; date of current version 5 Jan. 2017.
For information on obtaining reprints of this article, please send e-mail to: reprints@ieee. org, and reference the Digital Object Identifier below.
Digital Object Identifier no. 10.1109/LCA.2015.2494585
spawned to get the highest performance. Although HTML5 pro- vides support to take advantage of hardware acceleration and better use of resources, JavaScript is not able to retrieve the under- lying hardware specifications, such as the number of logical cores, aka hardware threads, comprised in the CPU. Major browser ven- dors address this constraint in different manner [12]. Google Chrome, Safari, and Opera implement a new attribute on the browserrsquo;s navigator object, called navigator.hardwareConcurrency to obtain the number of hardware threads, regardless of the system workload. Other web browsers, such as Internet Explorer and Fire- Fox, do not support it yet and users have to develop a benchmark to estimate the number of logical cores available. But, this estima- tion is sensitive to both system workload variations, since other co- running applications can deviate the performance of the bench- mark, and optimizations of JavaScript engines, since a particular benchmark can be highly optimized by some browsers, but badly interpreted by others. Thus, both approaches provide biased infor- mation to developers to determine what is the optimal number of web workers for any particular web app.
This paper presents the first performance scalability analysis of JavaScript web apps that comprise multiple workers. We introduce a classification of web apps according to the worker execution models and focus specifically on two representative case studies. We compare performance scalability between parallel microarchi- tectures, single-threaded and multi-threaded multi-cores, as well as between Chrome and other two major web browsers. Besides, this work also analyzes the impact of co-running applications on the performance of highly pa
剩余内容已隐藏,支付完成后下载完整资料
基于Web工作者的javascript应用程序
性能可扩展性分析
Javier Verduacute; and Alex Pajuelo
*计算机体系结构部,加泰罗尼亚理工大学,加泰罗尼亚,西班牙
摘要:Web应用程序越来越接近本机的性能应用程序利用新的基于标准的技术。最新的HTML5标准包括Web工作者API,它允许在多个线程或工作线程上执行javascript应用程序。但是,浏览器的javascript虚拟机的内部不会直接公开浏览器中工作线程和运行线程之间的关系以及处理器中逻辑核心的利用率。因此,开发人员不知道如何性能实际上可以在不同的环境中扩展、并行JavaScript代码上的最佳工作人员数是多少。本文首次对具有多个工作人员的并行Web应用程序进行了性能可伸缩性分析。我们着重于两个代表不同工人执行模式的案例研究。我们的分析表明不同并行处理器的性能有一定的伸缩性。微体系结构和市场上的三种主要Web浏览器。此外,我们还研究了协同运行应用程序对Web应用程序性能的影响。这个结果为未来自动找出最佳工作人数的方法提供了见解,这些工作人数在绩效和资源使用,以保持系统响应能力和用户体验,特别是在系统工作负载发生意外变化的环境中。
关键词:HTML5, web workers, javascript, web apps, parallelism, multithreading
1 介绍
Web应用程序遵循万维网联盟开发的新HTML5标准,以满足当前和未来平台、Web内容和云服务的需求。HTML5提供了新的HTML元素、库扩展和API,以进一步利用底层硬件,并减少安装第三方插件的需要。因此,当前的Web应用程序显示出与本机应用程序相似的性能。
一些编程语言通过使用特定的API进行多线程(例如CUDA、OpenMP)来利用并行性,其性能扩展与底层硬件资源密切相关。其他需要VIR的机器(例如,Erlang,Java)的并行编程语言,增加了性能可扩展性的偏差,因为它不仅与硬件资源有关,而且与虚拟机的内部有关。本文主要研究解释语言javascript,它主要用于开发在Web浏览器中执行的Web应用程序。HTML5特别关注对javascript的支持,并带来了一种新的机制和名为web-works-ers的API[6]。尽管javascript遵循单线程执行模型,但是web workers api允许多个javascript代码从现在起在后台线程中运行,并通过与主线程传递的消息进行通信。当JavaScript Web应用程序运行在Web浏览器的虚拟机上时,它会增加在虚拟机上运行的语言的性能扩展的不可预测性。
尽管HTML5提供了利用硬件加速和更好地利用资源的支持,但JavaScript无法检索不合理的硬件规范,例如CPU中包含的逻辑核心(即硬件线程)的数量。主浏览器ven dors以不同的方式处理这个约束[12]。Google Chrome、Safari和Opera在浏览器的navigator对象上实现了一个新的属性,称为navigator.hardwareconcurrency,以获取硬件线程数,而不管系统工作负载如何。其他Web浏览器,如Internet Explorer和Fire-Fox,还不支持它,用户必须开发一个基准来估计可用的逻辑核心的数量。但是,这种评估对两种系统工作负载变化都很敏感,因为其他共同运行的应用程序可能会偏离基准点的性能,以及对JavaScript引擎的优化,因为某些浏览器可以高度优化某个特定的基准点,但其他浏览器会对其进行错误的解释。因此,这两种方法都为开发人员提供了有偏见的信息,以确定任何特定Web应用程序的最佳Web工作者数量。
本文首先对包含多个工作人员的JavaScript Web应用程序进行性能可伸缩性分析。我们根据工作人员执行模型对Web应用程序进行了分类,并特别关注两个具有代表性的案例研究。我们比较了并行微体系结构、单线程和多线程多核以及Chrome和其他两种主要Web浏览器之间的性能可伸缩性。此外,本文还分析了协同运行应用程序对高度并行的JavascriptWeb应用程序性能的影响。这些结果为未来寻找利用并行性的最佳工作人员数量的方法提供了见解。
2 相关工作
一些研究使用单线程基准来描述JavaScript程序。其他作者提出了JavaScript代码的细粒度并行化。福图纳等。[3]分析并行任务和事件的潜在加速限制。Martin-Sen等人[5]实现并分析浏览器的javascript引擎的线程级推测,以利用并行处理器。最后,Watanabe等人描述了一种使用Web工作者对交互式动画javascript进行并行化的技术,但作者没有研究它的可伸缩性。
这些工作都没有集中在分析基于工作人员的Web应用程序的性能可伸缩性或主要Web浏览器之间的相关差异上。
3执行模式分类
并行Javascript Web应用程序由负责UI的主线程组成,因为工作人员由于访问限制而无法执行该操作[6],而Web工作人员的后台线程旨在计算密集型任务,以保持响应能力并提高用户体验。虽然可以在Web工作者之间创建通信通道,但本文主要讨论工作者和父线程之间的默认消息传递。此外,工作人员分为两类:专用工作人员,即标准工作人员,只能由生成它的脚本访问;共享工作人员,可以从同一域中运行的任何脚本访问。其他新兴类型的工人仍在试验中[6]。
我们介绍了一种基于工作者执行模型的并行Web应用程序分类,而不考虑工作者的起源。事实上,这项工作的重点是Web应用程序代码行为以及如何利用并行性:
单个工作者:所有计算密集型任务都由单个工人完成。例如,视频游戏可以卸载CPU密集型任务,如人工智能和物理,以保持响应能力和帧速率。包含多个计算密集型任务(适合在多个线程中运行)的Web应用程序被传送到其他类别中的一个。
多个异步工作者:将大量/连续的工作负载分配给可用工人,按标准进行处理,像拼写检查。这些应用程序在工人中没有同步点。一旦给定的工作线程通知父线程任务已完成,就会向工作线程发送新的工作负载以进行处理。
多个同步工作者:固有的并行代码,例如作为图像/视频处理,用于同步出现的问题,比如展示一个新框架。每一个新的工作负载,一个框架,可以分割成多个作业、切片,由不同的工人来处理。但是,在所有工人完成工作之前,工人不能直接开始处理新的框架。因此,这些应用程序可以显示空闲工人的时间段,甚至具有挂起的帧。
4 框架
我们使用一台带有Intel CoreTM i7-3960x处理器(3.3 GHz)的个人计算机,六个超线程核心,共12个逻辑核心,16 GB DDRAM-III和一个NVIDIA GTX560视频卡,正在运行Microsoft WindowsTM Server 2008 R2。我们使用Windows因为它是在台式计算机上运行Web应用程序的最终用户最广泛使用的操作系统[9]。所有非关键服务和应用程序都已禁用,以尽可能避免测量中的任何偏差。
我们使用ProcessExplorer v15.21[8]通过使用集合关联来选择在实验中用于模拟不同并行处理器体系结构的可用逻辑核心。
Web应用程序运行在三种主要Web浏览器的更新版本中[9]:Google Chrome v42.0.2311.90m(我们实验中的默认浏览器)、Mozilla Firefox v37.0.2和Microsoft Internet Explorer v11.0.9600.16476。
一些著名的web应用和web浏览器门户提供了并行的javascript演示。其中大多数都是由专门的工人来实施的。实际上,我们的分析独立于工作人员是专用的还是共享的,但是它关注的是具有多个工作人员的Web应用程序的执行模型,请参见第3节。我们已经运行了几个没有人机交互需求的Web应用程序。本文深入分析了两个案例研究,由于空间限制,我们对每个案例使用一个具有代表性的基准。尽管其他Web应用程序的特定性能数字可能有所不同,但本文显示的趋势是相同的:
(1). 多个异步工作人员:hash bruteforcer[13],hash app,是一个具有专门工作人员的web应用程序,用于计算MD5哈希。我们使用默认配置和数据集。从给定的128位MD5编码输入,应用程序使用暴力攻击来解码字符串,工作人员执行持续的CPU密集型工作负载。
(2). 多个同步工作人员:Raytracer Web应用程序Rayapp执行高度CPU密集型数学计算以模拟场景的组件,如环境光和阴影,以渲染每一帧。我们使用默认配置,但将默认画布大小扩大到300times;300像素。根据画布的大小,场景被分割成若干个切片。因此,在我们的实验中,每个帧渲染由15个切片组成分配专用工作人员的可配置池大小。我们对其他画布尺寸进行了实验,显示了不同的性能数字,但趋势相似。
(1a) HashApp
(1b) RayApp
这两个基准都进行了轻微的修改,以进行从1到20名网络工作者的实验。我们修正了这个限制,因为它是Firefox支持的最大工作人员数。我们通过在每次实验后关闭和重新启动Web浏览器来防止由于以前的实验(主要是由于内部优化和垃圾收集器问题)而导致的测量偏差。最后,我们从每个实验的10次运行中取平均结果,每次运行30秒,时间足以达到稳定的性能。
5 实验结果
5.1微结构影响
图1a和1b分别描述了hashapp和rayapp在两个不同的微体系结构上以chrome运行时的性能。即多线程(n核mt)和单线程(n核st)多核处理器,即CPU中可用的核数。Y轴表示以每秒字符串数、sps、hashapp和每秒帧数表示的性能度量,fps,用于rayapp。X轴表示网络工作者的数量。
图1a显示了在多个单线程内核(实线)上运行hashapp的性能比使用多线程多核架构(开放线)高,这是因为共享硬件资源的争用更低。在具有单线程核心的处理器上的执行显示出与多线程多核体系结构相比的大约双性能。在这两种情况下,性能都呈线性增长,直到每个核心上都有一个工人在运行。使用更多的工人表示边际或非边际绩效改进。硬件资源的争用是持续的,因为线程之间没有同步障碍,因此Web工作者不断地要求共享硬件资源。然而,在两个微体系结构中运行比逻辑核心更多的工作人员并不会降低性能。
相比之下,rayapp在两个微体系结构上表现出类似的性能可伸缩性,如图1b所示。性能增量受到同步工作者执行模型在每个渲染帧处固有的障碍的限制,如第3节所述。也就是说,由于Web工作者在一段时间内处于空闲状态,所以对共享硬件资源的争用较低,因此微体系结构之间的性能差异较低。这个单线程多核CPU加速2.85倍,
使用五个Web工作者,而多线程体系结构的速度提高了2.22倍,运行相同数量的工作人员。与异步工作程序不同,运行更多的Web工作程序比逻辑核稍微降低性能。
这一分析向JavaScript开发人员建议,他们不仅要考虑逻辑核心的数量,还要考虑处理器体系结构的具体情况,以便在考虑到共享硬件资源的潜在竞争的情况下,估计最佳工作人员数量。
此外,我们使用chrome的内存分析工具来分析内存管理,这就是垃圾收集器的行为。hashapp具有持续的内存消耗,内存区域减少,只有几Kbs,在执行期间定期清理,而rayapp则呈现更大的内存大小,数十MB,反复释放。然而,由于空间的限制,本文不在讨论范围之内,但在我们未来的工作中,要分析垃圾收集器对共享硬件资源的影响,而不是争用对共享硬件资源的影响。
(2a) HashApp
(2b) RayApp
5.2 浏览器的影响
每个Web浏览器都包含它自己的javascript虚拟机实现和优化。本节探讨使用其他Web浏览器(firefox(ff)和Internet Explorer(ie)对性能可伸缩性的影响。图2还显示了使用与图1相同的六个逻辑核心微体系结构的测量结果。正方形代表火狐的性能,而三角形代表IE的性能。此外,开放和实体造型线分别指多线程和单线程多核架构。
在火狐和IE中,使用单线程和多线程内核对hashapp性能可扩展性的影响要比在Chrome中小得多(图2a)。然而,单线程多核CPU比多线程核心提高了hashapp的性能,火狐和IE分别提高了8%和28%。
尽管Web浏览器之间存在绝对的性能差异,但图2b表明,在两个评估的体系结构上,多个同步工作者在三个Web浏览器中运行时具有相似的性能可伸缩性。也就是说,单线程多核的速度分别为3.07x(ff)和2.91x(ie),而多线程内核的速度分别为2.47x(ff)和2.17x(ie)。所有这些都类似于在各自的架构上从chrome获得的加速。
5.3 协同运行应用程序影响
在不考虑由于共同运行的应用程序导致的系统工作负载变化的情况下,扩展Web工作者的数量可能会使机器过载或增加对共享硬件资源的争用,从而导致系统进入性能降级阶段。
图3a和3b分别结合图2描述了在chrome中运行hashapp和rayapp的结果。不同Web浏览器的性能可扩展性。
使用带有六个单线程核心的CPU共同运行应用程序。每个基准都是由六个网络工作者组成的。垂直轴表示性能,X轴表示时间线(秒)。当Web浏览器的窗口有焦点(实线)并且焦点(虚线)不在时,我们会显示基准测试的结果,即选择了一个共同运行的应用程序窗口。
共同运行的应用程序是两个不同的Web浏览器,每个浏览器执行hashapp,三个Web工作者,占CPU中可用逻辑核心总数的一半。我们将这些运
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[19630],资料为PDF文档或Word文档,PDF文档可免费转换为Word
您可能感兴趣的文章
- 饮用水微生物群:一个全面的时空研究,以监测巴黎供水系统的水质外文翻译资料
- 步进电机控制和摩擦模型对复杂机械系统精确定位的影响外文翻译资料
- 具有温湿度控制的开式阴极PEM燃料电池性能的提升外文翻译资料
- 警报定时系统对驾驶员行为的影响:调查驾驶员信任的差异以及根据警报定时对警报的响应外文翻译资料
- 门禁系统的零知识认证解决方案外文翻译资料
- 车辆废气及室外环境中悬浮微粒中有机磷的含量—-个案研究外文翻译资料
- ZigBee协议对城市风力涡轮机的无线监控: 支持应用软件和传感器模块外文翻译资料
- ZigBee系统在医疗保健中提供位置信息和传感器数据传输的方案外文翻译资料
- 基于PLC的模糊控制器在污水处理系统中的应用外文翻译资料
- 光伏并联最大功率点跟踪系统独立应用程序外文翻译资料
