From: "Shem Multinymous" <multinymous@gmail.com>
To: "Vojtech Pavlik" <vojtech@suse.cz>
Cc: "Brown, Len" <len.brown@intel.com>,
"Pavel Machek" <pavel@suse.cz>,
"Matthew Garrett" <mjg59@srcf.ucam.org>,
"kernel list" <linux-kernel@vger.kernel.org>,
linux-thinkpad@linux-thinkpad.org, linux-acpi@vger.kernel.org,
"Henrique de Moraes Holschuh" <hmh@debian.org>
Subject: Re: Generic battery interface
Date: Sat, 29 Jul 2006 01:48:34 +0300 [thread overview]
Message-ID: <41840b750607281548h5ee2219eka1de6745b692c092@mail.gmail.com> (raw)
In-Reply-To: <20060728202359.GB5313@suse.cz>
On 7/28/06, Vojtech Pavlik <vojtech@suse.cz> wrote:
> Not that much. The difference then remains only on a tickless system.
And even then, only when apps use excessive poll rates (way above
1Hz), in which case the apps are broken; and broken apps can eat power
in ways much worse than msleep(10) on a tickless system.
> No I2C. LPC is so much faster than I2C (8 MHz 8-bit vs 100 kHz serial).
Ack.
> > >NOTE: I'm arguing event-based vs poll-based here. This is orthogonal to
> > >the /dev vs /sys - both can supply or not supply events.
> >
> > > fd = open("/dev/bat0", O_RDONLY);
> > > ioctl(fd, BATCGVOLTAGE, &voltage);
> >
> > So you *are* proposing polling fo rthe /dev interface too? I thought
> > the main argument for the /dev
>
> I'm not proposing polling. I'm proposing that there be a way how to read
> the immediate values, in addition to the event notifications.
>
> Yes, this means polling would be possible.
So your /dev proposal is equivalent, functionality-wise, to sysfs +
attribute change uevent, right? The only question is if we do it
through /dev+ioctls or /sysfs+fscanf.
> > And then we have to maintain both a kernel side and a userspace side.
> > And what do I, poor author of tp_smapi, do if I want to add a
> > non-standard attribute? Tell people to patch and overwrite their
> > disto's batstate binary too?
>
> How often do you plan to do that?
With tp_smapi, I did it about 10 times over half a year. And there's
probably more to come.
> Anyway, the answer is yes, it's not a big deal to do.
Practically, it's much messier. As a developer/tester you have two
components to juggle instead of one, and it's a mess when they get out
of sync.
> As Dmitry pointed out, all the info (except for the events) is in sysfs,
> too.
And as I pointed out in reply, matching up devices in /sys and /dev is
extremely cumbersome (and prone to race conditions).
> > Meanwhile, here's another issue with the accelerometer input device
> > (and by analogy, with batteries): client-specific event rate and fuzz.
> > Neverball only needs "a big change has happened" events, maybe 10-20
> > times per second. The disk parking daemon needs a perfectly accurate
> > readouts at 50Hz or better, plus it needs to know whenever a sample is
> > taken (even if it didn't change since the previous sample). How can
> > this be handled without multiple input devices?
>
> You need at least 50 Hz for reasonable game control, too. I remember
> that analog joysticks sampled at 10 Hz were unusable.
If you rattle your ThinkPad this badly, latency in Neverball is going
to be the least of your problems. :-)
The mainline hdaps driver does 20Hz, BTW.
> The input layer was designed for input devices that control applications
> by actions of the user. The fuzz filtering was designed with that in
> mind and is expected to be set once at boot either by an educated guess
> of a kernel driver or by the system administrator. Because it's designed
> for input devices, it has these properties:
>
> * It ignores minor noise
> * It slowly reacts to continuous drift of the values
> * It reacts immediately to large changes
>
> This would be likely completely unsuitable for batteries and may be bad
> for a drive parking daemon, too. If the daemon can't use it, it'll need
> another interface.
There's a pattern here. Maybe what we need is a generic scheme for
publishing continuous readouts, that will work for both hdaps and
batteries (despite a X100 difference in typical time magnitudes).
Doubtless there are other uses for such a scheme. We want it to
support clients with different desired rates, data sources with
different update frequencies, use minimum CPU and avoid unnecesary
timer interrupts on tickless kernels.
Here's one approach: use a syscall (e.g., ioctl) saying "block until
there's new data on this fd, or N milliseconds have passed, whichever
is *later*". This way each client declares the update rate it wants
and can change it on the fly. The driver sees all the requests and can
perform the minimum hardware quering -- for example, it won't query
the hardware at all if no client has submitted a request with
parameter N more than N milliseconds go. And there's no excessive work
or interrupts. Some (simple) kernel code infrastructure is needed to
help drivers manage the pending requests.
Extending this approach, we can have a call for "block until the
readout has changed by M, or N milliseconds have passed, whichever is
later". This may not reduce query rate for polling-based hardware, but
will reduce the event rate.
I suppose these calls should also have a (normal) timeout, for the
usual reasons.
Shem
next prev parent reply other threads:[~2006-07-28 22:49 UTC|newest]
Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-27 20:06 Brown, Len
2006-07-27 20:32 ` Shem Multinymous
2006-07-27 23:24 ` Vojtech Pavlik
2006-07-28 0:27 ` Shem Multinymous
2006-07-28 0:36 ` Matthew Garrett
2006-07-28 7:42 ` Vojtech Pavlik
2006-07-28 12:25 ` Pavel Machek
2006-07-28 13:43 ` Vojtech Pavlik
2006-07-28 15:38 ` Shem Multinymous
2006-07-28 15:57 ` Valdis.Kletnieks
2006-07-28 22:10 ` Shem Multinymous
2006-07-28 23:14 ` Valdis.Kletnieks
2006-07-29 9:48 ` Shem Multinymous
2006-07-29 10:17 ` Vojtech Pavlik
2006-07-29 10:30 ` Shem Multinymous
2006-07-29 10:37 ` Mark Underwood
2006-07-29 11:35 ` Shem Multinymous
2006-07-30 8:35 ` Valdis.Kletnieks
2006-07-30 11:44 ` Vojtech Pavlik
2006-07-30 11:48 ` Shem Multinymous
2006-07-31 0:58 ` Valdis.Kletnieks
2006-07-31 1:34 ` Shem Multinymous
2006-07-30 9:18 ` Pavel Machek
2006-07-30 10:14 ` Shem Multinymous
2006-07-30 11:33 ` Shem Multinymous
2006-07-28 12:25 ` Dmitry Torokhov
2006-07-28 13:44 ` Vojtech Pavlik
2006-07-28 15:19 ` Shem Multinymous
2006-07-28 16:10 ` Dmitry Torokhov
2006-07-30 8:55 ` Greg KH
2006-07-30 9:52 ` Shem Multinymous
2006-07-30 11:47 ` Vojtech Pavlik
2006-07-30 12:50 ` Shem Multinymous
2006-07-30 14:29 ` Tomasz Torcz
2006-07-30 14:48 ` Shem Multinymous
2006-07-30 11:46 ` Vojtech Pavlik
2006-07-28 15:14 ` Shem Multinymous
2006-07-28 20:23 ` Vojtech Pavlik
2006-07-28 22:48 ` Shem Multinymous [this message]
2006-07-28 23:17 ` Pavel Machek
2006-07-29 10:36 ` Vojtech Pavlik
2006-07-29 11:32 ` Shem Multinymous
2006-07-29 12:04 ` Vojtech Pavlik
2006-07-29 12:51 ` Shem Multinymous
2006-07-29 13:42 ` Vojtech Pavlik
2006-07-30 9:00 ` Greg KH
2006-07-29 21:06 ` Shem Multinymous
2006-07-30 10:05 ` Pavel Machek
2006-07-30 10:34 ` Shem Multinymous
2006-07-30 10:37 ` Pavel Machek
2006-07-30 18:37 ` Shem Multinymous
[not found] ` <20060731113735.GA22081@creature.apm.etc.tu-bs.de>
2006-07-31 15:18 ` [ltp] " Shem Multinymous
[not found] ` <20060731183719.GB22081@creature.apm.etc.tu-bs.de>
2006-07-31 22:45 ` Shem Multinymous
[not found] ` <20060801114303.GA13000@creature.apm.etc.tu-bs.de>
2006-08-02 21:59 ` Shem Multinymous
2006-07-31 21:35 ` Jean Delvare
2006-07-31 22:34 ` Shem Multinymous
2006-07-31 23:01 ` Pavel Machek
2006-08-02 7:18 ` Jean Delvare
2006-08-02 7:46 ` Marek Wawrzyczny
2006-08-03 11:29 ` Thomas Renninger
2006-08-03 16:33 ` Pavel Machek
2006-07-27 22:16 ` Pavel Machek
2006-07-27 22:56 ` Shem Multinymous
2006-07-27 23:08 ` Greg KH
2006-07-27 23:24 ` Pavel Machek
2006-07-30 12:29 ` Jean Delvare
2006-08-02 19:51 ` Pavel Machek
2006-08-03 9:20 ` Jean Delvare
2006-07-27 22:56 ` Greg KH
2006-07-27 23:31 ` Vojtech Pavlik
2006-07-28 0:35 ` Shem Multinymous
2006-07-28 10:11 ` Vojtech Pavlik
-- strict thread matches above, loose matches on Subject: below --
2006-07-28 4:05 Brown, Len
2006-07-28 8:22 ` Johan Vromans
2006-07-28 9:58 ` Matthew Garrett
2006-07-28 10:10 ` Vojtech Pavlik
2006-07-28 12:21 ` Pavel Machek
2006-07-28 14:13 ` Shem Multinymous
2006-07-27 23:20 Brown, Len
2006-07-28 0:10 ` Shem Multinymous
2006-07-27 15:40 Brown, Len
2006-07-27 16:23 ` Shem Multinymous
2006-07-27 16:50 ` Daniel Barkalow
2006-07-27 20:07 ` Shem Multinymous
2006-07-27 0:20 Pavel Machek
2006-07-27 14:05 ` Matthew Garrett
2006-07-27 14:39 ` Shem Multinymous
2006-07-27 14:44 ` Matthew Garrett
2006-07-27 22:42 ` Greg KH
2006-07-27 14:59 ` Pavel Machek
2006-07-27 15:10 ` Shem Multinymous
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=41840b750607281548h5ee2219eka1de6745b692c092@mail.gmail.com \
--to=multinymous@gmail.com \
--cc=hmh@debian.org \
--cc=len.brown@intel.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-thinkpad@linux-thinkpad.org \
--cc=mjg59@srcf.ucam.org \
--cc=pavel@suse.cz \
--cc=vojtech@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®