Abstract
Software evolves to fix bugs and add features. Stopping and restarting programs to apply changes is inconvenient and often costly. Dynamic software updating (DSU) addresses this problem by updating programs while they execute, but existing DSU systems for managed languages do not support many updates that occur in practice and are inefficient. This paper presents the design and implementation of Jvolve, a DSU-enhanced Java VM. Updated programs may add, delete, and replace fields and methods anywhere within the class hierarchy. Jvolve implements these updates by adding to and coordinating VM classloading, just-in-time compilation, scheduling, return barriers, on-stack replacement, and garbage collection. Jvolve, is safe: its use of bytecode verification and VM thread synchronization ensures that an update will always produce type-correct executions. Jvolve is flexible: it can support 20 of 22 updates to three open-source programs--Jetty web server, JavaEmailServer, and CrossFTP server--based on actual releases occurring over 1 to 2 years. Jvolve is efficient: performance experiments show that incurs no overhead during steady-state execution. These results demonstrate that this work is a significant step towards practical support for dynamic updates in virtual machines for managed languages.
- B. Alpern, D. Attanasio, J J. Barton, A. Cocchi, S. Flynn Hummel, D. Lieber, M. Mergen, T. Ngo, J Shepherd, and S. Smith. Implementing Jalapeño in Java. In Proc. OOPSLA, 1999. Google ScholarDigital Library
- Gautam Altekar, Ilya Bagrak, Paul Burstein, and Andrew Schultz. OPUS: Online patches and updates for security. In Proc. USENIX Security, 2005. Google ScholarDigital Library
- Jeff Arnold and Frans Kaashoek. Ksplice: Automatic rebootless kernel updates. In Proc. EuroSys, 2009. Google ScholarDigital Library
- Miles Barr and Susan Eisenbach. Safe upgrading without restarting. In Proc. ICSM, 2003. Google ScholarDigital Library
- A. Baumann, J. Appavoo, D. Da Silva, J. Kerr, O. Krieger, and R. W. Wisniewski. Providing dynamic update in an operating system. In Proc. USENIX Annual Technical Conference, 2005. Google ScholarDigital Library
- Andrew Baumann, Jonathan Appavoo, Robert W. Wisniewski, Dilma Da Silva, et al. Reboots are for hardware: challenges and solutions to updating an operating system on the fly. In Proc. USENIX Annual Technical Conference, 2007. Google ScholarDigital Library
- Gavin Bierman, Michael Hicks, Peter Sewell, and Gareth Stoyle. Formalizing dynamic software updating. In Proc. Second International Workshop on Unanticipated Software Evolution, 2003.Google Scholar
- Gavin Bierman, Matthew Parkinson, and James Noble. UpgradeJ: Incremental typechecking for class upgrades. In Proc. ECOOP, pages 235--259, 2008. Google ScholarDigital Library
- S. M. Blackburn, P. Cheng, and K. S. McKinley. Oil and water? High performance garbage collection in Java with MMTk. In Proc. ICSE, 2004. Google ScholarDigital Library
- S. M. Blackburn, K. S. McKinley, R. Garner, C. Hoffman, A. M. Khan, R. Bentzur, A. Diwan, D. Feinberg, D. Frampton, S. Z. Guyer, M. Hirzel, A. Hosking, M. Jump, H. Lee, J. E. B. Moss, A. Phansalkar, D. Stefanovi , T. VanDrunen, D. von Dincklage, and B. Wiedermann. Wake up and smell the coffee: Evaluation methodology for the 21st century. Communications of the ACM, 51(8):83--89, August 2008. Google ScholarDigital Library
- Chandrasekhar Boyapati, Barbara Liskov, Liuba Shrira, Chuang-Hue Moh, and Steven Richman. Lazy modular upgrades in persistent object stores. In Proc. OOPSLA, 2003. Google ScholarDigital Library
- Haibo Chen, Rong Chen, Fengzhe Zhang, Binyu Zang, and Pen-Chung Yew. Live updating operating systems using virtualization. In Proc. VEE, June 2006. Google ScholarDigital Library
- Haibo Chen, Jie Yu, Rong Chen, Binyu Zang, and Pen-Chung Yew. POLUS: A POwerful Live Updating System. In Proc. ICSE, 2007. Google ScholarDigital Library
- Microsoft Corporation. Edit and continue. http://msdn2.microsoft.com/en-us/library/bcew296c.aspx, 2008.Google Scholar
- M. Dmitriev. Towards flexible and safe technology for runtime evolution of java language applications. In Proc. Workshop on Engineering Complex Object-Oriented Systems for Evolution, 2001.Google Scholar
- Dominic Duggan. Type-based hot swapping of running modules. Acta Inf., 41(4-5):181--220, 2005.Google ScholarDigital Library
- Marc Eaddy and Steven Feiner. Multi-language edit-and-continue for the masses. Technical Report CUCS-015-05, Columbia University Department of Computer Science, April 2005.Google Scholar
- Torbjörn Ekman and Görel Hedin. The Jastadd extensible Java compiler. In Proc. OOPSLA, 2007. Google ScholarDigital Library
- Slashdot forum. Patch the kernel without reboots. http://tech.slashdot.org/article.pl?sid=08/04/24/1334234, April 2008. Consists of a lively technical debate about the benefits and drawbacks of in-place dynamic updates vs. using redundant hardware.Google Scholar
- Stephen Gilmore, Dilsun Kirli, and Chris Walton. Dynamic ML without dynamic types. Technical Report ECS-LFCS-97-378, LFCS, University of Edinburgh, 1997.Google Scholar
- Deepak Gupta, Pankaj Jalote, and Gautam Barua. A formal framework for on-line software version change. IEEE Trans. Softw. Eng., 22(2):120--131, 1996. Google ScholarDigital Library
- G. Hjálmtýsson and R. Gray. Dynamic C classes, a lightweight mechanism to update code in a running program. In Proc. USENIX Annual Technical Conference, 1998. Google ScholarDigital Library
- Yueh-Feng Lee and Ruei-Chuan Chang. Hotswapping linux kernel modules. J. Syst. Softw., 79(2):163--175, 2006. Google ScholarDigital Library
- Kristis Makris and Rida Bazzi. Multi-threaded dynamic software updates using stack reconstruction. In Proc. USENIX Annual Technical Conference, 2009. Google ScholarDigital Library
- Kristis Makris and Kyung Dong Ryu. Dynamic and adaptive updates of non-quiescent subsystems in commodity operating system kernels. In Proc. EuroSys, March 2007. Google ScholarDigital Library
- Scott Malabarba, Raju Pandey, Jeff Gragg, Earl Barr, and J. Fritz Barnes. Runtime support for type-safe dynamic Java classes. In Proc. ECOOP, 2000. Google ScholarDigital Library
- Sun Microsystems. Java Platform Debugger Architecture, 2004. This supports class replacement. See http://java.sun.com/javase/6/docs/technotes/guides/jpda/.Google Scholar
- Marco Milazzo, Giuseppe Pappalardo, Emiliano Tramontana, and Giuseppe Ursino. Handling run-time updates in distributed applications. In Proc. SAC, 2005. Google ScholarDigital Library
- Iulian Neamtiu, Jeffrey S. Foster, and Michael Hicks. Understanding source code evolution using abstract syntax tree matching. In Proc. International Workshop on Mining Software Repositories, 2005. Google ScholarDigital Library
- Iulian Neamtiu and Michael Hicks. Safe and timely dynamic updates for multi-threaded programs. In Proc. PLDI, 2009. Google ScholarDigital Library
- Iulian Neamtiu, Michael Hicks, Jeffrey S. Foster, and Polyvios Pratikakis. Contextual effects for version-consistent dynamic software updating and safe concurrent programming. In Proc. POPL, 2008. Google ScholarDigital Library
- Iulian Neamtiu, Michael Hicks, Gareth Stoyle, and Manuel Oriol. Practical dynamic software updating for C. In Proc. PLDI, 2006. Google ScholarDigital Library
- Angela Nicoara, Gustavo Alonso, and Timothy Roscoe. Controlled, systematic, and efficient code replacement for running Java programs. In Proc. Eurosys, 2008. Google ScholarDigital Library
- D. Oppenheimer, A. Brown, J. Beck, D. Hettena, J. Kuroda, N. Treuhaft, D. A. Patterson, and K. Yelick. Roc-1: Hardware support for recovery-oriented computing. IEEE Trans. Comput., 51(2):100--107, 2002. Google ScholarDigital Library
- Alessandro Orso, Anup Rao, and Mary Jean Harrold. A technique for dynamic updating of Java software. In Proc. ICSM, 2002. Google ScholarDigital Library
- J. W. Pratt and J. D. Gibbons. Concepts of Nonparametric Theory. Springer-Verlag, 1981.Google ScholarCross Ref
- Tobias Ritzau and Jesper Andersson. Dynamic deployment of Java applications. In Proc. Java for Embedded Systems Workshop, 2000.Google Scholar
- D. Scott. Assessing the Costs of Application Downtime. Gartner Group, 1998.Google Scholar
- C. Soules, J. Appavoo, K. Hui, D. Da Silva, G. Ganger, O. Krieger, M. Stumm, R. Wisniewski, M. Auslander, M. Ostrowski, B. Rosenburg, and J. Xenidis. System support for online reconfiguration. In Proc. USENIX Annual Technical Conference, June 2003.Google Scholar
- Gareth Stoyle, Michael Hicks, Gavin Bierman, Peter Sewell, and Iulian Neamtiu. phMutatis Mutandis: Safe and flexible dynamic software updating (full version). TOPLAS, 29(4):22, August 2007. Google ScholarDigital Library
- Ewan Tempero, Gavin Bierman, James Noble, and Matthew Parkinson. From Java to UpgradeJ: an empirical study. In Proc. International Workshop on Hot Topics in Software Upgrades (HotSWUp), 2008. Google ScholarDigital Library
- The Jikes RVM Core Team. VM performance comparisons, 2007. http://dacapo.anu.edu.au/regression/perf/head.html.Google Scholar
- Taiichi Yuasa. Design and implementation of Kyoto Common Lisp. Journal of Information Processing, 13(3):284--295, 1990. Google ScholarDigital Library
- Benjamin Zorn. Personal communication, based on experience with Microsoft Windows customers, August 2005.Google Scholar
Index Terms
- Dynamic software updates: a VM-centric approach
Recommendations
Dynamic software updates: a VM-centric approach
PLDI '09: Proceedings of the 30th ACM SIGPLAN Conference on Programming Language Design and ImplementationSoftware evolves to fix bugs and add features. Stopping and restarting programs to apply changes is inconvenient and often costly. Dynamic software updating (DSU) addresses this problem by updating programs while they execute, but existing DSU systems ...
Practical dynamic software updating for C
Proceedings of the 2006 PLDI ConferenceSoftware updates typically require stopping and restarting an application, but many systems cannot afford to halt service, or would prefer not to. Dynamic software updating (DSU) addresses this difficulty by permitting programs to be updated while they ...
Safe and timely updates to multi-threaded programs
PLDI '09Many dynamic updating systems have been developed that enable a program to be patched while it runs, to fix bugs or add new features. This paper explores techniques for supporting dynamic updates to multi-threaded programs, focusing on the problem of ...
Comments