Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8)

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Thomas Gleixner
Date: Monday, May 31, 2010 - 2:41 pm

On Sat, 29 May 2010, James Bottomley wrote:

That's wrong. You only need the explicit dynamic QoS constraints for
applications which follow the scheme:

     while (1) {
     	   if (event_available())
	      process_event();
	   else
	      do_useless_crap_which_consumes_power();
     }	   

which need the following annotation:

     while (1) {
     	   block_suspend();
     	   if (event_available()) {
	      process_event();
	      unblock_suspend();
	   } else {
	      unblock_suspend();
	      do_useless_crap_which_consumes_power();
           }
     }	   

Plus the kernel counterpart of drivers which take the suspend blocker
in the interrupt handler and release it when the event queue is empty.

So that's done for making polling event handling power "efficient".

Even worse, you need the same "annotation" for non polling mode and it
enforces the use of select() because you cannot take a suspend blocker
across a blocking read() without adding more invasive interactions to
the kernel..

So the "sane" app looks like:

   while (1) {
   	 select();
	 block_suspend();
	 process_events();
	 unblock_suspend();
   }

I'm really tired of arguing that this promotion of "programming style"
is the worst idea ever, so let's look how you can do the same thing
QoS based.

s/block_suspend()/qos(INTERACTIVE)/ and
s/unblock_suspend()/qos(NONE)/ and
s/block_magic()/qos_magic()/ in the drivers.

Yes, it's mostly the same, with a subtle difference:

While android can use it in the big hammer approach to disable the
existing user initiated suspend via /sys/power/state, the rest of the
world can benefit as well in various ways.

 - Sane applications which use a blocking event wait can be handled
   with a static QoS setting simply because a blocking read relies on
   the QoS state of the underlying I/O system.

 - Idle based suspend as the logical consequence of idle states is
   just a matter of QoS constraint based decisions.

 - Untrusted apps can be confined in cgroups. The groups are set to
   QoS(None) when user land decides that it's time to safe power
   (e.g. screen lock kicks in)

 - QoS states can block applications from I/O when the I/O system is
   set to a state which is exclusive.

  - ...

So that allows to use the same mechanism for more than the android
sledge hammer approach and confines the controversial use cases into
android specific files without adding a hard to maintain user space
interface which would prevent or at least make it hard to do some of
the above mentioned things which we want to see implemented.

While I personally disagree with the android approach, I REALLY want
to provide them a mechanism to make it work, but not for the price
that it actively prevents solutions which are considered to be
technically superior by a relevant group of developers/maintainers.


See above.

