No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)

By: dmcq (dmcq.delete@this.fano.co.uk), January 5, 2020 6:33 am
Room: Moderated Discussions
Linus Torvalds (torvalds.delete@this.linux-foundation.org) on January 4, 2020 12:31 pm wrote:
> Malte Skarupke (malteskarupke.delete@this.web.de) on January 4, 2020 11:22 am wrote:
> > Case 3 is the same situation, thread C is still not being run
> > even though fifteen other threads are calling yield().
>
> The problem with that is "yield" is pretty much undefined. The definition of it is literally
> about single queue of a real-time behavior with a real-time scheduler with priorities.
>
> But that "definition" has almost nothing to do with actual usage. There are various random
> people who use it, and some might use it for locking, while some use it for other things.
>
> What you want to use it for is "schedule the right process". But you don't even
> know what the right process is, or if you do you don't tell the system (because sched_yield()
> literally doesn't have that interface), so the kernel has to guess.
>
> In some cases, "sched_yield()" is basically used by processes that say "I'm CPU-intensive, but I'm not important
> for latency, and I don't want to cause problems for others". You'll find various random GUI programs doing
> that because they are threaded, and one thread does things like update the screen, while another thread does
> calculations. The calculation loop (which is still important, just not latency-critical) might have "sched_yield()
> in it as a cheap way of saying "maybe there's a more important UI event going on".
>
> In other cases, it's a performance optimization, where somebody says "I have done my part of the work and
> written it out, now I'm yielding because there's another user that is likely to want to use it, and that other
> user is actually the more heavy CPU hog and should run before I start generating more data for it".
>
> And in others, it's because they are actually using real-time scheduling - perhaps on dedicated CPU doing the
> true Hard real-time kinds of things - and depend on the FIFO definition within their priority group.
>
> That's the defined usage, but even that is really defined only in the traditional UP sense
> of "there is one process running at a time, and we have one single queue of them".
>
> End result: sched_yield() is basically historical garbage. It's often literally wrong even for the defined
> usage
because times have moved on from that whole "we run one thing at a time" long long ago. If your
> RT system actually has multiple concurrent threads (as opposed to being limited to a dedicated CPU) it's
> not really all that well-defined even there. But at least there you can still pretend it is.
>
> So what happens? Pretty much every single use of sched_yield() is some random person
> doing something wrong, and they have added it randomly to their load based on the random
> timing behavior on their machine. They may even have done extensive timings on a benchmark
> of their load in order to find exactly where they should yield.
>
> And then the system topology changes, and you have a hundred other sched_yield() users that
> use it for what they tuned things for, and their load behavior is very different indeed...
>
> In other words, if you think your locking should depend on 'sched_yield()', you're simply wrong.
>
> What do you think "sched_yield()" should do in a NUMA environment where your have 'N' NUMA
> domains, and each NUMA domain has 'M' cores? Perhaps totalling hundreds (or even thousands)
> of cores in total, some running your threads, some running something else entirely?
>
> And the process you want it to wake up is on another core entirely, possibly in a different
> NUMA domain, but that other core is right now running something else? Most people who use "sched_yield()"
> expect it to be a very light-weight operation. You said so yourself in your blog post, since
> you timed it. They expect it to be a light-weight operation exactly because they (incorrectly)
> think it's trivial, and they have literally tuned their load for that case.
>
> In fact, the most probable historical use of "sched_yield()" is because they wrote the
> code twenty years ago, really only did have one single CPU, and they had latency issues
> and did that whole "I want to make sure that if there's a UI process, it gets to run".
>
> But even a regular desktop machine today might have 8 cores and 16 threads, and now one of them has a thread
> that says "Hmm, I have nothing to do, but I can't sleep, so I want to randomly yield to somebody else".
>
> Do you think, for example, that the system should do a very expensive "check every single CPU thread to
> see if one of them has a runnable thread but is running something else, and break the CPU affinity of that
> thread and bring it to this CPU because I have a thread that says 'I'm not important' right now".
>
> So yes, that other thread isn't running right now, but bringing it to this
> CPU might slow it down enormously because now all the caches are gone because
> all the historical data it was working on is in another NUMA domain.
>
> But that would actually be the optimal thing for your locking case. You literally want to find that
> special other runnable thread (but not really any thread - you want to magically the one that isn't
> in a loop doing "yield" and wasting CPU time) that might have run on another CPU, and say "I want 'yield'
> to waste resources to move that thread to my core now, because my core thinks it's done".
>
> And you want to do that regardless of what anybody else used sched_yield() for?
>
> See how simplistic - and self-centered - your expectation is?
>
> And all because you did locking fundamentally wrong.
>
> Yes, it turns out that certain simple schedulers get exactly the behavior you want. The best way
> to get exactly your behavior is to have a single run-queue for the whole system, and make 'sched_yield()'
> always put the thread at the back of that run-queue, and pick the front one instead.
>
> IOW, for your bad, simplistic, and incorrect locking, the optimal scheduler is a stupid one
> that does not try to take any kind of CPU cache placement into account, does not try to at all
> optimize the run-queues to be thread-local, and just basically treats the scheduling decision
> as if we were still running one single CPU core, and that CPU had no cache locality issues.
>
> Guess what? The scheduler that your benchmark thinks is "optimal" is likely the worst of the bunch
> in a lot of other circumstances. But you have a simple benchmark, you have a clear and simple world-view,
> and you think that because of that, your benchmark is meaningful and not giving random numbers, but
> meaningful numbers where low numbers of your benchmark means that the scheduler is "good".
>
> When pretty much exactly the reverse is the case, because your world-view was
> not "simple", it was "simplistic" - to the point of being actively incorrect.
>
> See what I'm trying to explain here?
>
> The fact is, doing your own locking is hard. You need to really understand the issues, and you need to not
> over-simplify your model of the world to the point where it isn't actually describing reality any more.
>
> And no, any locking model that uses "sched_yield()" is simply garbage. Really. If you use
> "sched_yield()" you are basically doing something random. Imagine what happens if you use
> your "sched_yield()" for locking in a game, and somebody has a background task that does
> virus scanning, updates some system DB, or does pretty much anything else at the time?
>
> Yeah, you just potentially didn't just yield cross-CPU, you were yiedling
> to something else entirely that has nothing to do with your locking.
>
> sched_yield() is not acceptable for locking. EVER. Not unless you're
> en embedded system running a single load on a single core.
>
> If I haven't convinced you of that by now, I don't know what I can say.
>
> Good locking simply needs to be more directed than what "sched_yield()" can ever give you outside of a UP
> system without caches. It needs to actively tell the system what you're yielding to (and optimally it would
> also tell the system about whether you care about fairness/latency or not - a lot of loads don't).
>
> But that's not "sched_yield()" - that's something different. It's generally something like std::mutex,
> pthread_mutex_lock(), or perhaps a tuned thing that uses an OS-specific facility like "futex", where
> you do the nonblocking (and non-contended) case in user space using a shared memory location, but when
> you get contention you tell the OS what you're waiting for (and what you're waking up).
>
> Btw, locking can be simple too. If you do a lot of work, and the locking is something "occasional",
> you can use things like just passing a token over a pipe (or even a network connection) as your locking
> mechanism. Yes, the individual locking events end up being somewhat expensive, and it doesn't work
> very well at all for what is one very common case - no locking really needed at all because there's
> really only one active thread, but it can actually be a very simple and effective model.
>
> It turns out people get even that simple model wrong (passing tokens around in a pipe
> is exactly what the GNU make "jobserver" code does as a kind of "counting semaphore"
> implementation), and we found a bug in that user-space jobserver locking just last
> month because it got exposed when we tried to make the kernel more efficient.
>
> But at least that was a conceptually very simple model for doing locking: you create what is
> basically a counting semaphore by initialize a pipe with N characters (where N is your parallelism
> for the semaphore), and then anybody who wants to get the lock does a one-byte read() call
> and anybody who wants to release the lock writes a single byte back to the pipe.
>
> Simple, effective, and works even across processes. It doesn't even perform all that horribly
> because read/write is pretty simple in the end - but it's a system call for each lock/unlock,
> which is totally unacceptable if you compare to something like a shared memory location
> that you can just use a single atomic CPU operation on, of course.
>
> But again, depending on what your locking requirements are, that pipe (or even TCP
> socket) may actually be the right thing. It has advantages in that it can work in
> situations where that "we're all threads that share the same memory" isn't true.
>
> And it can actually out-perform your sched_yield() model.
>
> (Side note: the optimization I did in the kernel was to make the wakeup for a pipe write-to-read operation
> really be directed to just one of the waiting writers. And it turned out that the GNU make jobserver
> had a race that means that sometimes it would lose tokens for a while. And the kernel doing that nice
> targeted wakeup ended up making that race trigger all the time. So what currently happens is that if
> you have one writer and ten readers of the pipe, that one writer will wake up all the readers. But
> that will still work perfectly well for your benchmark, because you didn't overcommit a lot of people
> locking, I think, so you basically don't much see the worst-case thundering-herd issues).
>
> So sadly, I can report that the pipe-based locking isn't fair, and won't
> have great latencies for that reason, because we're working around a bug
> in user space where that fairness caused horrendous performance problems.
>
> Dealing with reality is hard. It sometimes means that you need to make your mental model for how locking
> needs to work a lot more complicated. And sometimes it means that you need to keep your OS kernel doing
> stupid things because people inadvertently depended on the timing of said stupid things.
>
> Which, as mentioned, is a problem for sched_yield() too. Lots of users, all of which are basically buggy-by-definition,
> and all you can do is a bad half-arsed job of trying to make it "kind of work".
>
> Reality is messy.
>
> Linus

Gotta agree with all that. In fact having worked for a while on a TP system I tend to the fascist side on enforcing proper handling of locks. You want the system to know if a process is holding a lock and what other processes are waiting. This will enable it to up the priority if needed and cope with errors better. The only pure yield like operation that should ever be done is deep in the kernel when the only worthwhile thing to do is idle waiting for an event.
< Previous Post in ThreadNext Post in Thread >
TopicPosted ByDate
Nuances related to Spinlock implementation and the Linux SchedulerBeastian2020/01/03 11:46 AM
  Nuances related to Spinlock implementation and the Linux SchedulerMontaray Jack2020/01/03 12:14 PM
    Nuances related to Spinlock implementation and the Linux SchedulerMontaray Jack2020/01/03 12:49 PM
  No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Linus Torvalds2020/01/03 06:05 PM
    No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Beastian2020/01/04 11:03 AM
    No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Malte Skarupke2020/01/04 11:22 AM
      No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Linus Torvalds2020/01/04 12:31 PM
        No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)dmcq2020/01/05 06:33 AM
        No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)smeuletz2020/01/06 01:05 AM
          Do not blame others for your unfinished jobsmeuletz2020/01/06 01:08 AM
            Where did all the experts come from? Did Linus get linked? (NT)anon2020/01/06 03:27 AM
              PhoronixGabriele Svelto2020/01/06 04:04 AM
                PhoronixSalvatore De Dominicis2020/01/06 06:59 AM
            Do not blame anyone. Please give polite, constructive criticismChester2020/01/06 08:17 AM
              Do not blame anyone. Please give polite, constructive criticismsmeuletz2020/01/06 09:11 AM
                Do not blame anyone. Please give polite, constructive criticismChester2020/01/06 09:54 AM
                  Do not blame anyone. Please give polite, constructive criticismsmeuletz2020/01/06 10:33 AM
                    Do not blame anyone. Please give polite, constructive criticismLinus Torvalds2020/01/06 11:58 AM
                      Do not blame anyone. Please give polite, constructive criticismGionatan Danti2020/01/06 12:13 PM
                        Do not blame anyone. Please give polite, constructive criticismLinus Torvalds2020/01/06 12:28 PM
                          Do not blame anyone. Please give polite, constructive criticismGionatan Danti2020/01/06 12:52 PM
                          Do not blame anyone. Please give polite, constructive criticismJohn Scott2020/01/10 07:48 AM
                          Do not blame anyone. Please give polite, constructive criticismsupernovas2020/01/10 09:01 AM
                            Do not blame anyone. Please give polite, constructive criticismLinus Torvalds2020/01/10 11:45 AM
                      Do not blame anyone. Please give polite, constructive criticismsmeuletz2020/01/07 03:07 AM
                        Do not blame anyone. Please give polite, constructive criticismSimon Farnsworth2020/01/07 12:40 PM
                        Do not blame anyone. Please give polite, constructive criticismEtienne2020/01/08 01:08 AM
                          Do not blame anyone. Please give polite, constructive criticismsmeuletz2020/01/08 01:18 AM
                            Do not blame anyone. Please give polite, constructive criticismMichael S2020/01/08 01:56 AM
                      Not deprecating irrelevant API: sched_yield() on quantum computers?smeuletz2020/01/07 03:34 AM
                      Do not blame anyone. Please give polite, constructive criticismmagicalgoat2020/01/09 04:58 PM
                        Do not blame anyone. Please give polite, constructive criticismLinus Torvalds2020/01/09 09:37 PM
                          Do not blame anyone. Please give polite, constructive criticismAnon32020/01/10 03:40 PM
                  Do not blame anyone. Please give polite, constructive criticismrwessel2020/01/06 09:04 PM
                Do not blame anyone. Please give polite, constructive criticismLinus Torvalds2020/01/06 11:11 AM
                  Do not blame anyone. Please give polite, constructive criticismGabriele Svelto2020/01/06 01:36 PM
        No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Howard Chu2020/01/09 10:39 PM
          No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Linus Torvalds2020/01/10 11:30 AM
      No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)president ltd2020/01/04 01:44 PM
    No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Jörn Engel2020/01/04 11:34 AM
      No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Emil Briggs2020/01/04 12:13 PM
        No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Jörn Engel2020/01/04 12:46 PM
      No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Linus Torvalds2020/01/04 01:24 PM
        No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Linus Torvalds2020/01/04 02:54 PM
          No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Jörn Engel2020/01/05 09:21 AM
            No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Linus Torvalds2020/01/05 11:42 AM
              FUTEX_LOCK_PI performanceJörn Engel2020/01/05 01:45 PM
                FUTEX_LOCK_PI performanceLinus Torvalds2020/01/05 03:30 PM
                  FUTEX_LOCK_PI performanceJörn Engel2020/01/05 06:03 PM
                    FUTEX_LOCK_PI performanceRichardC2020/01/06 06:11 AM
                      FUTEX_LOCK_PI performanceLinus Torvalds2020/01/06 12:11 PM
                  FUTEX_LOCK_PI performanceGabriele Svelto2020/01/06 02:20 AM
                    FUTEX_LOCK_PI performancexilun2020/01/06 04:19 PM
                    FUTEX_LOCK_PI performanceKonrad Schwarz2020/01/13 03:36 AM
                      FUTEX_LOCK_PI performanceGabriele Svelto2020/01/13 03:53 AM
                      FUTEX_LOCK_PI performanceSimon Farnsworth2020/01/13 04:36 AM
                      FUTEX_LOCK_PI performancerwessel2020/01/13 05:22 AM
    No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)rainstar2020/01/04 09:58 PM
      No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Charles Ellis2020/01/05 03:00 AM
        No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Richard2020/01/05 08:58 AM
          It's hard to separateMichael S2020/01/05 10:17 AM
            It's hard to separaterainstared2020/01/06 12:52 AM
              It's hard to separateDavid Kanter2020/01/08 08:27 AM
                It's hard to separateAnon2020/01/08 08:37 PM
                  It's hard to separatenone2020/01/08 10:50 PM
                    It's hard to separateAnon2020/01/09 12:41 AM
                      It's hard to separatenone2020/01/09 02:54 AM
                        It's hard to separategallier22020/01/09 03:19 AM
                          It's hard to separateAnon2020/01/09 04:12 AM
                            It's hard to separateAdrian2020/01/09 04:24 AM
                              It's hard to separategallier22020/01/09 04:58 AM
                                It's hard to separateAdrian2020/01/09 06:09 AM
                            It's hard to separategallier22020/01/09 04:42 AM
                        It's hard to separateAdrian2020/01/09 03:41 AM
                        It's hard to separateAnon2020/01/09 04:24 AM
                          It's hard to separategallier22020/01/09 05:07 AM
                          It's hard to separateDavid Hess2020/01/09 08:27 AM
                            It's hard to separateAdrian2020/01/09 09:15 AM
                              It's hard to separateDavid Hess2020/01/09 09:45 AM
                                It's hard to separateAnon2020/01/09 10:15 AM
                                  It's hard to separateAdrian2020/01/09 10:51 AM
                                    It's hard to separateBrett2020/01/09 12:49 PM
                                      Zilog Z8000Brett2020/01/10 09:53 PM
                                        Zilog Z8000David Hess2020/01/11 06:06 AM
                                          Zilog Z8000Adrian2020/01/11 06:29 AM
                                            Zilog Z8000David Hess2020/01/11 07:45 AM
                                              Zilog Z8000Ricardo B2020/01/11 07:04 PM
                                                Zilog Z8000Ronald Maas2020/01/12 09:47 AM
                                                  Zilog Z8000Ricardo B2020/01/12 11:15 AM
                                                    Zilog Z8000Anon2020/01/12 10:34 PM
                                                      Zilog Z8000Jose2020/01/13 12:23 AM
                                                        Zilog Z8000gallier22020/01/13 12:42 AM
                                                          Zilog Z8000Jose2020/01/13 09:04 PM
                                                            Zilog Z8000rwessel2020/01/13 09:40 PM
                                                              Zilog Z8000David Hess2020/01/13 10:35 PM
                                                                Zilog Z8000Simon Farnsworth2020/01/14 02:56 AM
                                                                  Zilog Z8000Michael S2020/01/14 03:09 AM
                                                                    Zilog Z8000Simon Farnsworth2020/01/14 04:06 AM
                                                                      Zilog Z8000David Hess2020/01/14 09:22 AM
                                                                  Zilog Z8000David Hess2020/01/14 09:15 AM
                                                                Zilog Z8000rwessel2020/01/14 03:12 PM
                                                                  286 16 bit I/OTim McCaffrey2020/01/15 10:25 AM
                                                                    286 16 bit I/ODavid Hess2020/01/15 08:17 PM
                                                      Zilog Z8000Ricardo B2020/01/13 10:52 AM
                                                        Zilog Z8000Anon2020/01/13 11:25 AM
                                                          Zilog Z8000David Hess2020/01/13 05:38 PM
                                                            Zilog Z8000rwessel2020/01/13 06:16 PM
                                                              Zilog Z8000David Hess2020/01/13 06:47 PM
                                                          Zilog Z8000someone2020/01/14 06:54 AM
                                                            Zilog Z8000Anon2020/01/14 07:31 AM
                                                          Zilog Z8000Ricardo B2020/01/14 05:29 PM
                                                  Zilog Z8000Simon Farnsworth2020/01/15 02:26 AM
                                                    Zilog Z8000Tim McCaffrey2020/01/15 10:27 AM
                                                      Zilog Z8000Simon Farnsworth2020/01/15 01:32 PM
                                                    Zilog Z8000Ricardo B2020/01/15 02:47 PM
                                                      Zilog Z8000Anon2020/01/15 03:08 PM
                                                        Zilog Z8000Ricardo B2020/01/15 04:16 PM
                                                          Zilog Z8000Anon2020/01/15 04:31 PM
                                                            Zilog Z8000Ricardo B2020/01/15 05:46 PM
                                                              Zilog Z8000Anon2020/01/15 06:04 PM
                                                                Zilog Z8000David Hess2020/01/15 08:53 PM
                                                                Zilog Z8000Ricardo B2020/01/16 06:27 PM
                                                                  Zilog Z8000Anon2020/01/16 07:33 PM
                                                                    Zilog Z8000Ronald Maas2020/01/16 11:05 PM
                                                                      Zilog Z8000Anon2020/01/17 07:15 AM
                                                                    Zilog Z8000Ricardo B2020/01/17 01:59 PM
                                                                      Zilog Z8000Anon2020/01/17 06:40 PM
                                                                        Zilog Z8000Ricardo B2020/01/18 07:42 AM
                                                                    Zilog Z8000David Hess2020/01/18 06:12 AM
                                                            Zilog Z8000David Hess2020/01/15 08:49 PM
                                                          Zilog Z8000gallier22020/01/15 11:57 PM
                                                      Zilog Z8000Simon Farnsworth2020/01/16 01:30 AM
                                                        IBM PC successEtienne2020/01/16 05:42 AM
                                                        Zilog Z8000Ricardo B2020/01/16 06:32 PM
                                                          Zilog Z8000Brett2020/01/17 12:38 AM
                                                            Zilog Z8000David Hess2020/01/18 06:28 AM
                                                          Zilog Z8000David Hess2020/01/18 06:22 AM
                                                    Zilog Z8000David Hess2020/01/15 08:30 PM
                                            Zilog Z8000Maxwell2020/01/11 08:07 AM
                                              Zilog Z8000David Hess2020/01/11 08:40 AM
                                                Zilog Z8000Maxwell2020/01/11 09:08 AM
                                                  Zilog Z8000Ricardo B2020/01/11 07:42 PM
                                                    8086 does NOT have those addressing modesDevin2020/01/12 01:13 PM
                                                      8086 does NOT have those addressing modesRicardo B2020/01/12 05:46 PM
                                                        8086 does NOT have those addressing modesAnon2020/01/13 04:10 AM
                                                          8086 does NOT have those addressing modesgallier22020/01/13 05:07 AM
                                                            8086 does NOT have those addressing modesAnon2020/01/13 06:09 AM
                                                              8086 does NOT have those addressing modesRicardo B2020/01/13 10:48 AM
                                                          8086 does NOT have those addressing modesMichael S2020/01/13 06:40 AM
                                                            Zilog Z8000Ronald Maas2020/01/13 08:44 AM
                                                              Zilog Z8000Anon2020/01/13 03:32 PM
                                                          8086 does NOT have those addressing modesRicardo B2020/01/13 10:24 AM
                                                            8086 does NOT have those addressing modesrwessel2020/01/13 02:59 PM
                                                              8086 does NOT have those addressing modesDavid Hess2020/01/13 06:12 PM
                                                                8086 does NOT have those addressing modesrwessel2020/01/13 06:28 PM
                                                                  8086 does NOT have those addressing modesDavid Hess2020/01/13 06:51 PM
                                                          8086 does NOT have those addressing modesDavid Hess2020/01/13 05:55 PM
                                            Zilog Z8000rwessel2020/01/11 12:26 PM
                                              Zilog Z8000Brett2020/01/11 02:16 PM
                                                Zilog Z8000rwessel2020/01/11 07:20 PM
                                                  Zilog Z8000Brett2020/01/12 12:02 PM
                                                    Zilog Z8000rwessel2020/01/12 09:06 PM
                                                      Zilog Z8000Brett2020/01/12 10:02 PM
                                                    Zilog Z8000James2020/01/13 05:12 AM
                                              Zilog Z8000Adrian2020/01/11 11:38 PM
                                                PDP-11Michael S2020/01/12 01:33 AM
                                                Zilog Z8000rwessel2020/01/12 06:01 AM
                                              Zilog Z8000Ronald Maas2020/01/12 10:03 AM
                                            Zilog Z8000Konrad Schwarz2020/01/13 03:49 AM
                                              Zilog Z8000Adrian2020/01/13 11:38 PM
                                                Zilog Z8000konrad.schwarz2020/01/15 04:50 AM
                                                  Zilog Z8000Adrian2020/01/15 10:24 PM
                                    It's hard to separateDavid Hess2020/01/11 06:08 AM
                                  It's hard to separateDavid Hess2020/01/11 06:11 AM
                                It's hard to separateAdrian2020/01/09 11:16 AM
                                  It's hard to separateDavid Hess2020/01/11 06:17 AM
                                It's hard to separategallier22020/01/10 12:11 AM
                                  It's hard to separatenone2020/01/10 01:58 AM
                        It's hard to separaterwessel2020/01/09 07:00 AM
                        It's hard to separateDavid Hess2020/01/09 08:10 AM
                          It's hard to separaterwessel2020/01/09 08:51 AM
                  It's hard to separateAdrian2020/01/08 10:58 PM
                    It's hard to separaterwessel2020/01/09 06:31 AM
                      It's hard to separateAdrian2020/01/09 06:44 AM
                    It's hard to separateDavid Hess2020/01/09 08:37 AM
                      It's hard to separatenone2020/01/09 09:34 AM
                  Are segments so bad?Paul A. Clayton2020/01/09 02:15 PM
                    Yes, they are terrible (NT)Anon2020/01/09 02:20 PM
                    Are segments so bad?Adrian2020/01/09 11:49 PM
                      Are segments so bad?Etienne2020/01/10 01:28 AM
                        Are segments so bad?gallier22020/01/10 01:37 AM
                          Are segments so bad?Adrian2020/01/10 02:19 AM
                            Are segments so bad?Adrian2020/01/10 03:27 AM
                              Are segments so bad?Etienne2020/01/10 03:41 AM
                        Are segments so bad?Adrian2020/01/10 02:05 AM
                          Are segments so bad?gallier22020/01/10 02:13 AM
                      Are segments so bad?Anon32020/01/10 10:37 AM
                        Are segments so bad?Adrian2020/01/10 10:47 AM
                          Are segments so bad?Brendan2020/01/11 12:43 AM
                      Are segments so bad?Anon2020/01/10 05:51 PM
                        Are segments so bad?Adrian2020/01/11 12:05 AM
                          Are segments so bad?Jukka Larja2020/01/11 07:20 AM
                            Are segments so bad?Brendan2020/01/11 09:14 AM
                              Are segments so bad?Jukka Larja2020/01/11 08:15 PM
                                Are segments so bad?Brendan2020/01/11 10:15 PM
                                  Are segments so bad?Jukka Larja2020/01/12 03:18 AM
                                  Are segments so bad?anon2020/01/12 11:30 AM
                                    Are segments so bad?Brendan2020/01/12 09:19 PM
                                      the world sucks worse than you're aware ofMichael S2020/01/13 12:50 AM
                                        the world sucks worse than you're aware ofBrendan2020/01/13 02:56 AM
                                        the world sucks worse than you're aware ofGabriele Svelto2020/01/13 03:46 AM
                                      Are segments so bad?Jukka Larja2020/01/13 06:41 AM
                                        Are segments so bad?Brendan2020/01/13 07:21 AM
                                          Are segments so bad?Jukka Larja2020/01/13 08:43 AM
                                            Are segments so bad?Brendan2020/01/13 12:02 PM
                                              Are segments so bad?Anne O. Nymous2020/01/13 12:22 PM
                                                Are segments so bad?Brendan2020/01/13 01:50 PM
                                                  actor of around 200?Michael S2020/01/14 02:58 AM
                                                  Not overcomitting leads to more OOMs, not lessGabriele Svelto2020/01/14 11:50 AM
                                                    Not overcomitting leads to more OOMs, not lessBrendan2020/01/14 12:40 PM
                                                      Not overcomitting leads to more OOMs, not lessGabriele Svelto2020/01/15 02:17 AM
                                                        Not overcomitting leads to more OOMs, not lessAnon2020/01/15 03:43 AM
                                                          Not overcomitting leads to more OOMs, not lessGabriele Svelto2020/01/15 04:09 AM
                                                            Not overcomitting leads to more OOMs, not lessAnon2020/01/15 04:16 AM
                                                              Not overcomitting leads to more OOMs, not lessGabriele Svelto2020/01/15 05:58 AM
                                                                Not overcomitting leads to more OOMs, not lessAnon2020/01/15 08:08 AM
                                                                  Not overcomitting leads to more OOMs, not lessGabriele Svelto2020/01/16 03:05 AM
                                                        Not overcomitting leads to more OOMs, not lessMichael S2020/01/15 03:48 AM
                                                          Not overcomitting leads to more OOMs, not lessGabriele Svelto2020/01/15 04:10 AM
                                                            Not overcomitting leads to more OOMs, not lessMichael S2020/01/15 07:13 AM
                                                              Not overcomitting leads to more OOMs, not lessJukka Larja2020/01/15 07:46 AM
                                                        Not overcomitting leads to more OOMs, not lessJukka Larja2020/01/15 05:08 AM
                                                          Thanks for the info (NT)Gabriele Svelto2020/01/15 06:00 AM
                                                      Not overcomitting leads to more OOMs, not lessLinus Torvalds2020/01/15 11:30 AM
                                                        OOM killer complainsAnon2020/01/15 11:44 AM
                                                          OOM killer complainsanon2020/01/15 03:26 PM
                                                        Not overcomitting leads to more OOMs, not lessBrendan2020/01/16 06:26 AM
                                                          Not overcomitting leads to more OOMs, not lessLinus Torvalds2020/01/16 09:17 AM
                                                            Not overcomitting leads to more OOMs, not lessLinus Torvalds2020/01/16 09:48 AM
                                                              Not overcomitting leads to more OOMs, not lessDoug S2020/01/16 02:41 PM
                                                                Not overcomitting leads to more OOMs, not lessDoug S2020/01/16 02:44 PM
                                                Are segments so bad?rwessel2020/01/13 03:11 PM
                                              Are segments so bad?Jukka Larja2020/01/14 06:37 AM
                                                Are segments so bad?Brendan2020/01/14 07:48 AM
                                                  Are segments so bad?Jukka Larja2020/01/14 10:13 AM
                                                    Are segments so bad?Brendan2020/01/14 01:30 PM
                                                      Are segments so bad?Brett2020/01/14 09:13 PM
                                                      Are segments so bad?Jukka Larja2020/01/15 06:04 AM
                                                  Are segments so bad?Gabriele Svelto2020/01/15 02:35 AM
                                            Specifying cost of dropping pagesPaul A. Clayton2020/01/13 02:00 PM
                                              Specifying cost of dropping pagesrwessel2020/01/13 03:19 PM
                                                Specifying cost of dropping pagesGabriele Svelto2020/01/15 02:23 AM
                                          Are segments so bad?anon2020/01/14 01:15 AM
                                            Are segments so bad?Brendan2020/01/14 05:13 AM
                                          Are segments so bad?Gabriele Svelto2020/01/14 11:57 AM
                                            Are segments so bad?Brendan2020/01/14 01:58 PM
                                              Are segments so bad?Gabriele Svelto2020/01/15 02:33 AM
                                                Are segments so bad?Anon2020/01/15 04:24 AM
                                                  Are segments so bad?Jukka Larja2020/01/15 05:20 AM
                                                Are segments so bad?Etienne2020/01/15 04:56 AM
                                                  Are segments so bad?Jukka Larja2020/01/15 07:53 AM
                                                    Are segments so bad?Gabriele Svelto2020/01/16 05:12 AM
                                                      Are segments so bad?Jukka Larja2020/01/16 09:56 AM
                                                Are segments so bad?Brendan2020/01/15 05:20 AM
                                                  Are segments so bad?Gabriele Svelto2020/01/15 05:56 AM
                                                    Are segments so bad?Brendan2020/01/16 06:16 AM
                                                      Are segments so bad?Jukka Larja2020/01/16 10:08 AM
                                                        Are segments so bad?Brendan2020/01/17 12:52 PM
                                                          Are segments so bad?Jukka Larja2020/01/17 09:08 PM
                                                            Are segments so bad?Brendan2020/01/18 11:40 AM
                                                      Are segments so bad?rwessel2020/01/16 02:06 PM
                                                      Are segments so bad?Gabriele Svelto2020/01/16 02:13 PM
                                                        Are segments so bad?Brendan2020/01/17 12:51 PM
                                                          Are segments so bad?Gabriele Svelto2020/01/17 02:18 PM
                                                            Are segments so bad?Anon2020/01/17 07:01 PM
                                                            Are segments so bad?Brendan2020/01/18 02:15 PM
                                                          Are segments so bad?Jukka Larja2020/01/17 09:26 PM
                                Are segments so bad?Anne O. Nymous2020/01/12 03:18 AM
                                  Are segments so bad?Jukka Larja2020/01/12 07:41 AM
                            Are segments so bad?rwessel2020/01/11 12:31 PM
                          Are segments so bad?Anne O. Nymous2020/01/11 07:22 AM
                      Are segments so bad?Ricardo B2020/01/11 07:01 PM
                        Are segments so bad?Adrian2020/01/11 11:18 PM
                          Are segments so bad?Michael S2020/01/12 01:43 AM
                            Are segments so bad?Adrian2020/01/12 03:35 AM
                          Are segments so bad?Ricardo B2020/01/12 11:04 AM
                            Are segments so bad?Anon32020/01/12 04:52 PM
                            Are segments so bad?Brendan2020/01/12 08:58 PM
                      Are segments so bad?Paul A. Clayton2020/01/13 08:11 AM
        No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)rainstared2020/01/06 12:43 AM
          No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Foo_2020/01/06 04:33 AM
            No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)dmcq2020/01/06 05:03 AM
            changes in contextCarlie Coats2020/01/09 08:06 AM
      No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)rainstar2020/01/09 09:16 PM
        No nuances, just buggy code (was: related to Spinlock implementation and the Linux Scheduler)Montaray Jack2020/01/09 10:11 PM
    Suggested reading for the authoranon2020/01/04 10:16 PM
      Suggested reading for the authorab2020/01/05 04:15 AM
        Looking at the other side (frequency scaling)Chester2020/01/06 09:19 AM
          Looking at the other side (frequency scaling)Foo_2020/01/06 10:00 AM
          Why spinlocks were usedFoo_2020/01/06 10:06 AM
            Why spinlocks were usedJukka Larja2020/01/06 11:59 AM
            Why spinlocks were usedSimon Cooke2020/01/06 02:16 PM
            Why spinlocks were usedRizzo2020/01/07 12:18 AM
          Looking at the other side (frequency scaling)ab2020/01/07 12:14 AM
    Cross-platform codeGian-Carlo Pascutto2020/01/06 07:00 AM
      Cross-platform codeMichael S2020/01/06 08:11 AM
        Cross-platform codeGian-Carlo Pascutto2020/01/06 11:33 AM
          Cross-platform codeMichael S2020/01/06 12:59 PM
            Cross-platform codeNksingh2020/01/06 11:09 PM
              Cross-platform codeMichael S2020/01/07 01:00 AM
              SRW lock implementationMichael S2020/01/07 01:35 AM
                SRW lock implementationNksingh2020/01/09 01:17 PM
                  broken URL in Linux source codeMichael S2020/01/14 12:56 AM
                    broken URL in Linux source codeTravis Downs2020/01/14 09:14 AM
                      broken URL in Linux source codeMichael S2020/01/14 09:48 AM
                        broken URL in Linux source codeTravis Downs2020/01/14 03:43 PM
                  SRW lock implementation - url brokenMichael S2020/01/14 02:07 AM
                    SRW lock implementation - url brokenTravis Downs2020/01/14 10:06 AM
                      SRW lock implementation - url brokengpderetta2020/01/15 03:28 AM
                        SRW lock implementation - url brokenTravis Downs2020/01/15 10:16 AM
                      SRW lock implementation - url brokenLinus Torvalds2020/01/15 10:20 AM
                        SRW lock implementation - url brokenTravis Downs2020/01/15 10:35 AM
                          SRW lock implementation - url brokenLinus Torvalds2020/01/16 10:24 AM
      Cross-platform codeLinus Torvalds2020/01/06 12:57 PM
Reply to this Topic
Name:
Email:
Topic:
Body: No Text
How do you spell purple?