Practical Dynamic Software Updating

This project makes the case that applications could be updated when they run, with minimal programmer effort, while providing particular update safety guarantees, and without impacting a substantial performance cost. Few systems are made with on-the-fly updating in mind. Those systems that enable it support just a very minimal class of updates, and usually provide no guarantees that following the update, the computer will behave as intended. We tackle the on-the-fly updating problem utilizing a compiler-based approach called Dynamic Software Updating (DSU), where a program is patched with new code and data while it runs. The difficulty is in making DSU practical: it should support changes to programs as they appear in practice, yet be safe, simple to use, and not impose a sizable overhead. This dissertation makes both theoretical contributions—formalisms for reasoning about, and ensuring update safety—and practical contributions—Ginseng, a DSU implementation for…

Contents: Practical Dynamic Software Updating

1 Overview
1.1 Motivation
1.2 Ginseng
1.2.1 Ginseng Compiler
1.2.2 Patch Generator
1.2.3 Runtime System and Update Points
1.2.4 Version Consistency
1.3 Evaluation
1.4 Contributions
2 Software Evolution
2.1 Introduction
2.2 Approach
2.2.1 AST Matching
2.2.2 Change Detection and Reporting
2.2.3 Implementation
2.3 Implications for Dynamic Software Updating
2.4 Conclusion
3 Single-threaded Implementation and Evaluation
3.1 Introduction
3.2 Enabling On-line Updates
3.2.1 Function Indirection
3.2.2 Type Wrapping
3.2.3 Example
3.2.4 Loops
3.3 Safety Analysis
3.3.1 Tracking Changes to Types
3.3.2 Abstraction-Violating Aliases
3.3.3 Unsafe Casts and Polymorphism
3.3.4 Ginseng’s Type Safety vs Activeness Check
3.3.5 Choosing Update Points
3.4 Dynamic Patches
3.5 Experience
3.5.1 Applications
3.5.2 Changes To Original Source Code
3.5.3 Dynamic Updating Catalysts
3.5.4 Summary
3.6 Performance
3.6.1 Application Performance
3.6.2 Memory Footprint
3.6.3 Service Disruption
3.6.4 Compilation
3.7 Acknowledgments
3.8 Conclusion
4 Multi-threaded Implementation and Evaluation
4.1 Introduction
4.2 Induced Update Points
4.2.1 Barrier Approach
4.2.2 Relaxed Approach
4.2.3 Discussion
4.3 Implementation
4.3.1 Replacing Active Code
4.3.2 Concurrency Issues
4.4 Experience
4.4.1 Icecast
4.4.2 Memcached
4.4.3 Space Tyrant
4.4.4 Source Code Changes
4.5 Experiments
4.5.1 Update Availability
4.5.2 Application Performance
4.5.3 Memory Footprint
4.5.4 Compilation Time
4.6 Conclusion
5 Version Consistency
5.1 Introduction
5.2 Contextual effects
5.2.1 Syntax
5.2.2 Typing
5.2.3 Semantics and Soundness
5.2.4 Contextual Effect Inference
5.3 Single-threaded Transactional Version Consistency
5.3.1 Syntax
5.3.2 Typing
5.3.3 Operational Semantics
5.3.4 Soundness
5.3.5 Implementing Version Consistency for C Programs
5.3.6 Experiments
5.4 Relaxed Updates
5.4.1 Syntax
5.4.2 Typing
5.4.3 Operational Semantics
5.4.4 Soundness
5.5 Multi-threaded Version Consistency
5.5.1 Syntax
5.5.2 Typing
5.5.3 Operational semantics
5.5.4 Soundness
5.6 Conclusion
6 Related Work
6.1 Dynamic Software Updating
6.1.1 Update Support
6.1.2 Correctness of Dynamic Software Updating
6.1.3 Multi-threaded Systems
6.1.4 Operating Systems
6.1.5 DSU in Languages Other Than C
6.1.6 Edit and Continue Development
6.1.7 Dynamic Code Patching
6.2 Alternative (Non-DSU) Approaches to Online Updating
6.3 Software Evolution
6.4 Contextual Effects
7 Future Work
7.1 DSU for Other Categories of Applications
7.2 DSU for Operating Systems
7.3 Safety of Dynamic Software Updating
7.3.1 Dynamic Approaches
7.3.2 Static Approaches…

Source: University of Maryland

Leave a Comment