1 |
Performanceuntersuchungen von JVM–Implementierungen in containerisierten Umgebungen am Beispiel von PodmanWanck, Cedric 29 October 2024 (has links)
Die Bachelorarbeit konzentriert sich auf die Untersuchung der Leistung der Java Virtual Machi-
ne (JVM), insbesondere in containerisierten Umgebungen. Die Motivation für diese Arbeit sowie
die Zielsetzung und das methodische Vorgehen, einschlieSSlich der verwendeten Werkzeuge und
Methoden, werden in Kapitel 1 dargelegt.
Kapitel 2 erläutert die theoretischen Grundlagen, die für das Verständnis der Performanceun-
tersuchungen in dieser Arbeit erforderlich sind. Dazu gehört eine Einführung in die Performance
von Programmen und deren Messung, die Grundlagen von Containertechnologien sowie eine detail-
lierte Untersuchung der Struktur der Java Virtual Machine und der in dieser Arbeit verwendeten
JVM–Implementierungen. Zudem werden die eingesetzten Werkzeuge und Methoden sowie der
aktuelle Forschungsstand in diesem Bereich vorgestellt.
Das Experiment wird umfassend in Kapitel 3 beschrieben. Es wird ein detaillierter Einblick
in die Forschungs– und Entscheidungsprozesse gegeben, die zur Durchführung der Performan-
ceuntersuchungen führten, einschlieSSlich der Entwicklung und Prognosen der Benchmarks. Die
Implementierung der Anwendung, die Containerisierung der JVMs und die notwendigen Schritte
zur Ausführung und Messung der Benchmarks werden ebenfalls erläutert.
In Kapitel 4 werden die Messergebnisse der Container–ImagegröSSen und Startzeiten sowie
die Resultate der implementierten Benchmarks präsentiert. Die Daten werden analysiert und in
Bezug auf verschiedene Performanceaspekte interpretiert. Es wird versucht, die Vor– und Nach-
teile der unterschiedlichen JVM–Implementierungen darzustellen und Designentscheidungen zu
unterstützen.
AbschlieSSend werden die Ergebnisse der Arbeit in Kapitel 5 zusammengefasst. Es wird auf
die Gültigkeit der Ergebnisse unter bestimmten Bedingungen eingegangen und mögliche Grenzen
der Untersuchung aufgezeigt. AuSSerdem wird ein Ausblick auf potenzielle zukünftige Forschungs-
arbeiten gegeben.:Abbildungsverzeichnis III
Tabellenverzeichnis V
Listings VII
1 Einleitung 1
1.1 Motivation 1
1.2 Zielsetzung 1
1.3 Methodisches Vorgehen 2
2 Theoretische Grundlagen 3
2.1 Performance von Programmen 3
2.2 Container und Podman 5
2.3 JVM und ihre Struktur 6
2.3.1 Runtime Data Areas 6
2.3.2 Execution Engine 8
2.4 Unterschiede der JVM–Implementationen 9
2.4.1 HotSpot 9
2.4.2 GraalVM 10
2.4.3 Zulu 10
2.4.4 OpenJ9 10
2.5 Werkzeuge und Methoden 11
2.6 State of the Art 11
3 Experiment 13
3.1 Planung 13
3.1.1 Grundlegende Recherche 13
3.1.2 Entwurf der Benchmarks 14
3.1.3 Erwartungshaltung 15
3.2 Implementierung 15
3.3 Durchführung und Messung 21
4 Auswertung und Vergleich 23
5 Fazit 33
Literaturverzeichnis 35
A Quellcode und Ergebnisse der Benchmarks 39
A.1 Elektronischer Datenträger 39
A.2 Quellcode der Matrixmultiplikation 40
A.3 Ausschnitte des Quellcodes der GC–Benchmarks 41
A.4 Ausschnitte des Quellcodes des Quicksort–Benchmarks 42
|
2 |
Performanceuntersuchungen von JVM–Implementierungen in containerisierten Umgebungen am Beispiel von PodmanWanck, Cedric 06 November 2024 (has links)
Die Bachelorarbeit konzentriert sich auf die Untersuchung der Leistung der Java Virtual Machi-
ne (JVM), insbesondere in containerisierten Umgebungen. Die Motivation für diese Arbeit sowie
die Zielsetzung und das methodische Vorgehen, einschlieSSlich der verwendeten Werkzeuge und
Methoden, werden in Kapitel 1 dargelegt.
Kapitel 2 erläutert die theoretischen Grundlagen, die für das Verständnis der Performanceun-
tersuchungen in dieser Arbeit erforderlich sind. Dazu gehört eine Einführung in die Performance
von Programmen und deren Messung, die Grundlagen von Containertechnologien sowie eine detail-
lierte Untersuchung der Struktur der Java Virtual Machine und der in dieser Arbeit verwendeten
JVM–Implementierungen. Zudem werden die eingesetzten Werkzeuge und Methoden sowie der
aktuelle Forschungsstand in diesem Bereich vorgestellt.
Das Experiment wird umfassend in Kapitel 3 beschrieben. Es wird ein detaillierter Einblick
in die Forschungs– und Entscheidungsprozesse gegeben, die zur Durchführung der Performan-
ceuntersuchungen führten, einschlieSSlich der Entwicklung und Prognosen der Benchmarks. Die
Implementierung der Anwendung, die Containerisierung der JVMs und die notwendigen Schritte
zur Ausführung und Messung der Benchmarks werden ebenfalls erläutert.
In Kapitel 4 werden die Messergebnisse der Container–ImagegröSSen und Startzeiten sowie
die Resultate der implementierten Benchmarks präsentiert. Die Daten werden analysiert und in
Bezug auf verschiedene Performanceaspekte interpretiert. Es wird versucht, die Vor– und Nach-
teile der unterschiedlichen JVM–Implementierungen darzustellen und Designentscheidungen zu
unterstützen.
AbschlieSSend werden die Ergebnisse der Arbeit in Kapitel 5 zusammengefasst. Es wird auf
die Gültigkeit der Ergebnisse unter bestimmten Bedingungen eingegangen und mögliche Grenzen
der Untersuchung aufgezeigt. AuSSerdem wird ein Ausblick auf potenzielle zukünftige Forschungs-
arbeiten gegeben.:Abbildungsverzeichnis III
Tabellenverzeichnis V
Listings VII
1 Einleitung 1
1.1 Motivation 1
1.2 Zielsetzung 1
1.3 Methodisches Vorgehen 2
2 Theoretische Grundlagen 3
2.1 Performance von Programmen 3
2.2 Container und Podman 5
2.3 JVM und ihre Struktur 6
2.3.1 Runtime Data Areas 6
2.3.2 Execution Engine 8
2.4 Unterschiede der JVM–Implementationen 9
2.4.1 HotSpot 9
2.4.2 GraalVM 10
2.4.3 Zulu 10
2.4.4 OpenJ9 10
2.5 Werkzeuge und Methoden 11
2.6 State of the Art 11
3 Experiment 13
3.1 Planung 13
3.1.1 Grundlegende Recherche 13
3.1.2 Entwurf der Benchmarks 14
3.1.3 Erwartungshaltung 15
3.2 Implementierung 15
3.3 Durchführung und Messung 21
4 Auswertung und Vergleich 23
5 Fazit 33
Literaturverzeichnis 35
A Quellcode und Ergebnisse der Benchmarks 39
A.1 Elektronischer Datenträger 39
A.2 Quellcode der Matrixmultiplikation 40
A.3 Ausschnitte des Quellcodes der GC–Benchmarks 41
A.4 Ausschnitte des Quellcodes des Quicksort–Benchmarks 42
|
3 |
JavaFlow : a Java DataFlow MachineAscott, Robert John 10 February 2015 (has links)
The JavaFlow, a Java DataFlow Machine is a machine design concept implementing a Java Virtual Machine aimed at addressing technology roadmap issues along with the ability to effectively utilize and manage very large numbers of processing cores. Specific design challenges addressed include: design complexity through a common set of repeatable structures; low power by featuring unused circuits and ability to power off sections of the chip; clock propagation and wire limits by using locality to bring data to processing elements and a Globally Asynchronous Locally Synchronous (GALS) design; and reliability by allowing portions of the design to be bypassed in case of failures. A Data Flow Architecture is used with multiple heterogeneous networks to connect processing elements capable of executing a single Java ByteCode instruction. Whole methods are cached in this DataFlow fabric, and the networks plus distributed intelligence are used for their management and execution. A mesh network is used for the DataFlow transfers; two ordered networks are used for management and control flow mapping; and multiple high speed rings are used to access the storage subsystem and a controlling General Purpose Processor (GPP). Analysis of benchmarks demonstrates the potential for this design concept. The design process was initiated by analyzing SPEC JVM benchmarks which identified a small number methods contributing to a significant percentage of the overall ByteCode operations. Additional analysis established static instruction mixes to prioritize the types of processing elements used in the DataFlow Fabric. The overall objective of the machine is to provide multi-threading performance for Java Methods deployed to this DataFlow fabric. With advances in technology it is envisioned that from 1,000 to 10,000 cores/instructions could be deployed and managed using this structure. This size of DataFlow fabric would allow all the key methods from the SPEC benchmarks to be resident. A baseline configuration is defined with a compressed dataflow structure and then compared to multiple configurations of instruction assignments and clock relationships. Using a series of methods from the SPEC benchmark running independently, IPC (Instructions per Cycle) performance of the sparsely populated heterogeneous structure is 40% of the baseline. The average ratio of instructions to required nodes is 3.5. Innovative solutions to the loading and management of Java methods along with the translation from control flow to DataFlow structure are demonstrated. / text
|
4 |
Optimisation de code pour application Java haute-performance / Code optimization for high-performance Java applicationHalli, Abderrahmane Nassim 24 October 2016 (has links)
Java est à ce jour l'un des langages, si ce n'est le langage, le plus utilisé toutes catégories de programmation confondues et sa popularité concernant le développement d'applications scientifiques n'est plus à démontrer. Néanmoins son utilisation dans le domaine du Calcul Haute Performance (HPC) reste marginale même si elle s'inscrit au cœur de la stratégie de certaine entreprise comme Aselta Nanographics, éditeur de l'application Inscale pour la modélisation des processus de lithographie par faisceaux d'électron, instigateur et partenaire industriel de cette thèse.Et pour cause, sa définition haut-niveau et machine-indépendante, reposant sur un environnement d'exécution, parait peu compatible avec le besoin de contrôle bas-niveau nécessaire pour exploiter de manière optimale des architectures de microprocesseurs de plus en plus complexes comme les architectures Intel64 (implémentation Intel de l'architecture x86-64).Cette responsabilité est entièrement déléguée à l'environnement d'exécution, notamment par le biais de la compilation dynamique, chargée de générer du code binaire applicatif à la volée. C'est le cas de la JVM HotSpot, au centre de cette étude, qui s'est imposée comme l'environnement de référence pour l'exécution d'applications Java en production.Cette thèse propose, dans ce contexte, de répondre à la problématique suivante : comment optimiser les performances de code séquentiel Java plus particulièrement dans un environnement HotSpot/Intel64 ?Pour tenter d'y répondre, trois axes principaux ont été explorés. Le premier axe est l'analyse des performances du polymorphisme, mécanisme Java haut-niveau omniprésent dans les applications, dans le lequel on tente de mesurer l'impact du polymorphisme sur les performances du code et d'évaluer des alternatives possibles. Le second axe est l'intégration de code natif au sein des applications - afin de bénéficier d'optimisations natives - avec prise en compte du compromis coût d'intégration/qualité du code. Enfin le troisième axe est l'extension du compilateur dynamique pour des méthodes applicatives afin, là encore, de bénéficier d'optimisations natives tout en s'affranchissant du surcout inhérent à l'intégration de code natif.Ces trois axes couvrent différentes pistes exploitables dans un contexte de production qui doit intégrer certaines contraintes comme le temps de développement ou encore la maintenabilité du code. Ces pistes ont permis d'obtenir des gains de performances significatifs sur des sections de code applicatif qui demeuraient jusqu'alors très critiques. / L'auteur n'a pas fourni de résumé en anglais
|
5 |
Compiler for an Embedded Extension Language on AndroidRasmus, Svensson January 2012 (has links)
Bytecode interpreters are a common implementation strategy for scripting languages. Source code is translated to bytecode to improve time and memory performance. The Android platform includes the Dalvik virtual machine, which typically executes bytecode compiled from Java source code. This thesis describes how this virtual machine can be reused to execute bytecode compiled from a scripting language. A compiler is written for a test bed scripting language and the time and memory performance is evaluated. The Dalvik virtual machine, designed for a statically typed object-oriented language, was flexible enough to successfully host a dynamically typed scripting language that allows for objects to be transported cheaply between scripts and Java code. The compiled code executes one to two orders of magnitude faster than with a naive interpreting implemetation. Numeric performance is lacking in general, though simpler cases are optimized.
|
6 |
Správa přepínání procesů v aplikaci Jenkins / Suspending Jenkins Job Execution in Favor of High-Priority JobsOndrušek, Libor January 2012 (has links)
The project deals with design and solution of plug-in for a Jenkins server, which allows management of jobs running on the nodes in the cluster of continuous integration system servers. This plug-in should allow pause the long time job, done process with higher priority and restore original job in state where it was interrupted.
|
7 |
Evaluation of GraalVM Performance for Java ProgramsLarsson, Robin January 2020 (has links)
GraalVM is a new Java Development Kit developed by Oracle that promises improved performance when running Java programs. In this paper we compare the performance of both the community edition and the enterprise edition of GraalVM to OpenJDK and OracleJDK, using both Java 8 and Java 11. We use the DaCapo benchmark suite to test these JDKs. The results are analysed using statistically rigorous methodology. We find that the performance of the different JDKs vary significantly depending on the benchmark, making it difficult to draw any definitive conclusions.In the end we can see that GraalVM Enterprise Edition using Java 8 will outperform the other JDKs tested in the majority of cases.
|
8 |
CONSIDERATIONS ON PORTING PERL TO THE JAVA VIRTUAL MACHINEKUHN, BRADLEY M. 11 October 2001 (has links)
No description available.
|
9 |
Mobilité et persistance des applications dans l'environnement JavaBouchenak, Sara 19 October 2001 (has links) (PDF)
Les travaux de cette thèse portent sur la mobilité et la persistance des applications dans des environnements hétérogènes. Ces fonctions sont utiles à la répartition dynamique de charge dans les systèmes distribués, à la reconfiguration dynamique d'applications réparties ou à la mise en place de techniques de tolérance aux pannes. La mobilité et la persistance des applications ont largement été abordées au niveau du système d'exploitation ou au niveau du langage/modèle de programmation. Mais très peu de travaux ont été menés au niveau des machines virtuelles. L'objet de cette thèse est l'étude et la réalisation de fonctions de mobilité et de persistance dans la machine virtuelle Java. L'environnement Java fournit des outils pour la mobilité et la persistance du code et des données mais il n'adresse pas le problème de mobilité ni de persistance de l'état d'exécution des processus légers (threads). Les travaux de cette thèse portent sur la conception de tels services, une conception guidée par deux principes : la portabilité sur des environnements hétérogènes et le respect des performances des applications. Pour des besoins de performances, plusieurs efforts ont été faits par les concepteurs de Java en matière d'optimisation de l'exécution et de compilation à la volée. Notre solution permet de fournir des fonctions de mobilité et de persistance portables même en présence de compilation à la volée. Ceci est mis en oeuvre en reposant, d'une part, sur des techniques d'inférence dynamique du type des données sur la pile d'exécution à partir du code Java exécuté et, d'autre part, sur des techniques de dés-optimisation dynamique du code Java compilé à la volée. Nos services ont été réalisés via une extension de la machine virtuelle Java de Sun Microsystems. Ils sont opérationnels et ont pu être validés pour des besoins de tolérance aux pannes dans une plate-forme de metacomputing. Notre solution est actuellement l'unique approche qui est complète et qui élimine toute pénalité sur l'exécution des applications.
|
10 |
The SHAP Microarchitecture and Java Virtual MachinePreußer, Thomas B., Zabel, Martin, Reichel, Peter 14 November 2012 (has links) (PDF)
This report presents the SHAP platform consisting of its microarchitecture and its implementation of the Java Virtual Machine (JVM). Like quite a few other embedded implementations of the Java platform, the SHAP microarchitecture relies on an instruction set architecture based on Java bytecode. Unlike them, it, however, features a design with well-encapsulated components autonomously managing their duties on rather high abstraction levels. Thus, permanent runtime duties are transferred from the central computing core to concurrently working components so that it can actually spent a larger fraction of time executing application code. The degree of parallelity between the application and the runtime implementation is increased. Currently, the stack and heap management including the automatic garbage collection are implemented this way. After detailing the design of the microarchitecture, the SHAP implementation of the Java Virtual Machine is described. A major focus is laid on the presentation of the layout and the use of the runtime data structures representing the various language abstractions provided by Java. Also, the boot sequence starting the JVM is described.
|
Page generated in 0.0494 seconds