[Patch] Re: usleep granularity

Bernd Paysan (bernd.paysan@gmx.de)
Thu, 8 Jul 1999 22:52:26 +0200 (MEST)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

--279707946-1773431784-931467146=:435
Content-Type: TEXT/PLAIN; charset=ISO-8859-1
Content-Transfer-Encoding: 8BIT

On Wed, 7 Jul 1999, Mattias Engdegård wrote:

> In linux-kernel you wrote:
>
> >I don't accept that. gettimeofday() knows pretty good where inside the
> >tick period the system is. Rounding up to the next tick (instead of
> >rounding up the delta to the tick accuracy, and then rounding up to
> >the next tick - double rounding to me) is possible, and would allow to
> >have a 0-10 ms sleep period, too. It's not just a single line like
> >deleting a + 1 in case timeout is not zero, but I believe it's doable.
> >I'll prepare a patch to prove it.
>
> I've been thinking about this as well, and think it should not be hard
> at all. The gettimeoffset functionality isn't exported from the
> machine-dependent files, so this has to be fixed for all architectures.
> A small problem is that some of them are quite optimized (look at the sparc
> code), and people are going to complain if we add a single cycle to the
> gettimeofday path. Please tell me if you have a patch prepared.

I've prepared a first patch (x86 only for now), which does what I have in
mind. It exports gettimeoffset() from arch/xx/kernel/time.c (only for x86
at the moment), never undersleeps on nanosleep (sleeps to the nearest tick
after timeout), and never oversleeps on select (sleeps to nearest tick
before timeout). I did some short tests to prove this, and it seems to
work. The basics are done in timespec_to_jiffies

There's a known flaw in my implementation: since timespec_to_jiffies just
provides a delta, the jiffies could have been incremented after I rounded
up, which gives an unnecessary tick to wait in that case. Rewriting that
so that timespec_to_jiffies adds jiffies itself (with taking overflows
into account) is more time-consuming; it's on my ToDo list.

A patch for other architectures where it is easy to port without testing
will follow, but for the more complicated parts (SPARC), I'll very likely
leave the challange of providing gettimeoffset() to the maintainers of
that platform ;-).

Bernd Paysan
"If you want it done right, you have to do it yourself"
http://www.jwdt.com/~paysan/

--279707946-1773431784-931467146=:435
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="timer.diff"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.10.9907082252260.435@granny.paysan.nom>
Content-Description:
Content-Disposition: attachment; filename="timer.diff"

