Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1700287
| From | Joel Fernandes <joelaf@google.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: wake_wide mechanism clarification |
| Date | 2017-07-31 20:00 +0200 |
| Message-ID | <u9n91-NK-45@gated-at.bofh.it> (permalink) |
| References | (6 earlier) <u8Ipc-a9-5@gated-at.bofh.it> <u8IIy-h0-9@gated-at.bofh.it> <u9hZE-6eS-11@gated-at.bofh.it> <u9lJV-8uS-31@gated-at.bofh.it> <u9m3f-9W-11@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
On Mon, Jul 31, 2017 at 9:42 AM, Josef Bacik <josef@toxicpanda.com> wrote: <snip> >> >> > >> > So why do you care about wake_wide() anyway? Are you observing some problem >> > that you suspect is affected by the affine wakeup stuff? Or are you just trying >> >> I am dealing with an affine wake up issue, yes. >> >> > to understand what is going on for fun? Cause if you are just doing this for >> > fun you are a very strange person, thanks, >> >> Its not just for fun :) Let me give you some background about me, I >> work in the Android team and one of the things I want to do is to take >> an out of tree patch that's been carried for some time and post a more >> upstreamable solution - this is related to wake ups from the binder >> driver which does sync wake ups (WF_SYNC). I can't find the exact out >> of tree patch publicly since it wasn't posted to a list, but the code >> is here [1]. What's worse is I have recently found really bad issues >> with this patch itself where runnable times are increased. I should >> have provided this background earlier (sorry that I didn't, my plan >> was to trigger a separate discussion about the binder sync wake up >> thing as a part of a patch/proposal I want to post - which I plan to >> do so). Anyway, as a part of this effort, I want to understand >> wake_wide() better and "respect" it since it sits in the wake up path >> and I wanted to my proposal to work well with it, especially since I >> want to solve this problem in an upstream-friendly way. >> >> The other reason to trigger the discussion, is, I have seen >> wake_wide() enough number of times and asked enough number of folks >> how it works that it seems sensible to ask about it here (I was also >> suggested to ask about wake_wide on LKML because since few people >> seemingly understand how it works) and hopefully now its a bit better >> understood. >> >> I agree with you that instead of spending insane amounts of time on >> wake_wide itself, its better to directly work on a problem and collect >> some data - which is also what I'm doing, but I still thought its >> worth doing some digging into wake_wide() during some free time I had, >> thanks. >> > > Ok so your usecase is to _always_ wake affine if we're doing a sync wakeup. I > _think_ for your case it's best to make wake_affine() make this decision, and > you don't want wake_wide() to filter out your wakeup as not-affine? So perhaps > just throw a test in there to not wake wide if WF_SYNC is set. This makes Hmm I was actually thinking that since 'sync' is more of a hint, that we do a wake_wide() first anyway since its already so conservative, and for the times it does resort to wide, its probably the right decision from a scheduling standpoint to avoid affine and avoid too many tasks too quickly. Do you think that's a fair? I tried a quick patch and doing wake_wide first, and then checking for sync does seem to work well. > logical sense to me as synchronous wakeups are probably going to want to be > affine wakeups, and then we can rely on wake_affine() to do the load checks to > make sure it really makes sense. How does that sound? Thanks, Yep that sounds good and I will try that. What I was thinking was do the regular wake_wide and wake_affine checks, and then do something like this: in select_task_rq_fair, before calling select_idle_sibling, do something like this to check if only 1 task is running on the waker's CPU (this is after doing the wake_wide and wake_affine checks) + idle_sync = (sync && (new_cpu == cpu) && + cpu_rq(cpu)->nr_running == 1); and then in select_idle_sibling, something like: + /* + * If the previous and target CPU share cache and a sync wakeup + * is requested and the CPU is about to goto idle, because it + * has only the waker running which requested sync, the target + * is a better choice for cache affinity and keeping task's + * previous core idle and low power state. + */ + if (idle_sync && cpus_share_cache(prev, target)) + return target; + I haven't tested this patch though so I'm not sure it works well yet, but just sharing the idea. What do you think? thanks, -Joel
Back to linux.kernel | Previous | Next — Previous in thread | Find similar | Unroll thread
Re: wake_wide mechanism clarification Joel Fernandes <joelaf@google.com> - 2017-07-29 10:10 +0200
Re: wake_wide mechanism clarification Joel Fernandes <joelaf@google.com> - 2017-07-29 10:20 +0200
Re: wake_wide mechanism clarification Michael Wang <yun.wang@profitbricks.com> - 2017-08-02 10:30 +0200
Re: wake_wide mechanism clarification Joel Fernandes <joelaf@google.com> - 2017-08-04 01:50 +0200
Re: wake_wide mechanism clarification Mike Galbraith <umgwanakikbuti@gmail.com> - 2017-07-29 17:10 +0200
Re: wake_wide mechanism clarification Joel Fernandes <joelaf@google.com> - 2017-07-29 22:20 +0200
Re: wake_wide mechanism clarification Joel Fernandes <joelaf@google.com> - 2017-07-30 00:30 +0200
Re: wake_wide mechanism clarification Joel Fernandes <joelaf@google.com> - 2017-07-30 00:50 +0200
Re: wake_wide mechanism clarification Josef Bacik <josef@toxicpanda.com> - 2017-07-31 14:30 +0200
Re: wake_wide mechanism clarification Mike Galbraith <umgwanakikbuti@gmail.com> - 2017-07-31 15:50 +0200
Re: wake_wide mechanism clarification Josef Bacik <josef@toxicpanda.com> - 2017-07-31 16:50 +0200
Re: wake_wide mechanism clarification Mike Galbraith <umgwanakikbuti@gmail.com> - 2017-07-31 19:30 +0200
Re: wake_wide mechanism clarification Joel Fernandes <joelaf@google.com> - 2017-07-31 18:30 +0200
Re: wake_wide mechanism clarification Josef Bacik <josef@toxicpanda.com> - 2017-07-31 18:50 +0200
Re: wake_wide mechanism clarification Joel Fernandes <joelaf@google.com> - 2017-07-31 20:00 +0200
csiph-web