40 research outputs found

    A detailed VM profiler for the Cog VM

    Get PDF
    International audienceCode profiling enables a user to know where in an application or function the execution time is spent. The Pharo ecosystem offers several code profilers. However, most of the publicly available profilers (MessageTally, Spy, GadgetPro-filer) largely ignore the activity carried out by the virtual machine , thus incurring inaccuracy in the gathered information and missing important information, such as the Just-in-time compiler activity. This paper describes the motivations and the latest improvements carried out in VMProfiler, a code execution pro-filer hooked into the virtual machine, that performs its analysis by monitoring the virtual machine execution. These improvements address some limitations related to assessing the activity of native functions (resulting from a Just-in-time compiler operation): as of now, VMProfiler provides more detailed profiling reports, showing for native code functions in which bytecode range the execution time is spent

    Deep into Pharo

    Get PDF
    International audienceThis is a book on Pharo a programming language available at http://www.pharo.or

    Bridging the Gap between Machine and Language using First-Class Building Blocks

    Get PDF
    High-performance virtual machines (VMs) are increasingly reused for programming languages for which they were not initially designed. Unfortunately, VMs are usually tailored to specific languages, offer only a very limited interface to running applications, and are closed to extensions. As a consequence, extensions required to support new languages often entail the construction of custom VMs, thus impacting reuse, compatibility and performance. Short of building a custom VM, the language designer has to choose between the expressiveness and the performance of the language. In this dissertation we argue that the best way to open the VM is to eliminate it. We present Pinocchio, a natively compiled Smalltalk, in which we identify and reify three basic building blocks for object-oriented languages. First we define a protocol for message passing similar to calling conventions, independent of the actual message lookup mechanism. The lookup is provided by a self-supporting runtime library written in Smalltalk and compiled to native code. Since it unifies the meta- and base-level we obtain a metaobject protocol (MOP). Then we decouple the language-level manipulation of state from the machine-level implementation by extending the structural reflective model of the language with object layouts, layout scopes and slots. Finally we reify behavior using AST nodes and first-class interpreters separate from the low-level language implementation. We describe the implementations of all three first-class building blocks. For each of the blocks we provide a series of examples illustrating how they enable typical extensions to the runtime, and we provide benchmarks validating the practicality of the approaches

    Bridging the Gap between Machine and Language using First-Class Building Blocks

    Get PDF
    High-performance virtual machines (VMs) are increasingly reused for programming languages for which they were not initially designed. Unfortunately, VMs are usually tailored to specific languages, offer only a very limited interface to running applications, and are closed to extensions. As a consequence, extensions required to support new languages often entail the construction of custom VMs, thus impacting reuse, compatibility and performance. Short of building a custom VM, the language designer has to choose between the expressiveness and the performance of the language. In this dissertation we argue that the best way to open the VM is to eliminate it. We present Pinocchio, a natively compiled Smalltalk, in which we identify and reify three basic building blocks for object-oriented languages. First we define a protocol for message passing similar to calling conventions, independent of the actual message lookup mechanism. The lookup is provided by a self-supporting runtime library written in Smalltalk and compiled to native code. Since it unifies the meta- and base-level we obtain a metaobject protocol (MOP). Then we decouple the language-level manipulation of state from the machine-level implementation by extending the structural reflective model of the language with object layouts, layout scopes and slots. Finally we reify behavior using AST nodes and first-class interpreters separate from the low-level language implementation. We describe the implementations of all three first-class building blocks. For each of the blocks we provide a series of examples illustrating how they enable typical extensions to the runtime, and we provide benchmarks validating the practicality of the approaches

    Deep into Pharo

    Get PDF
    International audienceThis is a book on Pharo a programming language available at http://www.pharo.or

    Reification as the key to augmenting software development: an object is worth a thousand words

    Get PDF
    Software development has become more and more pervasive, with influence in almost every human activity. To be able to fit in so many different scenarios and constantly implement new features, software developers adopted methodologies with tight development cycles, sometimes with more than one release per day. With the constant growth of modern software projects and the consequent expansion of development teams, understanding all the components of a system becomes a task too big to handle. In this context understanding the cause of an error or identifying its source is not an easy task, and correcting the erroneous behavior can lead to unexpected downtime of vital services. Being able to keep track of software defects, usually referred to as bugs, is crucial in the development of a project and in containing maintenance costs. For this purpose, the correctness and completeness of the information available has a great impact on the time required to understand and solve a problem. In this thesis we present an overview of the current techniques commonly used to report software defects. We show why we believe that the state of the art needs to be improved, and present a set of approaches and tools to collect data from software failures, model it, and turn it into actionable knowledge. Our goal is to show that data generated from errors can have a great impact on daily software development, and how it can be employed to augment the development environment to assist software engineers to build and maintain software systems

    Supporting Concurrency Abstractions in High-level Language Virtual Machines

    Get PDF
    During the past decade, software developers widely adopted JVM and CLI as multi-language virtual machines (VMs). At the same time, the multicore revolution burdened developers with increasing complexity. Language implementers devised a wide range of concurrent and parallel programming concepts to address this complexity but struggle to build these concepts on top of common multi-language VMs. Missing support in these VMs leads to tradeoffs between implementation simplicity, correctly implemented language semantics, and performance guarantees. Departing from the traditional distinction between concurrency and parallelism, this dissertation finds that parallel programming concepts benefit from performance-related VM support, while concurrent programming concepts benefit from VM support that guarantees correct semantics in the presence of reflection, mutable state, and interaction with other languages and libraries. Focusing on these concurrent programming concepts, this dissertation finds that a VM needs to provide mechanisms for managed state, managed execution, ownership, and controlled enforcement. Based on these requirements, this dissertation proposes an ownership-based metaobject protocol (OMOP) to build novel multi-language VMs with proper concurrent programming support. This dissertation demonstrates the OMOP's benefits by building concurrent programming concepts such as agents, software transactional memory, actors, active objects, and communicating sequential processes on top of the OMOP. The performance evaluation shows that OMOP-based implementations of concurrent programming concepts can reach performance on par with that of their conventionally implemented counterparts if the OMOP is supported by the VM. To conclude, the OMOP proposed in this dissertation provides a unifying and minimal substrate to support concurrent programming on top of multi-language VMs. The OMOP enables language implementers to correctly implement language semantics, while simultaneously enabling VMs to provide efficient implementations

    Predicting unstable software benchmarks using static source code features

    Full text link
    Software benchmarks are only as good as the performance measurements they yield. Unstable benchmarks show high variability among repeated measurements, which causes uncertainty about the actual performance and complicates reliable change assessment. However, if a benchmark is stable or unstable only becomes evident after it has been executed and its results are available. In this paper, we introduce a machine-learning-based approach to predict a benchmarkโ€™s stability without having to execute it. Our approach relies on 58 statically-computed source code features, extracted for benchmark code and code called by a benchmark, related to (1) meta information, e.g., lines of code (LOC), (2) programming language elements, e.g., conditionals or loops, and (3) potentially performance-impacting standard library calls, e.g., file and network input/output (I/O). To assess our approachโ€™s effectiveness, we perform a large-scale experiment on 4,461 Go benchmarks coming from 230 open-source software (OSS) projects. First, we assess the prediction performance of our machine learning models using 11 binary classification algorithms. We find that Random Forest performs best with good prediction performance from 0.79 to 0.90, and 0.43 to 0.68, in terms of AUC and MCC, respectively. Second, we perform feature importance analyses for individual features and feature categories. We find that 7 features related to meta-information, slice usage, nested loops, and synchronization application programming interfaces (APIs) are individually important for good predictions; and that the combination of all features of the called source code is paramount for our model, while the combination of features of the benchmark itself is less important. Our results show that although benchmark stability is affected by more than just the source code, we can effectively utilize machine learning models to predict whether a benchmark will be stable or not ahead of execution. This enables spending precious testing time on reliable benchmarks, supporting developers to identify unstable benchmarks during development, allowing unstable benchmarks to be repeated more often, estimating stability in scenarios where repeated benchmark execution is infeasible or impossible, and warning developers if new benchmarks or existing benchmarks executed in new environments will be unstable

    ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋Ÿฐํƒ€์ž„์—์„œ์˜ ์‘์šฉํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ๊ฐ€์†์„ ์œ„ํ•œ ์ตœ์ ํ™”

    Get PDF
    ํ•™์œ„๋…ผ๋ฌธ (๋ฐ•์‚ฌ)-- ์„œ์šธ๋Œ€ํ•™๊ต ๋Œ€ํ•™์› : ์ „๊ธฐยท์ปดํ“จํ„ฐ๊ณตํ•™๋ถ€, 2015. 8. ๋ฌธ์ˆ˜๋ฌต.์ž๋ฐ”๋‚˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์€ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์˜ ์ด์‹์„ฑ์„ ์žฅ์ ์œผ๋กœ ํ•˜์—ฌ ์ž„๋ฒ ๋””๋“œ ์†Œํ”„ํŠธ์›จ์–ด ํ”Œ๋žซํผ์œผ๋กœ์จ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค. ์ž๋ฐ” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์€ ๋ฐ”์ดํŠธ์ฝ”๋“œ์˜ ํ˜•ํƒœ๋กœ ๋ฐฐํฌ๋˜์–ด ๋””์ง€ํ„ธ ํ…”๋ ˆ๋น„์ „์ด๋‚˜ ์•ˆ๋“œ๋กœ์ด๋“œ ํ”Œ๋žซํผ์—์„œ ๋™์ž‘ํ•˜๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์†Œ์Šค ์ฝ”๋“œ ํ˜•ํƒœ๋กœ ์›น ํ”Œ๋žซํผ์—์„œ ์ˆ˜ํ–‰๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋Ÿฐํƒ€์ž„์— ์˜ํ•œ ์ด์‹์„ฑ์€ ๋ณธ์งˆ์ ์œผ๋กœ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ํ•˜๋“œ์›จ์–ด๊ฐ€ ์•„๋‹Œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ ๊ฐ™์€ ์†Œํ”„ํŠธ์›จ์–ด์— ์˜ํ•ด ์‘์šฉํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋‚˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์–ป๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ ์ค‘ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋‚˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ์ ์‹œ ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ inline caching๊ณผ ๊ฐ™์ด ๋ฐ˜๋ณต ์ˆ˜ํ–‰๋˜๋Š” ๋™์ž‘์— ํŠนํ™”๋œ ์ตœ์ ํ™”๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋Ÿฐํƒ€์ž„์— ์ ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ํ•œํŽธ, ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ์—์„œ ๋™์ž‘ํ•˜๋Š” ์ž๋ฐ” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ์›นํŽ˜์ด์ง€์˜ ๋กœ๋”ฉ ์ค‘ ์ˆ˜ํ–‰๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์•ˆ์ •๋œ ์ƒํƒœ์—์„œ์˜ ๋™์ž‘๋ณด๋‹ค๋Š” ๊ธ‰๊ฒฉํ•œ ๋ณ€ํ™”๋ฅผ ์ˆ˜๋ฐ˜ํ•˜๋Š” ์‹œ์ž‘ ๊ณผ์ •์˜ ํ–‰ํƒœ๊ฐ€ ๋” ๋‘๋“œ๋Ÿฌ์ง„๋‹ค. ๋”ฐ๋ผ์„œ ๋น„๊ต์  ์งง์€ ์ˆ˜ํ–‰์‹œ๊ฐ„์„ ๊ฐ€์ง€๊ณ , ๋™์ผํ•œ ๋™์ž‘์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒฝํ–ฅ์ด ๋‚ฎ์œผ๋ฉฐ, ์ˆ˜ํ–‰์‹œ๊ฐ„์—์„œ์˜ ๋น„์ค‘์ด ๋†’์€ ํ•ซ์ŠคํŒŸ์ด ๋“œ๋ฌธ ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ซ์ŠคํŒŸ์— ํšจ๊ณผ์ ์ธ ์ ์‹œ ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ ๋ฐ˜๋ณต๋˜๋Š” ๋™์ž‘์— ํŠนํ™”๋œ ์ตœ์ ํ™”๋Š” ์ด์™€ ๊ฐ™์€ ์‘์šฉํ”„๋กœ๊ทธ๋žจ ์‹œ๋™์˜ ํ–‰ํƒœ์— ๋Œ€ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ์ด ๋…ผ๋ฌธ์„ ํ†ตํ•˜์—ฌ ๊ธฐ์กด์˜ ๋ฐฉ์‹ ๋ณด๋‹ค ์ •๊ตํ•˜๊ฒŒ ์ถ”์ •ํ•œ ์ˆ˜ํ–‰์‹œ๊ฐ„์„ ๊ทผ๊ฑฐ๋กœ ์ž‘๋™ํ•˜๋Š” ํ•ซ์ŠคํŒŸ ๊ฐ์ง€ ๊ธฐ๋ฒ•์„ ์ œ์•ˆํ•จ์œผ๋กœ์จ ํ•ซ์ŠคํŒŸ์ด ๋ถˆ๋ถ„๋ช…ํ•œ ์ƒํ™ฉ์—์„œ ์ž๋ฐ” ์ ์‹œ ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•œ ์ˆ˜ํ–‰ ์†๋„์˜ ํ–ฅ์ƒ์„ ๊พ€ํ•˜์—ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์‘์šฉํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘์˜ ํ–‰ํƒœ๋ฅผ ๋ณด์ด๋Š” ๋ฒค์น˜๋งˆํฌ ํ”„๋กœ๊ทธ๋žจ์˜ ์ฒซ๋ฒˆ์งธ ์ˆ˜ํ–‰์‹œ๊ฐ„์„ ๊ธฐ์กด์˜ HotSpot ์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹ ์˜ ํ•ซ์ŠคํŒŸ ๊ฐ์ง€ ๊ธฐ๋ฒ• ๋Œ€๋น„ ์•ฝ 10% ๊ฐ€์†ํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์œผ๋กœ์„œ ๋””์ง€ํ„ธ ๋ฐฉ์†ก์— ์˜ํ•ด ๋ฐฐํฌ๋œ Xlet์˜ ์‹œ์ž‘์— ๊ฑธ๋ฆฌ๋Š” ์ˆ˜ํ–‰์‹œ๊ฐ„ ์—ญ์‹œ ์•ฝ 7%๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ๋‹ค. ๋˜ํ•œ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ ์‹œ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์ƒ์„ฑ๋˜๋Š” ๊ธฐ๊ณ„์–ด์˜ ์šฉ๋Ÿ‰์„ ์ค„์ด๊ธฐ ์œ„ํ•˜์—ฌ ์ถ•์†Œ๋œ ๋ช…๋ น์–ด ์ง‘ํ•ฉ์— ์ตœ์ ํ™”๋œ ๊ธฐ๊ณ„์–ด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋ฒ•์„ ์ œ์•ˆํ•˜์˜€๋‹ค. ์ด๋ฅผ ํ†ตํ•˜์—ฌ ์•ฝ 29%์— ํ•ด๋‹นํ•˜๋Š” ๊ธฐ๊ณ„์–ด์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๊ณ , ์ด ๊ฒฐ๊ณผ๋Š” ์›นํŽ˜์ด์ง€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์‹œ์ž‘ ๊ณผ์ •์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ๋Œ€๋Ÿ‰์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋”์šฑ ํšจ๊ณผ์ ์ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ ์‹œ ์ปดํŒŒ์ผ๋Ÿฌ๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ์›นํŽ˜์ด์ง€ ์ž๋ฐ”์Šคํฌ๋ฆผํŠธ ์‹œ์ž‘ ์†๋„์˜ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋‚˜ํƒ€๋‚จ์„ ๋ฐœ๊ฒฌํ•˜์˜€๊ณ , ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์ˆ˜ํ–‰์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ ํƒ์  ์ปดํŒŒ์ผ์„ ์‹œ๋„ํ•จ์œผ๋กœ์จ ์ ์‹œ ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ตœ์†Œํ™” ํ•˜์˜€๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์›นํŽ˜์ด์ง€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹œ์ž‘์˜ ์ˆ˜ํ–‰ ํ–‰ํƒœ์— ๋Œ€ํ•˜์—ฌ ๋ถ„์„์„ ์‹ค์‹œํ•œ ๊ฒฐ๊ณผ, ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ๊ฐ€์†ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ˆ˜์ค€์˜ ์ตœ์ ํ™”๋ฅผ ์ œ์•ˆํ•œ๋‹ค. ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์ˆ˜ํ–‰์— ์ ์‹œ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ถ”๊ฐ€๋กœ ์ ์šฉํ•˜์—ฌ๋„ ์›นํŽ˜์ด์ง€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹œ์ž‘์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์€ ์—†์—ˆ๋˜ ๋ฐ˜๋ฉด, ์ œ์•ˆํ•œ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ˆ˜์ค€์˜ ์ตœ์ ํ™”๋Š” ์ˆ˜ํ–‰์‹œ๊ฐ„์„ ์•ฝ 3% ๊ฐ€์†ํ™”ํ•จ์œผ๋กœ์จ ์›นํŽ˜์ด์ง€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹œ์ž‘์— ๋” ํšจ๊ณผ์ ์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.Chapter 1. Introduction 1 1.1 Hot Spot Detection 1 1.2 Memory Consumption of JIT Compiled Code 4 1.3 Web Page JavaScript Performance with JITC 5 Chapter 2. Enhanced Hot Spot Detection 8 2.1 Previous Approaches to Hot Spot Detection 8 2.1.1 Simple Heuristic 8 2.1.2 Hot Heuristic 9 2.1.3 Static Analysis Heuristic 10 2.2 Flow-Sensitive Runtime Estimation 11 2.3 Static-FSRE for First-Invocation Compilation 15 2.4 Merged Heuristic of Dynamic and Static FSRE 18 2.4.1 Threshold of FSRE 18 2.4.2 Merged Heuristic 19 2.5 Experimental Results 19 2.5.1 Benchmark Results 19 2.5.1.1 Experimental Environment 19 2.5.1.2 Evaluation Heuristics 20 2.1.1.3 Performance of the Five Heuristics 21 2.1.1.4 Preciseness of Hot Spot Detection 23 2.1.1.5 Hot Spot Detection Time 28 2.1.1.6 Hot Spot Detection Overhead 29 2.5.2 Digital TV Java Xlet Results 31 2.5.2.1 DTV Environment and Java Xlet application 31 2.5.2.2 Heuristic Adjustments 33 2.5.2.3 Performance Improvement and Comparison 33 Chapter 3. Code Size Optimization for JITC 40 3.1 JavaScript JITC in SFX and Thumb2 40 3.1.1 JavaScript and Execution Semantics 40 3.1.2 SquirrelFish Extreme and the Bytecode 41 3.1.3 SFX JITC Architecture 43 3.1.4 JITC Code Generation for Thumb2 45 3.2 SFX JITC Optimizations for Thumb2 45 3.2.1 Code Generation with Register Re-map 45 3.2.2 Constant Pool Aggregation 46 3.2.3 Patching PC-relative Branches 49 3.3 Experimental Result 52 3.3.1 Experimental Environment 52 3.3.2 Code Size Result 52 3.3.3 Performance Result 55 Chapter 4. Selective JITC for Web Page JavaScript 56 4.1 JavaScript and SFX JITC 56 4.1.1 JavaScript and Interaction with DOM 56 4.1.2 SFX JITC and Its Architecture 59 4.1.3 Benchmark JavaScript and Web Page JavaScript 62 4.2 Selective JITC for the SFX 64 4.2.1 Selective JITC 64 4.2.2 Selective JITC Implementation for the SFX 65 4.3 Experimental Result 66 4.3.1 Experiment Environment 66 4.3.2 Web Page JavaScript and SunSpider Benchmark 66 4.3.3 Web page JavaScript Execution Time 71 4.3.4 Comparison to Benchmark Execution Time 73 4.3.5 Evaluation of the Selective JITC Heuristic 74 4.3.6 Discussions 76 Chapter 5. Bytecode Level Optimizations 78 5.1 Analysis on Web Page JavaScript Execution 78 5.2 Overhead in Property Accesses 82 5.3 Super-Bytecode Construction (SBC) 85 5.4 Bytecode Chaining (BC) 86 5.5 Experimental Evaluation 87 5.5.1 Performance Result 88 5.5.2 Performance Analysis 89 5.5.2.1 Optimized Runtime Services with SBC 89 5.5.2.2 Removed Runtime Services with BC 90 Chapter 6. Related Work 92 Chapter 7. Conclusion 94 Bibliography 97 Abstract 103Docto

    Modeling User-Affected Software Properties for Open Source Software Supply Chains

    Get PDF
    Background: Open Source Software development community relies heavily on users of the software and contributors outside of the core developers to produce top-quality software and provide long-term support. However, the relationship between a software and its contributors in terms of exactly how they are related through dependencies and how the users of a software affect many of its properties are not very well understood. Aim: My research covers a number of aspects related to answering the overarching question of modeling the software properties affected by users and the supply chain structure of software ecosystems, viz. 1) Understanding how software usage affect its perceived quality; 2) Estimating the effects of indirect usage (e.g. dependent packages) on software popularity; 3) Investigating the patch submission and issue creation patterns of external contributors; 4) Examining how the patch acceptance probability is related to the contributors\u27 characteristics. 5) A related topic, the identification of bots that commit code, aimed at improving the accuracy of these and other similar studies was also investigated. Methodology: Most of the Research Questions are addressed by studying the NPM ecosystem, with data from various sources like the World of Code, GHTorrent, and the GiHub API. Different supervised and unsupervised machine learning models, including Regression, Random Forest, Bayesian Networks, and clustering, were used to answer appropriate questions. Results: 1) Software usage affects its perceived quality even after accounting for code complexity measures. 2) The number of dependents and dependencies of a software were observed to be able to predict the change in its popularity with good accuracy. 3) Users interact (contribute issues or patches) primarily with their direct dependencies, and rarely with transitive dependencies. 4) A user\u27s earlier interaction with the repository to which they are contributing a patch, and their familiarity with related topics were important predictors impacting the chance of a pull request getting accepted. 5) Developed BIMAN, a systematic methodology for identifying bots. Conclusion: Different aspects of how users and their characteristics affect different software properties were analyzed, which should lead to a better understanding of the complex interaction between software developers and users/ contributors
    corecore