135

After installing Ubuntu Studio 12.04, I have found that it uses a low latency kernel.

I searched for an explanation and how to change back it to a real-time or generic one. However, it looks like this part of Linux hasn't been covered to explain the details.

Q: Why choose a low latency kernel over a generic or real-time one?

PS: I have already read the answers from this question and this post.

1
  • For future readers, I would highly recommend giving this paper a read. May 24, 2021 at 18:52

5 Answers 5

79

These are some simple guidelines provided to help you understand which kernel, and in which order, you should test to fit your use case.

  • If you do not require low latency for your system then please use the -generic kernel.
  • If you need a low latency system (e.g. for recording audio) then please use the -preempt kernel as a first choice. This reduces latency but doesn't sacrifice power saving features. It is available only for 64 bit systems (also called amd64).
  • If the -preempt kernel does not provide enough low latency for your needs (or you have an 32 bit system) then you should try the -lowlatency kernel.
  • If the -lowlatency kernel isn't enough then you should try the -rt kernel
  • If the -rt kernel isn't enough stable for you then you should try the -realtime kernel

Ubuntu Help Source

So it depends on what you will do with your studio distro. For most users needing fast end-user response time generic will just do fine, for others who need to do professional video editing where even a simple frame drop is unacceptable the real-time kernel is needed.

For a more exhaustive easy-to-understand blog post, read this link

4
  • 1
    I already read the previous article you posted. About the second, how much are those facts reliable?
    – Starx
    Apr 28, 2012 at 3:30
  • Well the tests mentioned there talks by themselves. If Ubuntu team have chosen Latency in the first place, it must be a reason to it. SO you wanted to know the differences, now you do. Problem solved ?
    – ubuntu fan
    Apr 28, 2012 at 3:50
  • 5
    No.. I dont think the problem is solved. If your answer does anything, it increases my curiosity more.
    – Starx
    Apr 28, 2012 at 4:09
  • 15
    Is any of this still true in 2015? The -preempt, -rt, and -realtime kernels no-longer exist
    – naught101
    Sep 21, 2015 at 23:29
65

I'm the author of the blogpost linked by ubuntu fan: http://sevencapitalsins.wordpress.com/2007/08/10/low-latency-kernel-wtf/

That blog post doesn't present any fact, it's only theory. It's the way it works, actually: the processor "stops" more frequently to see if there are some processes requiring immediate attention. That means that those processes will be executed before the others, so you won't skip frames when encoding, or have huge delay times between mouse clicks and enemy deaths. It doesn't mean that all processes will end sooner: actually the CPU is losing a bigger portion of its time deciding what process will be executed next, and doing the context switch. So the total execution time is longer, and that's why no one runs a preemptible kernel on webserver or database machines. But a preemptible 300Hz (or even 1000Hz) kernel is the best for gameservers.

But nowadays processors have many cores, so when there are few processes requiring attention they can easily be allocated on a different core rather than waiting for a core to take it.

