Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.os.linux.hardware > #2392
| From | Clemens Ladisch <clemens@ladisch.de> |
|---|---|
| Newsgroups | comp.os.linux.misc, comp.os.linux.hardware |
| Subject | Re: Realtime clock accessible without context-switch? |
| Date | 2014-05-21 19:32 +0200 |
| Message-ID | <bu46amFe2ebU1@mid.individual.net> (permalink) |
| References | <llfapk$mhc$2@dont-email.me> <bu1qcoFt9amU1@mid.individual.net> <llhkkb$56l$1@dont-email.me> |
Cross-posted to 2 groups.
Charles T. Smith wrote:
> On Tue, 20 May 2014 21:56:48 +0200, Clemens Ladisch wrote:
>> Charles T. Smith wrote:
>>> Is there a way to access (say on Intel platforms) the realtime clock
>>> without using a special device driver, but simply with non-synchronized
>>> memory access?
>>
>> On IBM-PC compatible machines, the RTC lives in the good ol' ISA I/O
>> space, which cannot be memory-mapped.
>>
>> When doing ISA I/O accesses, the switch to kernel mode is _not_ the
>> bottleneck. If you want to avoid it anyway, use iopl and inb/outb.
>
> Still these days?
If it didn't use I/O space, it wouldn't be compatible.
> But aren't there other clocks around?
Lots, but none of those store the _real_ time.
I'd suggest the High Precision Event Timer; see the example program below.
> Newer processors have various debug registers, I think.
Try rdtsc.
Or just forget about all that hardware-dependent hackery and use
clock_gettime().
> Your statement that the "switch to kernel mode is *not* the bottleneck"
> is intriguing. Can you give a hint or a URL about what you mean?
An I/O access (about one microsecond) is much slower than the SYSCALL
instruction; and with the RTC, you'd need to read several registers.
Regards,
Clemens
--8<---------------------------------------------------------------->8--
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
int main(void)
{
int fd = open("/dev/hpet", O_RDONLY);
if (fd == -1) {
perror("/dev/hpet");
return 1;
}
const volatile unsigned int *ptr = mmap(NULL, 4096, PROT_READ, MAP_SHARED, fd, 0);
if (ptr == MAP_FAILED) {
perror("mmap");
return 1;
}
printf("frequency: %.5f MHz\n", 1e9 / ptr[1]);
for (;;) {
printf("\rcounter: %08x", ptr[60]);
fflush(stdout);
usleep(123456);
}
}
Back to comp.os.linux.hardware | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Realtime clock accessible without context-switch? "Charles T. Smith" <cts.private.yahoo@gmail.com> - 2014-05-20 10:29 +0000
Re: Realtime clock accessible without context-switch? Clemens Ladisch <clemens@ladisch.de> - 2014-05-20 21:56 +0200
Re: Realtime clock accessible without context-switch? "Charles T. Smith" <cts.private.yahoo@gmail.com> - 2014-05-21 07:29 +0000
Re: Realtime clock accessible without context-switch? Thomas Richter <thor@math.tu-berlin.de> - 2014-05-21 09:47 +0200
Re: Realtime clock accessible without context-switch? William Unruh <unruh@invalid.ca> - 2014-05-21 15:51 +0000
Re: Realtime clock accessible without context-switch? Clemens Ladisch <clemens@ladisch.de> - 2014-05-21 19:32 +0200
Re: Realtime clock accessible without context-switch? Richard Kettlewell <rjk@greenend.org.uk> - 2014-05-21 23:35 +0100
Re: Realtime clock accessible without context-switch? "Charles T. Smith" <cts.private.yahoo@gmail.com> - 2014-05-22 07:53 +0000
Re: Realtime clock accessible without context-switch? Clemens Ladisch <clemens@ladisch.de> - 2014-05-22 20:36 +0200
Re: Realtime clock accessible without context-switch? Richard Kettlewell <rjk@greenend.org.uk> - 2014-05-22 20:26 +0100
Re: Realtime clock accessible without context-switch? William Unruh <unruh@invalid.ca> - 2014-05-22 22:48 +0000
Re: Realtime clock accessible without context-switch? Jan Pieter <jp@jp.dhs.orig> - 2014-06-01 09:58 +0200
Re: Realtime clock accessible without context-switch? Todd <Todd@invalid.invalid> - 2014-05-23 14:20 -0700
csiph-web