Thanks,

	tglx
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Matthew Garrett, (Thu May 27, 3:09 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Matthew Garrett, (Thu May 27, 3:36 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Arve Hjønnevåg, (Thu May 27, 7:47 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Brian Swetland, (Thu May 27, 9:55 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Florian Mickler, (Thu May 27, 11:39 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Peter Zijlstra, (Fri May 28, 12:11 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Arve Hjønnevåg, (Fri May 28, 2:32 am)
Re: resume latency QoS support, unify suspend/resume into ..., Arve Hjønnevåg, (Fri May 28, 2:59 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Arve Hjønnevåg, (Fri May 28, 4:20 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Matthew Garrett, (Fri May 28, 4:41 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Peter Zijlstra, (Fri May 28, 5:30 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Matthew Garrett, (Fri May 28, 5:31 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Brian Swetland, (Fri May 28, 5:52 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Peter Zijlstra, (Fri May 28, 6:20 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Brian Swetland, (Fri May 28, 6:27 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Matthew Garrett, (Fri May 28, 7:02 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Matthew Garrett, (Fri May 28, 7:05 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Matthew Garrett, (Fri May 28, 7:21 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Brian Swetland, (Fri May 28, 7:29 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Matthew Garrett, (Fri May 28, 7:41 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Peter Zijlstra, (Fri May 28, 7:59 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Brian Swetland, (Fri May 28, 8:13 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Florian Mickler, (Fri May 28, 8:53 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Zygo Blaxell, (Fri May 28, 10:27 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Peter Zijlstra, (Fri May 28, 11:16 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Zygo Blaxell, (Fri May 28, 12:51 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Rafael J. Wysocki, (Fri May 28, 2:44 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Arve Hjønnevåg, (Fri May 28, 2:53 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Felipe Contreras, (Fri May 28, 4:42 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Arve Hjønnevåg, (Fri May 28, 5:43 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Peter Zijlstra, (Sat May 29, 12:53 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Peter Zijlstra, (Sat May 29, 1:10 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Florian Mickler, (Sat May 29, 1:28 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Florian Mickler, (Sat May 29, 1:56 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), James Bottomley, (Sat May 29, 9:10 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Peter Zijlstra, (Sat May 29, 11:12 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Peter Zijlstra, (Sat May 29, 11:12 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Peter Zijlstra, (Sat May 29, 11:12 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Rafael J. Wysocki, (Sat May 29, 1:12 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Florian Mickler, (Mon May 31, 1:12 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Florian Mickler, (Mon May 31, 1:47 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Thomas Gleixner, (Mon May 31, 1:49 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), James Bottomley, (Mon May 31, 1:52 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Florian Mickler, (Mon May 31, 2:13 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Rafael J. Wysocki, (Mon May 31, 2:14 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), James Bottomley, (Mon May 31, 2:21 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Thomas Gleixner, (Mon May 31, 2:41 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Thomas Gleixner, (Mon May 31, 2:46 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Thomas Gleixner, (Mon May 31, 3:17 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Rafael J. Wysocki, (Mon May 31, 3:23 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Thomas Gleixner, (Mon May 31, 3:27 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), James Bottomley, (Mon May 31, 4:47 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Arve Hjønnevåg, (Mon May 31, 10:21 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Thomas Gleixner, (Tue Jun 1, 4:10 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Matthew Garrett, (Tue Jun 1, 6:51 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), James Bottomley, (Tue Jun 1, 2:01 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Rafael J. Wysocki, (Tue Jun 1, 3:24 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), James Bottomley, (Tue Jun 1, 3:36 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Arve Hjønnevåg, (Tue Jun 1, 6:10 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Arve Hjønnevåg, (Tue Jun 1, 8:15 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Arve Hjønnevåg, (Tue Jun 1, 8:32 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), James Bottomley, (Tue Jun 1, 9:02 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), James Bottomley, (Tue Jun 1, 9:14 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Arve Hjønnevåg, (Tue Jun 1, 9:41 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Thomas Gleixner, (Wed Jun 2, 12:00 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Arve Hjønnevåg, (Wed Jun 2, 12:17 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Thomas Gleixner, (Wed Jun 2, 12:21 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), James Bottomley, (Wed Jun 2, 8:05 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Florian Mickler, (Wed Jun 2, 12:47 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), James Bottomley, (Wed Jun 2, 1:41 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Arve Hjønnevåg, (Wed Jun 2, 3:27 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), James Bottomley, (Wed Jun 2, 4:03 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Florian Mickler, (Wed Jun 2, 4:06 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Peter Zijlstra, (Thu Jun 3, 3:05 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), James Bottomley, (Thu Jun 3, 6:24 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Florian Mickler, (Thu Jun 3, 7:18 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Thomas Gleixner, (Thu Jun 3, 7:35 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), James Bottomley, (Thu Jun 3, 7:55 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), James Bottomley, (Thu Jun 3, 10:01 am)
RE: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Muralidhar, Rajeev D, (Thu Jun 3, 10:16 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Bryan Huntsman, (Thu Jun 3, 2:50 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Felipe Contreras, (Sat Jun 5, 9:58 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Felipe Contreras, (Sat Jun 5, 10:04 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Felipe Contreras, (Sat Jun 5, 10:16 am)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Rafael J. Wysocki, (Sat Jun 5, 12:04 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Peter Zijlstra, (Sat Jun 5, 12:16 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Rafael J. Wysocki, (Sat Jun 5, 12:39 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Florian Mickler, (Sat Jun 5, 12:49 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Peter Zijlstra, (Sat Jun 5, 12:52 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Felipe Contreras, (Sat Jun 5, 12:53 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Felipe Contreras, (Sat Jun 5, 12:56 pm)
Re: [linux-pm] [PATCH 0/8] Suspend block api (version 8), Florian Mickler, (Sat Jun 5, 2:52 pm)