Erlang WorkshopPub Date : 2013-09-28DOI: 10.1145/2505305.2505311
Huiqing Li, S. Thompson
{"title":"Multicore profiling for Erlang programs using percept2","authors":"Huiqing Li, S. Thompson","doi":"10.1145/2505305.2505311","DOIUrl":"https://doi.org/10.1145/2505305.2505311","url":null,"abstract":"Erlang is a functional programming language with built-in support for concurrency based on share-nothing processes and asynchronous message passing. The design of Erlang makes it suitable for writing concurrent and parallel applications, taking full advantage of the computing power of modern multicore machines. However many existing Erlang applications are sequential, in need of parallelisation.\u0000 In this paper, we present the Erlang concurrency profiling tool Percept2,and demonstrate how the information provided by it can help the user to explore the potential parallelism in an Erlang application and how the system performs on the Erlang multicore system. Percept2 thus allows users improve the performance and scalability of their applications.","PeriodicalId":140676,"journal":{"name":"Erlang Workshop","volume":"8 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2013-09-28","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129235571","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Erlang WorkshopPub Date : 2013-09-28DOI: 10.1145/2505305.2505308
David Klaftenegger, Konstantinos Sagonas, Kjell Winblad
{"title":"On the scalability of the Erlang term storage","authors":"David Klaftenegger, Konstantinos Sagonas, Kjell Winblad","doi":"10.1145/2505305.2505308","DOIUrl":"https://doi.org/10.1145/2505305.2505308","url":null,"abstract":"The Erlang Term Storage (ETS) is an important component of the Erlang runtime system, especially when parallelism enters the picture, as it provides an area where processes can share data. It is therefore important that ETS's implementation is efficient, flexible, but also as scalable as possible. In this paper we document and describe the current implementation of ETS in detail, discuss the main data structures that support it, and present the main points of its evolution across Erlang/OTP releases. More importantly, we measure the scalability of its implementations, the effects of its tuning options, identify bottlenecks, and suggest changes and alternative designs that can improve both its performance and its scalability.","PeriodicalId":140676,"journal":{"name":"Erlang Workshop","volume":"4 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2013-09-28","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121292620","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Erlang WorkshopPub Date : 2013-09-28DOI: 10.1145/2505305.2505316
Adrian Francalanza, Tyron Zerafa
{"title":"Towards an abstraction for remote evaluation in Erlang","authors":"Adrian Francalanza, Tyron Zerafa","doi":"10.1145/2505305.2505316","DOIUrl":"https://doi.org/10.1145/2505305.2505316","url":null,"abstract":"Erlang is an industry-standard cross-platform functional programming language and runtime system (ERTS) intended for the development of scalable enterprise projects that are inherently concurrent and distributed systems [1]. In essence, an Erlang system consists of a number of actors [3] (processes) executing concurrently across a number of nodes. These actors interact with one another (mainly) through asynchronous messaging and are also capable of spawning further actors, either locally or at a remote node.","PeriodicalId":140676,"journal":{"name":"Erlang Workshop","volume":"89 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2013-09-28","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"114010221","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Erlang WorkshopPub Date : 2013-09-28DOI: 10.1145/2505305.2505306
Miguel Angel Francisco, Macías López, Henrique Ferreiro, Laura M. Castro
{"title":"Turning web services descriptions into quickcheck models for automatic testing","authors":"Miguel Angel Francisco, Macías López, Henrique Ferreiro, Laura M. Castro","doi":"10.1145/2505305.2505306","DOIUrl":"https://doi.org/10.1145/2505305.2505306","url":null,"abstract":"In this work, we face the problem of generating good quality test suites and test cases for web services. We present a framework to test web services based on their formal description, following a black-box approach and using Property-Based Testing.\u0000 Web services are a popular solution to integrate components when building a software system, or to allow communication between a system and third-party users, providing a flexible, reusable mechanism to access its functionalities. Testing of web services is a key activity: we need to verify their behaviour and ensure their quality as much as possible, as efficiently as possible.\u0000 By automatically deriving QuickCheck models from its WSDL description and its OCL semantic constraints, we enable generation and execution of great amounts of automatically generated test cases. Thus, we avoid the usual compromise between effort and cost, which too often leads to smaller and less exhaustive test suites than desirable.\u0000 To illustrate the advantages of our framework, we present an industrial case study: a distributed system which serves media contents customers' TV screens.","PeriodicalId":140676,"journal":{"name":"Erlang Workshop","volume":"1983 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2013-09-28","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"131111282","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Erlang WorkshopPub Date : 2013-09-28DOI: 10.1145/2505305.2505317
Pablo Lamela Seijas, Huiqing Li, S. Thompson
{"title":"Towards property-based testing of RESTful web services","authors":"Pablo Lamela Seijas, Huiqing Li, S. Thompson","doi":"10.1145/2505305.2505317","DOIUrl":"https://doi.org/10.1145/2505305.2505317","url":null,"abstract":"Developing APIs as Web Services over HTTP implies adding an extra layer to software, compared to the ones that we would \u0000need to develop an API distributed as, for example, a library. \u0000 \u0000This additional layer must be included in testing too, but this implies that the software under test has an additional complexity due both to the need to use an intermediate protocol in tests and to the need to test compliance with the constraints imposed by that protocol: in this case the constraints defined by the REST architectural style. \u0000 \u0000On the other hand, these requirements are common to all the Web Services, and because of that, we should be able to abstract this aspect of the testing model so that we can reuse it in testing any Web Service. \u0000 \u0000In this paper, as a first step towards automating the testing of Web Services over HTTP, we describe a practical mechanism and model for testing RESTful Web Services without side effects and give an example of how we successfully adapted that mechanism to test two different existing Web Services: Storage Room by Thriventures and Google Tasks by Google. For this task we have used Erlang together with state machine models in the property-based testing tool Quviq QuickCheck, implemented using the statem module.","PeriodicalId":140676,"journal":{"name":"Erlang Workshop","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2013-09-28","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"130613145","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Erlang WorkshopPub Date : 2013-09-28DOI: 10.1145/2505305.2505315
A. Ghaffari, Natalia Chechina, P. Trinder, Jon Meredith
{"title":"Scalable persistent storage for Erlang: theory and practice","authors":"A. Ghaffari, Natalia Chechina, P. Trinder, Jon Meredith","doi":"10.1145/2505305.2505315","DOIUrl":"https://doi.org/10.1145/2505305.2505315","url":null,"abstract":"The many core revolution makes scalability a key property. The RELEASE project aims to improve the scalability of Erlang on emergent commodity architectures with 100,000 cores. Such architectures require scalable and available persistent storage on up to 100 hosts. We enumerate the requirements for scalable and available persistent storage, and evaluate four popular Erlang DBMSs against these requirements. This analysis shows that Mnesia and CouchDB are not suitable persistent storage at our target scale, but Dynamo-like NoSQL DataBase Management Systems (DBMSs) such as Cassandra and Riak potentially are. We investigate the current scalability limits of the Riak 1.1.1 NoSQL DBMS in practice on a 100-node cluster. We establish for the first time scientifically the scalability limit of Riak as 60 nodes on the Kalkyl cluster, thereby confirming developer folklore. We show that resources like memory, disk, and network do not limit the scalability of Riak. By instrumenting Erlang/OTP and Riak libraries we identify a specific Riak functionality that limits scalability. We outline how later releases of Riak are refactored to eliminate the scalability bottlenecks. We conclude that Dynamo-style NoSQL DBMSs provide scalable and available persistent storage for Erlang in general, and for our RELEASE target architecture in particular.","PeriodicalId":140676,"journal":{"name":"Erlang Workshop","volume":"36 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2013-09-28","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"122879501","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Erlang WorkshopPub Date : 2013-09-28DOI: 10.1145/2505305.2505307
Siyao Zheng, Xiang Long, Jingwei Yang
{"title":"Using many-core coprocessor to boost up Erlang VM","authors":"Siyao Zheng, Xiang Long, Jingwei Yang","doi":"10.1145/2505305.2505307","DOIUrl":"https://doi.org/10.1145/2505305.2505307","url":null,"abstract":"The trend in processor design is to build more cores on a single chip. Commercial many-core processor is emerging these years. Intel Xeon Phi coprocessor , which is equipped with at least 60 relatively slow cores, is the first commercial many-core product released by Intel. Xeon Phi coprocessor is encapsulated in a PCIe card and communicates with host operating system through a specialized interface library called SCIF. In this paper, we propose a solution that integrates the computing power of multi-core host machine and Xeon Phi many-core coprocessor. The solution is based on the distribution facilities of Erlang. This paper proposes a highly optimized distribution carrier driver based on SCIF. This driver can both exploit the advantage of SCIF to the full and shield the performance gap between host and coprocessor. User applications can make use of the extra computing resources provided by many-core coprocessor without even knowing the existence of it.","PeriodicalId":140676,"journal":{"name":"Erlang Workshop","volume":"24 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2013-09-28","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"115378478","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Erlang WorkshopPub Date : 2013-09-28DOI: 10.1145/2505305.2505314
Dániel Horpácsi
{"title":"Extending Erlang by utilising RefactorErl","authors":"Dániel Horpácsi","doi":"10.1145/2505305.2505314","DOIUrl":"https://doi.org/10.1145/2505305.2505314","url":null,"abstract":"In this paper, we present the idea of utilising a refactoring tool for implementing extensions to a programming language. We elaborate the correspondence between the main components of the compiler and the refactoring tool, and examine how analysis and transformation features of the tool can be exploited for turning its refactoring framework into a translation framework. The presented method allows one, for instance, to make the Erlang language supportive for embedding domain specific languages as well as to make its functions portable.","PeriodicalId":140676,"journal":{"name":"Erlang Workshop","volume":"70 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2013-09-28","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128384723","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Erlang WorkshopPub Date : 2013-09-28DOI: 10.1145/2505305.2505313
E. Francesquini, A. Goldman, J. Méhaut
{"title":"Actor scheduling for multicore hierarchical memory platforms","authors":"E. Francesquini, A. Goldman, J. Méhaut","doi":"10.1145/2505305.2505313","DOIUrl":"https://doi.org/10.1145/2505305.2505313","url":null,"abstract":"Erlang applications are present in several mission-critical systems. These systems demand substantial computing resources that are usually provided by multiprocessor and multi-core platforms. Hierarchical memory platforms, or Non-Uniform Memory Access (NUMA) architectures, account for an important share of these platforms. Yet, the research on the suitability of the current virtual machine (VM) for these platforms is quite limited. The current VM assumes a flat memory space, thus not performing as well as it could on these architectures. The NUMA environment presents challenges to the runtime environment in fields varying from memory management to scheduling and load-balancing. In this article we summarize some of the characteristics of an actor based application to, in light of the above, introduce some NUMA-aware improvements to the Erlang VM. This modified VM uses the NUMA characteristics and the application knowledge to take better memory management, scheduling and load-balancing decisions. We show that, when we consider the default Erlang VM as the baseline, the modified VM can achieve performance improvements up to a factor of 2.50 while limiting the slowdown on the worst case by a factor of 1.15.","PeriodicalId":140676,"journal":{"name":"Erlang Workshop","volume":"26 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2013-09-28","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"130535108","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Erlang WorkshopPub Date : 2013-09-28DOI: 10.1145/2505305.2505312
M. Piotrowski, Wojciech Turek
{"title":"Software agents mobility using process migration mechanism in distributed Erlang","authors":"M. Piotrowski, Wojciech Turek","doi":"10.1145/2505305.2505312","DOIUrl":"https://doi.org/10.1145/2505305.2505312","url":null,"abstract":"Basic features of Erlang technology are very similar to the theoretical assumptions of the software agent paradigm. This fact encourages development of Erlang-based software agent systems and platforms. One of the lacking features of the Erlang technology, which is required in agent systems, is the ability to migrate agents between nodes of the agent platform. The feature of moving working processes can also be useful for solving particular problems in Erlang-based systems. In this paper the novel Erlang process migration mechanism is proposed. It is fully transparent, and it provides code migration and messages forwarding. The solution has been used for implementing an agent migration mechanism in an Erlang-based software agent platform (eXAT). It has been intensively tested and compared in terms of durability and performance with the most popular Java based agent platform.","PeriodicalId":140676,"journal":{"name":"Erlang Workshop","volume":"21 3-4 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2013-09-28","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"114193673","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}