Ksplice Promises Linux Kernel Updates Without Reboots

One of the problem with operating system updates is that you often need to reboot the system. While this is nothing but a minor nuisance for us desktop users, it’s a bigger problem when it comes to servers. Ksplice is a technology that allows Linux kernel patches to be applied without actually restarting the kernel.

Ksplice is actually quite an intricate piece of technology, and since I’m simply not qualified enough to understand and explain it all, I’ll leave it to Ars to explain:

To generate a live update, it compares compiled object code from before and after a source patch is applied, a technique that the developers refer to as “pre-post differencing.” They take advantage of the -ffunction-sections and -fdata-sections options of the C compiler to eliminate some variance between the pre and post object code.

To determine where the symbols reside in memory, they use a method that they describe as run-pre matching, which compares the “pre” object code to the code that is running in memory. This is done with a special Ksplice kernel module. The live updates generated by Ksplice inject new functions into memory while the kernel is running and modify the old functions so that their path of execution will be redirected to the new versions.

The developers behind Ksplice claim that the process interrupts system operation for only 0.7 milliseconds, which is pretty impressive. Most kernel patches do not need to be adapted to work with Ksplice (88%, limited to x86), with the remainder (12%) needing 1-12 lines of code in order to work. The latter category consists of patches that perform semantic changes to kernel data structures.

Ksplice is not some vague proposal – it actually works right now, and you can test it out on Ubuntu via Ksplice Uptrack.

32 Comments

  1. 2009-07-15 4:23 pm
    • 2009-07-15 4:36 pm
      • 2009-07-15 5:48 pm
        • 2009-07-16 1:09 am
      • 2009-07-15 10:20 pm
    • 2009-07-15 5:48 pm
      • 2009-07-15 6:17 pm
      • 2009-07-16 9:31 am
        • 2009-07-16 12:44 pm
  2. 2009-07-15 4:23 pm
    • 2009-07-15 4:28 pm
    • 2009-07-15 4:28 pm
  3. 2009-07-15 5:24 pm
    • 2009-07-15 5:47 pm
  4. 2009-07-15 5:58 pm
    • 2009-07-15 7:50 pm
      • 2009-07-16 1:12 am
        • 2009-07-16 12:33 pm
          • 2009-07-17 1:20 am
    • 2009-07-15 10:22 pm
      • 2009-07-15 10:33 pm
    • 2009-07-16 7:06 am
  5. 2009-07-15 6:15 pm
  6. 2009-07-15 6:19 pm
    • 2009-07-15 7:05 pm
    • 2009-07-15 9:39 pm
      • 2009-07-16 12:31 am
    • 2009-07-15 10:36 pm
      • 2009-07-16 7:10 am
  7. 2009-07-16 11:46 am
  8. 2009-07-17 2:35 am