LS0tIGxpbnV4LTIuMy45L2FyY2gvaTM4Ni9rZXJuZWwvdGltZS5jLm9yaWcJ
VGh1IEp1bCAgOCAyMTo0NjowMiAxOTk5DQorKysgbGludXgtMi4zLjkvYXJj
aC9pMzg2L2tlcm5lbC90aW1lLmMJVGh1IEp1bCAgOCAyMTo0Njo1OSAxOTk5
DQpAQCAtMjMyLDYgKzIzMiwxNSBAQA0KICNlbmRpZg0KIA0KIC8qDQorICog
VGhpcyBpcyB0aGUgZXhwb3J0ZWQgZ2V0dGltZW9mZnNldCgpIGZ1bmN0aW9u
IC0tIEJlcm5kIFBheXNhbg0KKyAqLw0KKw0KK3Vuc2lnbmVkIGxvbmcgZ2V0
dGltZW9mZnNldCh2b2lkKQ0KK3sNCisJcmV0dXJuIGRvX2dldHRpbWVvZmZz
ZXQoKTsNCit9DQorDQorLyoNCiAgKiBUaGlzIHZlcnNpb24gb2YgZ2V0dGlt
ZW9mZGF5IGhhcyBtaWNyb3NlY29uZCByZXNvbHV0aW9uDQogICogYW5kIGJl
dHRlciB0aGFuIG1pY3Jvc2Vjb25kIHByZWNpc2lvbiBvbiBmYXN0IHg4NiBt
YWNoaW5lcyB3aXRoIFRTQy4NCiAgKi8NCi0tLSBsaW51eC0yLjMuOS9mcy9z
ZWxlY3QuYy5vcmlnCVRodSBKdWwgIDggMjE6MTI6NDMgMTk5OQ0KKysrIGxp
bnV4LTIuMy45L2ZzL3NlbGVjdC5jCVRodSBKdWwgIDggMjI6MTY6MzMgMTk5
OQ0KQEAgLTE0LDYgKzE0LDcgQEANCiAjaW5jbHVkZSA8bGludXgvc21wX2xv
Y2suaD4NCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPg0KICNpbmNsdWRlIDxs
aW51eC9maWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4NCiANCiAj
aW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4NCiANCkBAIC0yMzEsNiArMjMyLDE3
IEBADQogICoNCiAgKiBVcGRhdGU6IEVSRVNUQVJUU1lTIGJyZWFrcyBhdCBs
ZWFzdCB0aGUgeHZpZXcgY2xvY2sgYmluYXJ5LCBzbw0KICAqIEknbSB0cnlp
bmcgRVJFU1RBUlROT0hBTkQgd2hpY2ggcmVzdGFydCBvbmx5IHdoZW4geW91
IHdhbnQgdG8uDQorICoNCisgKiBVcGRhdGU6IHRoZSBwcmV2aW91cyBjb2Rl
IGhhZCBhIHNsZWVwIHRpbWUgYmV0d2VlbiAxMCBhbmQgMjAgbXMNCisgKiBh
dCBsZWFzdCAtIGl0IHdhc24ndCBwb3NzaWJsZSB0byBzbGVlcCBiZXR3ZWVu
IDAgYW5kIDEwIG1zLiBUaGUNCisgKiBuZXcgY29kZSBkb2Vzbid0IGNvbnNp
ZGVyIHdvcnN0LWNhc2Ugc3plbmFyaW9zLCBhbmQgaW5zdGVhZA0KKyAqIHVz
ZXMgZ2V0dGltZW9mZnNldCgpIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSB0aW1l
IHRvIHRoZSBjdXJyZW50DQorICogamlmZmllJ3Mgc2NoZWR1bGUgdGltZS4N
CisgKg0KKyAqIEkgYWxzbyB3YW50IHRvIHVzZSB0aGUgc2FtZSBjb2RlIGZv
ciBuYW5vc2xlZXAoKSBhcyBmb3Igc2VsZWN0KCkuDQorICoNCisgKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0tIEJlcm5kIFBheXNhbiA8YmVy
bmQucGF5c2FuQGdteC5kZT4NCisgKg0KICAqLw0KICNkZWZpbmUgTUFYX1NF
TEVDVF9TRUNPTkRTIFwNCiAJKCh1bnNpZ25lZCBsb25nKSAoTUFYX1NDSEVE
VUxFX1RJTUVPVVQgLyBIWiktMSkNCkBAIC0yNTcsOCArMjY5LDEyIEBADQog
CQkJZ290byBvdXRfbm9mZHM7DQogDQogCQlpZiAoKHVuc2lnbmVkIGxvbmcp
IHNlYyA8IE1BWF9TRUxFQ1RfU0VDT05EUykgew0KLQkJCXRpbWVvdXQgPSBS
T1VORF9VUCh1c2VjLCAxMDAwMDAwL0haKTsNCi0JCQl0aW1lb3V0ICs9IHNl
YyAqICh1bnNpZ25lZCBsb25nKSBIWjsNCisJCQlzdHJ1Y3QgdGltZXNwZWMg
dHNwZWM7DQorDQorCQkJdHNwZWMudHZfc2VjICA9IHNlYzsNCisJCQl0c3Bl
Yy50dl9uc2VjID0gdXNlYyAqIDEwMDA7DQorDQorCQkJdGltZW91dCA9IHRp
bWVzcGVjX3RvX2ppZmZpZXMoJnRzcGVjKTsNCiAJCX0NCiAJfQ0KIA0KLS0t
IGxpbnV4LTIuMy45L2luY2x1ZGUvbGludXgvdGltZS5oLm9yaWcJVGh1IEp1
bCAgOCAyMTozNDozNCAxOTk5DQorKysgbGludXgtMi4zLjkvaW5jbHVkZS9s
aW51eC90aW1lLmgJVGh1IEp1bCAgOCAyMjowNDoyOSAxOTk5DQpAQCAtMjMs
MjAgKzIzLDU2IEBADQogICogdG8gd2FpdCAiamlmZmllcysxIiBpbiBvcmRl
ciB0byBndWFyYW50ZWUgdGhhdCB3ZSB3YWl0DQogICogYXQgX2xlYXN0XyAi
amlmZmllcyIgLSBzbyAiamlmZmllcysxIiBoYWQgYmV0dGVyIHN0aWxsDQog
ICogYmUgcG9zaXRpdmUuDQorICoNCisgKiBVcGRhdGU6IHRpbWVzcGVjX3Rv
X2ppZmZpZXMgdXNlZCB0byByb3VuZCB1cCB3b3JzdCBjYXNlLA0KKyAqIGlu
c3RlYWQgb2YganVzdCBhZGRpbmcgdGhlIGN1cnJlbnQgb2Zmc2V0IHRvIHRo
ZSBucyBkZWxheS4NCisgKiBDQVZFQVQ6IHRoaXMgcmVhbGx5IHNob3VsZCBp
bmNsdWRlIGppZmZpZXMgaW4gdGhlIGNhbGN1bGF0aW9uLA0KKyAqIHNpbmNl
IGppZmZpZXMgY291bGQgb3ZlcmZsb3cgYmV0d2VlbiB0aGUgY2FsbCBvZmYg
Z2V0dGltZW9mZnNldCgpDQorICogYW5kIHRoZSBhZGRpdGlvbiBvZiBqaWZm
aWVzIGluIHRoZSB1bmRlcmx5aW5nIGNvZGUuDQorICoNCisgKiBUaGUgdGlt
ZXIgY29kZSBpbiBhcmNoLzxtYWNoaW5lPi9rZXJuZWwvdGltZS5jIG11c3Qg
ZXhwb3J0IGdldHRpbWVvZmZzZXQoKSwNCisgKiB3aGljaCBzaG91bGQgcmV0
dXJuIDk5OTk5OTk5OUwgKHdvcnN0IGNhc2UpIGlmIHVua25vd24uDQorICog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gQmVybmQgUGF5c2Fu
IDxiZXJuZC5wYXlzYW5AZ214LmRlPg0KICAqLw0KICNkZWZpbmUgTUFYX0pJ
RkZZX09GRlNFVCAoKH4wVUwgPj4gMSktMSkNCiANCisjaWZkZWYgX19LRVJO
RUxfXw0KK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldHRpbWVvZmZzZXQodm9p
ZCk7DQorI2VuZGlmDQorDQogc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQg
bG9uZw0KIHRpbWVzcGVjX3RvX2ppZmZpZXMoc3RydWN0IHRpbWVzcGVjICp2
YWx1ZSkNCiB7DQogCXVuc2lnbmVkIGxvbmcgc2VjID0gdmFsdWUtPnR2X3Nl
YzsNCiAJbG9uZyBuc2VjID0gdmFsdWUtPnR2X25zZWM7DQorCWxvbmcgb2Zm
c2V0Ow0KKyNpZmRlZiBUMkpfV0lUSF9KSUZGSUVTDQorCWxvbmcgamlmZmll
czE7DQorI2VuZGlmDQogDQogCWlmIChzZWMgPj0gKE1BWF9KSUZGWV9PRkZT
RVQgLyBIWikpDQorI2lmZGVmIFQySl9XSVRIX0pJRkZJRVMNCisJCXJldHVy
biBqaWZmaWVzICsgTUFYX0pJRkZZX09GRlNFVDsNCisjZWxzZQ0KIAkJcmV0
dXJuIE1BWF9KSUZGWV9PRkZTRVQ7DQotCW5zZWMgKz0gMTAwMDAwMDAwMEwg
LyBIWiAtIDE7DQorI2VuZGlmDQorDQorI2lmZGVmIFQySl9XSVRIX0pJRkZJ
RVMNCisJZG8gew0KKwkJamlmZmllczEgPSBqaWZmaWVzOw0KKyNlbmRpZg0K
KwkJb2Zmc2V0ID0gZ2V0dGltZW9mZnNldCgpOw0KKyNpZmRlZiBUMkpfV0lU
SF9KSUZGSUVTDQorCX0gd2hpbGUgKGppZmZpZXMxICE9IGppZmZpZXMpOw0K
KyNlbmRpZg0KKw0KKwluc2VjICs9IG9mZnNldDsNCiAJbnNlYyAvPSAxMDAw
MDAwMDAwTCAvIEhaOw0KLQlyZXR1cm4gSFogKiBzZWMgKyBuc2VjOw0KKwly
ZXR1cm4gSFogKiBzZWMgKyBuc2VjDQorI2lmZGVmIFQySl9XSVRIX0pJRkZJ
RVMNCisJCSsgamlmZmllcw0KKyNlbmRpZg0KKwk7DQogfQ0KIA0KIHN0YXRp
YyBfX2lubGluZV9fIHZvaWQNCg==
--279707946-1773431784-931467146=:435--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/