(stackexchange requires me references/personal experience: I'm an electronic engineer, bloodthirsty noobgamer mantaining several gameservers at http://www.gamezoo.it ).

So, as a rule of thumb, I'd say: if your processor is a powerful number-crunching high-frequency quad-core AND you don't usually open tons of webpages while encoding/decoding/gaming (huh), you could just try the generic (or i686, or amd64 if they exist) kernel and have the highest possible throughput (i.e., the raw number-crunching the processor is able to do). If you experience problems (they should really be minor) or your machine is slightly less powerful than the top of the market, go for the -preempt.

If you're on a low-end machine that has only one or two cores, then try the -lowlatency. You could also try the -realtime, but you'll find that it tends to block processes until the "real-time" ones have finished their job. I believe the realtime kernel isn't the "vanilla" one, but has the CONFIG_PREEMPT_RT patch applied. I think that realtime kernels are only for those who have to build a single application on embedded systems, so usual desktop users shouldn't have real benefits because they usually run a fair number of applications at the same time.

Finally, the most relevant kernel options if you want to recompile your kernel yourself to have a low-latency desktop are:

PREEMPT=y

and:

CONFIG_1000_HZ=y

To add some powersaving you may check this one:

CONFIG_NO_HZ=y
2
  • I noticed you mention maintaining servers, I'm trying to figure out the best kernel for valve source dedicated server (CSGO specifically). most CS threads I find are related to goldsrc which needed 1000Hz kernel. With srcds, is lowlatency bad? if it doesn't matter I'll just stick to lowlatency as that's what I have right now (I isolate the cpu cores for 128 tick srcds servers as it doesn't really benefit from multi threading anyway). Apr 11, 2014 at 20:42
  • Useful to know thid tips, I will totally change to preempt. I'm not in such a hurry thay I want my kernel yo act like a filthy pirate.
    – userDepth
    Apr 7, 2016 at 13:53
8

I have this old laptop with dual AMD A6-4400M at 1600MHz, that I use sparingly when I'm out of the office, mainly to read email and browse casual web sites. There was something, possibly connected with software updates, which makes it unresponsive. Something like typing a dozen characters without seeing the first one. Often the widget asking whether I should force-quit a process.

After sudo apt-get install linux-lowlatency and reboot, it became smooth and responsive. (uname -r 5.0.0-20-lowlatency.) Wonderful, I should have switched years ago. Let me stress Seven's answer: unless you want to squeeze the max out of a number crunching server, go for the -preempt!

1
  • This was my hunch, and why I was searching this question. Exactly the answer I was looking for, thanks for confirming, I'll now try this out myself :D -- Also answer askubuntu.com/a/1244714/49478 was nice! Feb 7, 2021 at 16:21
7

There are three major performance parameters governing kernel optimization, one of which rarely gets discussed in context of the other two and almost never gets benchmarked. This has reduced and skewed our perception of performance:

  1. Throughput: What gets benchmarked and discussed by the media. A measure of how much data can make it through the processor in a given timeframe.
  2. Energy efficiency: What also often gets benchmarked; depending on how you measure it, how costly (in energy or heat) it is to process a certain amount of data or to keep a system running over a given period of time. This has implications for both battery life in laptops and the cost of running servers or other "always on" hardware.
  3. Latency: Almost never gets benchmarked, but just as important. It is a measure of the average amount of time it takes for a signal or data to travel through a path, usually measured in milliseconds. The word "jitter" describes variations in latency over time, and is a sub-component of latency performance.

This is a classic case of "here's 3 options, pick any two." You can have throughput and energy efficiency, but will sacrifice latency. You can have throughput and low latency, but will sacrifice energy efficiency. You can have low latency and energy efficiency, but that will sacrifice throughput.

One example of this tradeoff is race-to-sleep: https://en.wikipedia.org/wiki/Race_to_sleep (no longer exists for some reason, but https://www.quora.com/What-is-race-to-halt-strategy-to-make-a-processor-energy-efficient does). Unfortunately, it still takes CPUs several ms to "wake up" from various levels of sleep states (the deeper the sleep, the longer it takes to wake up), which makes CPU frequency scaling horrible for latency performance and probably one of the single biggest offenders. This is why even Mac OS systems benefit immensely from disabling CPU frequency scaling to prevent buffer overruns and underruns (a buffer overrun is when a process takes too long to finish and reroute, and so the last bit gets discarded as the buffer gets refilled; whereas an underrun is a failure to sufficiently fill the buffer in time for processing. both are commonly called "xruns" and indicate potential data loss)

Another is logical cores and symmetric multi-threading, which is a subset of "race to sleep" by using all cores more efficiently, but at the cost of increasing the time it takes for any individual process to complete. This is also good for energy efficiency and throughput, but not latency, which is concerned with how reliably and quickly individual "mission critical" tasks can complete, not a sum total group of tasks.

-generic: for any use case that does not deal with latency and the guaranteed routing of a certain amount of information into the processor and out to its destination. Generic in general provides greatest throughput performance as well as energy efficiency, but deprioritizes latency

the -lowlatency, -rt and -realtime kernels provided varying shades of increased attention to latency, with increasing sacrifice or deprioritization of throughput and/or energy efficiency. Use cases determine which are most appropriate for which circumstances, and these aren't the only choices. For example, there is also https://liquorix.net/ which claims to be optimized for most common usage scenarios by making small sacrifices in throughput for relatively large gains in latency performance.

There are components of this question that confusingly overlap with other questions, and parts of this question are becoming obsolete as the performance distinctions between kernel lines are disappearing. For example, the -generic kernel has included many low latency optimizations (such as PREEMPT) that make the other specialized kernels even more specialized. It's hard to give specific numbers, but on my system, -generic can now handle latencies down to about 20ms with some reliability (minimal or no buffer overruns or underruns).

I honestly think this fragmentation exists from

  1. a byproduct of open source software, where you get forking of kernel lines and software generally to optimize them for specific use cases (yes, "-generic" is a specific use case, just one that specifically happens to cover most use cases :) and
  2. Almost completely ignoring the importance of low latency performance tuning to the -generic user's experience in both Linux and Windows paradigms.

Mac OS X is different, and you can read why here: https://www.cse.unsw.edu.au/~cs9242/10/lectures/09-OSXAudiox4.pdf (it was political and economic, not genius and vision!). The result was a slight tradeoff in throughput performance for a system that handles latency issues better. And thus Mac OS X -- and its iOS derivative -- ended up cornering the market on digital multimedia production. With one kernel. And non-multimedia users don't complain about Mac OS X's consistently lower throughput performance, because no one actually cares about 29sec vs 30sec to transcode a file, or 4.75sec vs 5sec to start a program (even the benchmarkers and "performance freaks" don't notice these sorts of discrepancies on a daily, real-world basis), and everyone cares about whether the UX stutters and audio glitches out. It's a psychological thing related to the importance of latency and responsiveness, not a throughput performance thing (which is the only thing the benchmark wars consider), and up to this point only Mac OS X really gave it serious consideration on a whole OS design.

https://liquorix.net/ may be more in line with Mac's kernel in terms of its tuned performance priorities (I am confirming that now). And that is the direction the -generic kernel is headed, I believe (and hope). Which will be good enough for 90-some percent of users, except those on either extreme who TRULY need a. All the throughput they can get or b. extremely low glitch-free latency and jitter. And for those cases, there will always be some sort of custom kernel or kernels. I believe NASA rolls their own, but I could be wrong :)

2
4

From the document cited above (http://www.versalogic.com/mediacenter/whitepapers/wp_linux_rt.asp)

  1. a soft real-time system will give reduced average latency but not a guaranteed maximum response time.
  2. A hard real-time system meet the desired deadlines at all times (100 percent), even under a worst-case system load.
  3. According to Yaghmour [4], "Real-time deals with guarantees, not with raw speed."

The article says for hard realtime kernel responsiveless or time bound is most important property so sometime they delay non critical activity that lead to delay but for lowlatency or other soft real time kernel try to reduce general latency which helps in most of case. Due to reduced latency the system seem to be fast. Read the article carefully.

1
  • That’s true but we need to know which kernel variant matches which real-time system “hardness”.
    – Melebius
    Nov 10, 2015 at 13:57

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .