Knowledge (XXG)

Dynamic software updating

Source 📝

495:, require programs to pass various static analyses. While these analyses prove properties of programs that are valuable for DSU, they are by nature sophisticated and difficult to understand. DSU systems that do not use a static analysis might require use of a specialized compiler. Some DSU systems require neither static analysis nor specialty compilers. 1046:
Pymoult is a prototyping platform for dynamic update written in Python. It gathers many techniques from other systems, allowing their combination and configuration. The objective of this platform is to let developers chose the update techniques they find more appropriate for their needs. For example,
954:
examined by Ginseng's authors, important user verification code was moved between two functions called in sequence. If the first version of the first function executed, an update occurred, and the new version of the second function was executed, then the verification would never be performed. Marking
886:
Since April 2015, there is ongoing work on porting kpatch and kGraft to the common live patching core provided by the Linux kernel mainline. However, implementation of the function-level consistency mechanisms, required for safe transitions between the original and patched versions of functions, has
1018:
Ekiden and Kitsune are also notable in that they are implemented primarily as application-level libraries, rather than specialized runtimes or compilers. As such, to use Ekiden or Kitsune, an application developer must manually mark state that is to be transferred, and manually select points in the
979:. It is able to update unmodified programs at any point in their execution. To update functions, it rewrites the prelude to a target function to redirect to a new function, chaining these redirections over multiple versions. This avoids steady-state overhead in functions that have not been updated. 631:
DSU systems must load new code into a running program, and transform existing state into a format that is understood by the new code. Since many motivational use-cases of DSU are time-critical (for example, deploying a security fix on a live and vulnerable system), DSU systems must provide adequate
599:
of the primary system. In the event of a failure, the hot spare would take over, and the main machine would become the new hot spare. This pattern can be generalized to updating. In the event of an update, the hot spare would activate, the main system would update, and then the updated system would
730:
These transformer functions can either be applied to program state lazily, as each piece of old-version state is accessed, or eagerly, transforming all state at update time. Lazy transformation ensures that the update will complete in constant time, but also incurs steady-state overhead on object
639:
There is no one canonical solution to any of these problems. Typically, a DSU system that performs well in one problem area does so at a trade-off to others. For example, empirical testing of dynamic updates indicates that increasing the number of update points results in an increased number of
43:. These compilers preserve the semantics of the original program, but instrument either the source code or object code to produce a dynamically updateable program. Researchers compare DSU-capable variants of programs to the original program to assess safety and performance overhead. 1168:
depending on the hardware, operating system, other environment and driver configuration as well as the selected feature set and locale (about sixty configuration switches with hundreds of options for an almost unlimited number of possible combinations). The build process utilizes a
685:, DSU systems can use specialized compilers that insert indirection into the program. At update time, this indirection is updated to point to the newest version. If a DSU system does not use a compiler to insert these indirections statically, it insert them at runtime with 844:
to determine changes between current and updated versions of the Linux kernel, and then uses binary rewriting to insert the changes into the running kernel. Ksplice was maintained by a commercial venture founded by its original authors, Ksplice Inc., which was acquired by
945:
Later versions of Ginseng also support a notion of transactional safety. This allows developers to annotate a sequence of function calls as a logical unit, preventing updates from violating program semantics in ways that are not detectable by either activeness safety or
1196:
to dynamically (re)combine, (over)load, modify, update or unload the runtime image (code and data) of the driver as requested. The complexity is hidden in a single self-contained file so that for a user the handling is the same as for a normal (semi-)monolithic
743:
Most DSU systems attempt to show some safety properties for updates. The most common variant of safety checking is type safety, where an update is considered safe if it does not result in any new code operating on an old state representation, or vice versa.
967:. To update a program with UpStare, a developer specifies a mapping between any possible stack frames. UpStare is able to use this mapping to immediately update the program at any point, with any number of threads, and with any functions live on the stack. 559:
with previous versions of its on-disk file format, must accomplish the same type of state transformation expected of a dynamic updating system. Likewise, a program that has a plugin architecture, must be able to load and execute new code at runtime.
789:
and activeness safety by Hayden et al. show that both techniques permit most correct updates and deny most erroneous updates. However, manually selecting update points results in zero update errors, and still allows frequent update availability.
483:
can update a program to any other program capable of being executed, even one written in a different programming language. Systems designers can extract valuable performance or safety assurances by limiting the scope of updates. For example, any
1055:
Microsoft is utilizing internal patching technology for Microsoft Visual C++ that supports patching individual C++ functions while maintaining functional correctness of patches. Currently known applications is SQL Server in Azure SQL Database.
938:. This compiler inserts indirection to all function calls and type accesses, enabling Ginseng to lazily transform state at the cost of imposing a constant-time overhead for the entirety of the program execution. Ginseng's compiler proves the 1003:. Rather than updating functions within a single program, Ekiden and Kitsune perform updates over whole programs, transferring necessary state between the two executions. While Ekiden accomplishes this by starting a new program using the 726:
DSU systems can either attempt to synthesize transformer functions, or require that the developer manually supply them. Some systems mix these approaches, inferring some elements of transformers while requiring developer input on others.
35:
programs while they are running. DSU is not currently widely used in industry. However, researchers have developed a wide variety of systems and techniques for implementing DSU. These systems are commonly tested on real-world programs.
765:
is another way to prove type safety, where a section of code is considered safe if it does not access state of a given type in a way that requires knowledge of the type representation. This code can be said to not access the state
534:
are all dynamic updating targets for various systems. Since few programs are written with support for dynamic updating in mind, retrofitting existing programs is a valuable means of evaluating a DSU system for practical use.
689:. Binary rewriting is the process of writing low-level code into the memory image of a running native program to re-direct functions. While this requires no static analysis of a program, it is highly platform-dependent. 883:
in April 2014 and May 2014, respectively, and the minimalistic foundations for live patching were merged into the Linux kernel mainline in kernel version 4.0, which was released on April 12, 2015.
479:
only supports code changes in functions, and does not support changes to state representation. This is because Ksplice primarily targets security changes, rather than general updates. In contrast,
1096: 39:
Current operating systems and programming languages are typically not designed with DSU in mind. As such, DSU implementations commonly either utilize existing tools, or implement specialty
1038:". Erlang requires no safety guarantees on updates, but Erlang culture suggests that developers write in a defensive style that will gracefully handle type errors generated by updating. 591:. In a redundant environment, spare systems exist ready to take control of active computations in the event of a failure of the main system. These systems contain a main machine and a 446: 1642:
Neamtiu, Iulian; Hicks, Michael; Foster, Jeffrey; Pratikakis, Polyvios (2008). "Contextual Effects for Version-Consistent Dynamic Software Updating and Safe Concurrent Programming".
198: 619:
ystem). Presented in 1983 in the PhD dissertation of Insup Lee, DYMOS was a fully integrated system that had access to an interactive user interface, a compiler and runtime for a
355: 305: 735:
while all transformers run. However, eager transformation allows compilers to fully optimize state access, avoiding the steady-state overhead involved with lazy transformation.
392: 811:. In DYMOS, updates are initiated by a user executing a command in the interactive environment. This command includes directives specifying when an update can occur, called 899:; as a result, the porting work remains in progress as of September 2015. In an attempt to improve the reliability of kernel's call stacks, a specialized sanity-check 488:
limits the scope of updates to updates which pass that safety check. The mechanism used to transform code and state influences what kinds of updates a system will support.
259: 156: 84: 1144:(NB. The K3PLUS successor FreeKEYB is a fully reconfigurable driver with many dynamically loadable special features. It implements a unique form of byte-level granular 991:
binaries. The Katana patching model operates on the level of ELF objects, and thus has the capacity to be language-agnostic as long as the compilation target is ELF.
223: 104: 659:
language, the VM can use existing infrastructure to load new code, since modern virtual machines support runtime loading for other use cases besides DSU (mainly
124: 1812: 1759: 803:
DYMOS is notable in that it was the earliest proposed DSU system. DYMOS consists of a fully integrated environment for programs written in a derivative of
1119: 711:
During an update, program state must be transformed from the original representation to the new version's representation. This is referred to as
1680: 923:
safety technique, allowing it to update functions that are live on the stack as long as they do not make concrete accesses to updated types.
907:
and ensuring that the call stack is always maintained; it also opens up a possibility for achieving more reliable call stacks as part of the
871:. They both allow function-level changes to be applied to a running Linux kernel, while relying on live patching mechanisms established by 782:, it can be updated even if it is live on the stack, since it will not cause a type error by accessing state using the old representation. 1198: 824: 1449: 999:
Ekiden and Kitsune are two variants of a single DSU system that implements the state-transfer style of DSU for programs written in
1015:
to perform "in-place" state transfer. Kitsune is derived from Ekiden's codebase, and can be considered a later version of Ekiden.
1047:
one can combine lazy update of the state as in Ginseng while changing the whole code of the application as in Kitsune or Ekiden.
875:. The primary difference between kGraft and kpatch is the way they ensure runtime consistency of the updated code sections while 1173:
as well as a framework of automatic pre- and post-processing tools analyzing the temporary binaries to generate dependency and
759:
at update time. This proves safety because control can never return to old code that would access new representations of data.
1236: 815:. The information available to DYMOS enables it to enforce type-safety of updates with respect to the running target program. 1827: 1070: 988: 552: 1145: 1035: 1031: 564: 778:
for all types in any section of code, and the DSU system Ginseng uses this to prove type safety. If a function is proven
543:
The problem space addressed by dynamic updating can be thought of as an intersection of several others. Examples include
468:'s compiler will attempt to infer good locations for update points, but can also use programmer-specified update points. 491:
DSU systems, as tools, can also be evaluated on their ease-of-use and clarity to developers. Many DSU systems, such as
671: 1716: 987:
Katana is a research system that provides limited dynamic updating (similar to Ksplice and its forks) for user-mode
1567: 1142: 1019:
program where an update can occur. To ease this process, Kitsune includes a specialized compiler that implements a
1658: 807:, giving the system access to a command interpreter, source code, compiler, and runtime environment, similar to a 927: 664: 596: 1020: 1000: 976: 678: 588: 1792: 931: 837: 515: 1387: 1189: 1149: 456:. Existing DSU implementations vary widely in their treatment of update points. In some systems, such as 398: 1319: 880: 955:
this section as a transaction ensures that an update will not prevent the verification from occurring.
1473: 1075: 314: 264: 1392: 1691: 1161: 1157: 556: 161: 360: 1455: 1254: 846: 623:
variant, and source code. This enabled DYMOS to type-check updates against the existing program.
519: 502:. Academic publications of DSU systems commonly include several target programs as case studies. 232: 129: 57: 731:
access. Eager transformation incurs more expense at the time of update, requiring the system to
1445: 1193: 903:
userspace utility has also been developed with the purpose of checking kernel's compile-time
652:
as the unit of code for updates; however, newer DSU systems implement whole-program updates.
89: 1437: 1429: 1397: 1111: 686: 576: 572: 20: 1307:
Hayden, Chris; Smith, Edward K.; Denchev, Michail; Hicks, Michael; Foster, Jeffery (2011).
126:
is the current program code. Dynamic software updating systems transform a running program
1493: 1332: 1181: 1170: 1012: 700: 656: 548: 1253:
Hayden, Chris; Smith, Edward K.; Hardisty, Eric; Hicks, Michael; Foster, Jeffery (2011).
475:
Updating systems differ in the types of program changes that they support. For example,
203: 1416: 1346:
Stoyle, Gareth; Hicks, Michael; Bierman, Gavin; Sewall, Peter; Neamtiu, Iulian (2005).
1165: 109: 1281: 636:. Some DSU systems also attempt to ensure that updates are safe before applying them. 1821: 1619:"Linux kernel documentation: Documentation/stack-validation.txt (from the v13 patch)" 1347: 1235:(Doctor of Philosophy (Computer Science) thesis). University of Wisconsin - Madison. 1174: 892: 732: 715:. A function which transforms a state object or group of objects is referred to as a 544: 1459: 1230: 1065: 850: 833: 1644:
Proceedings of the {ACM} Conference on Principles of Programming Languages (POPL)
1372: 1308: 1185: 908: 904: 896: 1807: 1721:
Proceedings of the 5th Workshop on Hot Topics in Software Upgrades (HotSWUp'13)
755:. A program is considered activeness-safe if no updated function exists on the 1659:"Immediate Multi-Threaded Dynamic Software Updates Using Stack Reconstruction" 1289:
Data Engineering Workshops (ICDEW), 2011 IEEE 27th International Conference on
919:
Ginseng is a general-purpose DSU system. It is the only DSU system to use the
888: 756: 649: 511: 452:
The location in a program where a dynamic update occurs is referred to as an
394:
that is reachable from the starting point of the new version of the program,
200:. In order to do this, the state must be transformed into the representation 1739: 1735: 1433: 1401: 1177: 1153: 1034:
supports Dynamic Software Updating, though this is commonly referred to as "
1011:, serializing the target program's state, and transferring it, Kitsune uses 1008: 876: 856: 696: 660: 568: 527: 523: 849:
in July 2011. Ksplice is used on a commercial basis and exclusively in the
703:. The existing program state is then transferred to the new program space. 695:
load new program code via starting an entirely new program, either through
1420: 891:
provided by the Linux kernel may be unreliable in situations that involve
1280:
Hayden, Chris; Smith, Edward K.; Hicks, Michael; Foster, Jeffery (2011).
40: 1666:
Proceedings of the 2009 Conference on USENIX Annual Technical Conference
1441: 1355:
Proceedings of the ACM Conference on Principles of Programming Languages
1622: 1597: 1547: 1522: 1371:
Neamtiu, Iulian; Hicks, Michael; Stoyle, Gareth; Oriol, Manuel (2006).
951: 864: 829: 507: 32: 1797: 1679:
Chen, Haibo; Yu, Jie; Chen, Rong; Zang, Binyu; Yew, Pen-Chung (2007).
1115: 1309:"Kitsune: Efficient, General-purpose Dynamic Software Updating for C" 879:
are applied. kGraft and kpatch were submitted for inclusion into the
872: 868: 860: 804: 620: 575:
at load or runtime, and recombine the remaining code to minimize its
503: 1255:"Evaluating dynamic software update safety using systematic testing" 1618: 1593: 1543: 1518: 836:, making itself one of the specialized DSU systems that support an 747:
Type safety is typically checked by showing one of two properties,
682: 472:
require developers to manually specify and name all update points.
1422:
Proceedings of the 4th ACM European conference on Computer systems
1348:"Mutatis mutandis: Safe and predictable dynamic software updating" 935: 563:
Similar techniques are sometimes also employed for the purpose of
531: 52: 1213:
FreeKEYB - Advanced international DOS keyboard and console driver
942:
properties of the entire initial program and of dynamic patches.
1798:
Ginseng Project Page and Source Code/ UpStare Paper/ PoLUS paper
1004: 841: 808: 963:
UpStare is a DSU system that uses a unique updating mechanism,
667: 498:
Programs that are updated by a DSU system are referred to as
863:
as an open-source alternative for live kernel patching, and
1715:
Sébastien Martinez; Fabien Dagnat; Jérémy Buisson (2013).
670:
supports runtime code loading, and DSU systems targeting
1802: 1419:(2009). "Ksplice: automatic rebootless kernel updates". 1282:"State transfer for clear and efficient runtime updates" 1097:"A Formal Framework for On-line Software Version Change" 587:
The earliest precursor to dynamic software updating is
1760:"Hot Patching SQL Server Engine in Azure SQL Database" 603:
The earliest true Dynamic Software Updating system is
1787: 1688:
29th International Conference on Software Engineering
1095:
Gupta, Deepak; Jalote, Pankaj; Barua, Gautam (1996).
401: 363: 317: 267: 235: 206: 164: 132: 112: 92: 60: 595:. The hot spare would be periodically seeded with a 464:, an update can occur at any time during execution. 1138:
FreeKEYB - Enhanced DOS keyboard and console driver
1136:Paul, Matthias R.; Frinke, Axel C. (1997-10-13) , 840:as the target program. Ksplice uses source-level 440: 386: 349: 299: 253: 217: 192: 150: 118: 98: 78: 1211:Paul, Matthias R.; Frinke, Axel C. (2006-01-16), 476: 1568:"Linux kernel 4.0, Section 1.2. Live patching" 1164:to minimize its memory footprint close to the 8: 1813:Whitepaper blog post on Visual C++ patching 1373:"Practical dynamic software updating for C" 975:PoLUS is a binary-rewriting DSU system for 655:If the target program is implemented in a 1717:"Prototyping DSU Techniques using Python" 1391: 1366: 1364: 1302: 1300: 1298: 1262:IEEE Transactions on Software Engineering 1248: 1246: 1104:IEEE Transactions on Software Engineering 555:. As an example, a database that must be 409: 400: 362: 316: 266: 234: 229:function. Thus, DSU transforms a program 205: 163: 131: 111: 91: 59: 1681:"POLUS: A POwerful Live Updating System" 1657:Makris, Kristis; Bazzi, Rida A. (2009). 1275: 1273: 1271: 950:safety. For example, in two versions of 51:Any running program can be thought of a 1224: 1222: 1215:(User Manual) (v7 preliminary ed.) 1087: 692: 480: 469: 31:) is a field of research pertaining to 1328: 1317: 832:is a DSU system that targets only the 774:. It is possible to prove or disprove 1494:"Getting Started with Oracle Ksplice" 16:Field of research in computer science 7: 1232:Dymos: a dynamic modification system 1199:terminate-and-stay-resident program 825:Category:Linux kernel live patching 441:{\displaystyle (\delta _{init},P')} 311:if and only if the running program 1734:Martinez, Sébastien (2013-03-06). 1180:to be embedded into the resulting 485: 14: 1519:"kpatch: dynamic kernel patching" 106:is the current program state and 1239:from the original on 2003-09-16. 1023:for writing state transformers. 770:, while it may access the state 357:can be reduced to a point tuple 1594:"Compile-time stack validation" 1592:Corbet, Jonathan (2015-09-30). 1544:"The initial kGraft submission" 1542:Corbet, Jonathan (2014-04-30). 350:{\displaystyle (S(\delta ),P')} 300:{\displaystyle (S(\delta ),P')} 1617:Poimboeuf, Josh (2015-09-24). 1517:Poimboeuf, Josh (2014-05-01). 1071:Persistence (computer science) 435: 402: 381: 364: 344: 330: 324: 318: 294: 280: 274: 268: 248: 236: 187: 165: 145: 133: 73: 61: 1: 1146:dynamic dead code elimination 1140:(User Manual) (v6.5 ed.) 565:dynamic dead-code elimination 193:{\displaystyle (\delta ',P')} 1066:Hot swapping § Software 926:Ginseng is implemented as a 677:In native languages such as 492: 465: 457: 387:{\displaystyle (\delta ,P')} 1764:TECHCOMMUNITY.MICROSOFT.COM 672:Java (programming language) 254:{\displaystyle (\delta ,P)} 151:{\displaystyle (\delta ,P)} 79:{\displaystyle (\delta ,P)} 1844: 822: 819:Ksplice, kpatch and kGraft 674:can utilize this feature. 604: 461: 307:. An update is considered 1690:: 271–281. Archived from 1160:and reconfigurability at 928:source-to-source compiler 887:been delayed because the 225:expects. This requires a 25:dynamic software updating 1021:domain-specific language 567:to remove conditionally 1434:10.1145/1519065.1519085 1402:10.1145/1133255.1133991 1188:and a self-discarding, 932:C Intermediate Language 838:operating system kernel 99:{\displaystyle \delta } 1327:Cite journal requires 785:Empirical analysis of 442: 388: 351: 301: 255: 219: 194: 152: 120: 100: 80: 1828:System administration 881:Linux kernel mainline 648:Most DSU systems use 443: 389: 352: 302: 256: 220: 195: 153: 121: 101: 81: 1474:"Oracle and Ksplice" 1428:. pp. 187–198. 1076:Runtime verification 1051:Microsoft Visual C++ 965:stack reconstruction 753:cons-freeness safety 717:transformer function 713:state transformation 707:State transformation 399: 361: 315: 265: 233: 204: 162: 130: 110: 90: 58: 1793:Ksplice source code 1380:ACM SIGPLAN Notices 1229:Lee, Insup (1983). 1158:self-modifying code 644:Code transformation 634:update availability 557:backward-compatible 486:update safety check 1417:Kaashoek, M. Frans 995:Kitsune and Ekiden 930:written using the 867:did likewise with 847:Oracle Corporation 693:Ekiden and Kitsune 579:or improve speed. 470:Kitsune and Ekiden 438: 384: 347: 297: 251: 218:{\displaystyle P'} 215: 190: 148: 116: 96: 76: 1572:kernelnewbies.org 1194:relocating loader 1116:10.1109/32.485222 749:activeness safety 721:state transformer 589:redundant systems 227:state transformer 158:to a new version 119:{\displaystyle P} 1835: 1788:Ksplice homepage 1775: 1774: 1772: 1771: 1756: 1750: 1749: 1747: 1746: 1731: 1725: 1724: 1712: 1706: 1705: 1703: 1702: 1696: 1685: 1676: 1670: 1669: 1663: 1654: 1648: 1647: 1639: 1633: 1632: 1630: 1629: 1614: 1608: 1607: 1605: 1604: 1589: 1583: 1582: 1580: 1579: 1564: 1558: 1557: 1555: 1554: 1539: 1533: 1532: 1530: 1529: 1514: 1508: 1507: 1505: 1504: 1490: 1484: 1483: 1481: 1480: 1470: 1464: 1463: 1427: 1412: 1406: 1405: 1395: 1377: 1368: 1359: 1358: 1352: 1343: 1337: 1336: 1330: 1325: 1323: 1315: 1313: 1304: 1293: 1292: 1291:. IEEE: 179–184. 1286: 1277: 1266: 1265: 1259: 1250: 1241: 1240: 1226: 1217: 1216: 1208: 1202: 1141: 1133: 1127: 1126: 1124: 1118:. Archived from 1101: 1092: 1036:hot code loading 902: 794:Existing systems 687:binary rewriting 640:unsafe updates. 600:resume control. 577:memory footprint 573:unreachable code 449: 447: 445: 444: 439: 434: 423: 422: 393: 391: 390: 385: 380: 356: 354: 353: 348: 343: 306: 304: 303: 298: 293: 260: 258: 257: 252: 224: 222: 221: 216: 214: 199: 197: 196: 191: 186: 175: 157: 155: 154: 149: 125: 123: 122: 117: 105: 103: 102: 97: 85: 83: 82: 77: 21:computer science 1843: 1842: 1838: 1837: 1836: 1834: 1833: 1832: 1818: 1817: 1808:Katana homepage 1803:Erlang homepage 1784: 1779: 1778: 1769: 1767: 1758: 1757: 1753: 1744: 1742: 1733: 1732: 1728: 1714: 1713: 1709: 1700: 1698: 1694: 1683: 1678: 1677: 1673: 1661: 1656: 1655: 1651: 1641: 1640: 1636: 1627: 1625: 1616: 1615: 1611: 1602: 1600: 1591: 1590: 1586: 1577: 1575: 1566: 1565: 1561: 1552: 1550: 1541: 1540: 1536: 1527: 1525: 1516: 1515: 1511: 1502: 1500: 1492: 1491: 1487: 1478: 1476: 1472: 1471: 1467: 1452: 1425: 1414: 1413: 1409: 1393:10.1.1.625.4663 1375: 1370: 1369: 1362: 1350: 1345: 1344: 1340: 1326: 1316: 1311: 1306: 1305: 1296: 1284: 1279: 1278: 1269: 1257: 1252: 1251: 1244: 1228: 1227: 1220: 1210: 1209: 1205: 1182:executable file 1171:macro assembler 1135: 1134: 1130: 1122: 1099: 1094: 1093: 1089: 1084: 1062: 1053: 1044: 1029: 1013:dynamic linking 997: 985: 973: 961: 917: 900: 895:without proper 827: 821: 813:when-conditions 801: 796: 741: 709: 701:dynamic loading 657:virtual machine 646: 629: 585: 549:dynamic linking 541: 500:target programs 427: 405: 397: 396: 395: 373: 359: 358: 336: 313: 312: 286: 263: 262: 231: 230: 207: 202: 201: 179: 168: 160: 159: 128: 127: 108: 107: 88: 87: 56: 55: 49: 17: 12: 11: 5: 1841: 1839: 1831: 1830: 1820: 1819: 1816: 1815: 1810: 1805: 1800: 1795: 1790: 1783: 1782:External links 1780: 1777: 1776: 1751: 1726: 1707: 1671: 1649: 1634: 1609: 1584: 1559: 1534: 1509: 1485: 1465: 1450: 1415:Arnold, Jeff; 1407: 1360: 1338: 1329:|journal= 1294: 1267: 1242: 1218: 1203: 1184:alongside the 1166:canonical form 1152:techniques at 1128: 1125:on 2014-04-07. 1110:(2): 120–131. 1086: 1085: 1083: 1080: 1079: 1078: 1073: 1068: 1061: 1058: 1052: 1049: 1043: 1040: 1028: 1025: 996: 993: 984: 981: 972: 969: 960: 957: 916: 913: 853:distribution. 820: 817: 800: 797: 795: 792: 740: 737: 733:stop the world 708: 705: 645: 642: 628: 627:Implementation 625: 584: 581: 540: 539:Related fields 537: 437: 433: 430: 426: 421: 418: 415: 412: 408: 404: 383: 379: 376: 372: 369: 366: 346: 342: 339: 335: 332: 329: 326: 323: 320: 296: 292: 289: 285: 282: 279: 276: 273: 270: 250: 247: 244: 241: 238: 213: 210: 189: 185: 182: 178: 174: 171: 167: 147: 144: 141: 138: 135: 115: 95: 75: 72: 69: 66: 63: 48: 45: 15: 13: 10: 9: 6: 4: 3: 2: 1840: 1829: 1826: 1825: 1823: 1814: 1811: 1809: 1806: 1804: 1801: 1799: 1796: 1794: 1791: 1789: 1786: 1785: 1781: 1765: 1761: 1755: 1752: 1741: 1737: 1730: 1727: 1722: 1718: 1711: 1708: 1697:on 2012-04-26 1693: 1689: 1682: 1675: 1672: 1667: 1660: 1653: 1650: 1645: 1638: 1635: 1624: 1620: 1613: 1610: 1599: 1595: 1588: 1585: 1573: 1569: 1563: 1560: 1549: 1545: 1538: 1535: 1524: 1520: 1513: 1510: 1499: 1495: 1489: 1486: 1475: 1469: 1466: 1461: 1457: 1453: 1451:9781605584829 1447: 1443: 1439: 1435: 1431: 1424: 1423: 1418: 1411: 1408: 1403: 1399: 1394: 1389: 1385: 1381: 1374: 1367: 1365: 1361: 1356: 1349: 1342: 1339: 1334: 1321: 1310: 1303: 1301: 1299: 1295: 1290: 1283: 1276: 1274: 1272: 1268: 1263: 1256: 1249: 1247: 1243: 1238: 1234: 1233: 1225: 1223: 1219: 1214: 1207: 1204: 1200: 1195: 1191: 1187: 1183: 1179: 1176: 1175:code morphing 1172: 1167: 1163: 1159: 1155: 1151: 1147: 1143: 1139: 1132: 1129: 1121: 1117: 1113: 1109: 1105: 1098: 1091: 1088: 1081: 1077: 1074: 1072: 1069: 1067: 1064: 1063: 1059: 1057: 1050: 1048: 1041: 1039: 1037: 1033: 1026: 1024: 1022: 1016: 1014: 1010: 1006: 1002: 994: 992: 990: 982: 980: 978: 970: 968: 966: 958: 956: 953: 949: 948:cons-freeness 943: 941: 940:cons-freeness 937: 934:framework in 933: 929: 924: 922: 921:cons-freeness 914: 912: 910: 906: 898: 894: 893:assembly code 890: 884: 882: 878: 874: 870: 866: 862: 858: 854: 852: 848: 843: 839: 835: 831: 826: 818: 816: 814: 810: 806: 798: 793: 791: 788: 787:cons-freeness 783: 781: 777: 776:cons-freeness 773: 769: 764: 763:Cons-Freeness 760: 758: 754: 750: 745: 739:Update safety 738: 736: 734: 728: 724: 722: 718: 714: 706: 704: 702: 698: 694: 690: 688: 684: 680: 675: 673: 669: 666: 662: 658: 653: 651: 643: 641: 637: 635: 626: 624: 622: 618: 614: 610: 606: 601: 598: 594: 590: 582: 580: 578: 574: 570: 566: 561: 558: 554: 550: 546: 545:checkpointing 538: 536: 533: 529: 525: 521: 517: 513: 509: 505: 501: 496: 494: 489: 487: 482: 478: 473: 471: 467: 463: 459: 455: 450: 431: 428: 424: 419: 416: 413: 410: 406: 377: 374: 370: 367: 340: 337: 333: 327: 321: 310: 290: 287: 283: 277: 271: 245: 242: 239: 228: 211: 208: 183: 180: 176: 172: 169: 142: 139: 136: 113: 93: 70: 67: 64: 54: 46: 44: 42: 37: 34: 30: 26: 22: 1768:. Retrieved 1766:. 2019-09-11 1763: 1754: 1743:. Retrieved 1729: 1720: 1710: 1699:. Retrieved 1692:the original 1687: 1674: 1665: 1652: 1643: 1637: 1626:. Retrieved 1612: 1601:. Retrieved 1587: 1576:. Retrieved 1574:. 2015-04-26 1571: 1562: 1551:. Retrieved 1537: 1526:. Retrieved 1512: 1501:. Retrieved 1497: 1488: 1477:. Retrieved 1468: 1442:1721.1/51698 1421: 1410: 1386:(6): 72–83. 1383: 1379: 1354: 1341: 1320:cite journal 1288: 1261: 1231: 1212: 1206: 1137: 1131: 1120:the original 1107: 1103: 1090: 1054: 1045: 1030: 1017: 998: 986: 974: 964: 962: 947: 944: 939: 925: 920: 918: 905:object files 897:stack frames 885: 855: 851:Oracle Linux 834:Linux kernel 828: 812: 802: 786: 784: 779: 775: 771: 767: 762: 761: 752: 748: 746: 742: 729: 725: 720: 716: 712: 710: 691: 676: 654: 647: 638: 633: 630: 616: 612: 608: 602: 592: 586: 562: 542: 499: 497: 490: 474: 454:update point 453: 451: 308: 226: 50: 47:Introduction 38: 28: 24: 18: 1264:(99). IEEE. 1186:binary code 1156:as well as 909:kernel oops 889:call stacks 877:hot patches 650:subroutines 615:dification 553:persistence 1770:2019-09-15 1745:2014-11-27 1701:2011-12-18 1628:2015-10-02 1603:2015-10-02 1578:2015-05-14 1553:2014-11-07 1528:2014-07-23 1503:2014-08-02 1498:oracle.com 1479:2011-07-21 1150:relocation 1082:References 911:messages. 859:developed 823:See also: 772:abstractly 768:concretely 757:call stack 597:checkpoint 512:PostgreSQL 1740:Bitbucket 1736:"Pymoult" 1388:CiteSeerX 1178:meta data 1154:load-time 1009:fork-exec 1007:idiom of 901:stacktool 780:cons-free 697:fork-exec 661:debugging 593:hot spare 528:memcached 524:GNU Zebra 407:δ 368:δ 328:δ 278:δ 240:δ 170:δ 137:δ 94:δ 65:δ 41:compilers 33:upgrading 1822:Category 1646:: 37–58. 1237:Archived 1190:relaxing 1162:run-time 1060:See also 432:′ 378:′ 341:′ 291:′ 212:′ 184:′ 173:′ 86:, where 1623:LWN.net 1598:LWN.net 1548:LWN.net 1523:LWN.net 1460:7720018 1197:driver/ 1042:Pymoult 959:UpStare 952:OpenSSH 915:Ginseng 865:Red Hat 830:Ksplice 665:HotSpot 663:). The 583:History 508:OpenSSH 493:Ginseng 477:Ksplice 466:Ginseng 458:UpStare 1458:  1448:  1390:  1032:Erlang 1027:Erlang 983:Katana 873:ftrace 869:kpatch 861:kGraft 805:Modula 621:Modula 611:namic 551:, and 530:, and 520:Apache 504:vsftpd 481:Ekiden 1695:(PDF) 1684:(PDF) 1662:(PDF) 1456:S2CID 1426:(PDF) 1376:(PDF) 1351:(PDF) 1312:(PDF) 1285:(PDF) 1258:(PDF) 1123:(PDF) 1100:(PDF) 971:PoLUS 936:OCaml 842:diffs 799:DYMOS 605:DYMOS 532:Redis 462:PoLUS 309:valid 53:tuple 1446:ISBN 1333:help 1192:and 1148:and 1005:UNIX 857:SUSE 809:REPL 569:dead 460:and 1438:hdl 1430:doi 1398:doi 1112:doi 989:ELF 751:or 719:or 699:or 683:C++ 681:or 668:JVM 571:or 516:Tor 261:to 29:DSU 19:In 1824:: 1762:. 1738:. 1719:. 1686:. 1664:. 1621:. 1596:. 1570:. 1546:. 1521:. 1496:. 1454:. 1444:. 1436:. 1396:. 1384:41 1382:. 1378:. 1363:^ 1353:. 1324:: 1322:}} 1318:{{ 1297:^ 1287:. 1270:^ 1260:. 1245:^ 1221:^ 1108:22 1106:. 1102:. 723:. 613:Mo 609:Dy 547:, 526:, 522:, 518:, 514:, 510:, 506:, 23:, 1773:. 1748:. 1723:. 1704:. 1668:. 1631:. 1606:. 1581:. 1556:. 1531:. 1506:. 1482:. 1462:. 1440:: 1432:: 1404:. 1400:: 1357:. 1335:) 1331:( 1314:. 1201:. 1114:: 1001:C 977:C 679:C 617:S 607:( 448:. 436:) 429:P 425:, 420:t 417:i 414:n 411:i 403:( 382:) 375:P 371:, 365:( 345:) 338:P 334:, 331:) 325:( 322:S 319:( 295:) 288:P 284:, 281:) 275:( 272:S 269:( 249:) 246:P 243:, 237:( 209:P 188:) 181:P 177:, 166:( 146:) 143:P 140:, 134:( 114:P 74:) 71:P 68:, 62:( 27:(

Index

computer science
upgrading
compilers
tuple
UpStare
PoLUS
Ginseng
Kitsune and Ekiden
Ksplice
Ekiden
update safety check
Ginseng
vsftpd
OpenSSH
PostgreSQL
Tor
Apache
GNU Zebra
memcached
Redis
checkpointing
dynamic linking
persistence
backward-compatible
dynamic dead-code elimination
dead
unreachable code
memory footprint
redundant systems
checkpoint

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.