On 07/17/2022 00:15, Michael Schwingen wrote:
> On 2022-07-16, Helmut Schellong <
r...@schellong.biz> wrote:
>>> Nein, nur deine Aussage richtigstellen, dass "ein Betriebssystem" nicht
>>> Zeitabläuft nicht mit weniger als 10 ms auflösen kann.
>>
>> Kann es ja auch in aller aller Regel nicht!
>
> Doch. Die 100Hz-Timerinterrupts sind nicht die einzigen Interrupts.
Und die anderen Interrupts sind wohl keine Timer-Interrupts.
>>>> Das ändert überhaupt nichts daran, daß in _allen_ PCs, mit denen ich
>>>> je umging, eine solche Zeitnahme nicht arbeitete!
>>>
>>> Und genau das ist komplett irrelevant, was Du persönlich so gemacht
>>> hast. Betriebssysteme nutzen selbstverständlich auch genauere Zeitnahmen
>>> als nur 100 Hz, wenn nötig.
>>>
>>
>> Nenne mir einen solchen PC in Privathand konkret...
>
> Hier. CONFIG_HZ_300=y, allerdings in Kombination mit CONFIG_NO_HZ_FULL, also
> überhaupt keine festen Timerinterrupts.
Daß ich die 100 Hz verändern kann, weiß ich, seit meinen SCO-Betriebssystemen.
Es wird aber empfohlen, die 100 Hz stehen zu lassen.
>> Und Du willst nun diese 10 ppm zu einem _erheblichen_, nicht vernachlässigbaren Anteil erklären?
>>
>> |Scope:
>> |This specification provides register model and programming interface definitions for new event timer
>> |hardware for use on Intel Architecture-based Personal Computers. In this specification, the terms ‘IA-PC
>> |HPET and ‘Event Timers’ refer to the same timer hardware.
>> |The IA-PC HPET Specification defines timer hardware that is intended to initially supplement and
>> |eventually replace the legacy 8254 Programmable Interval Timer and the Real Time Clock Periodic
>> |Interrupt generation functions that are currently used as the ‘de-facto’ timer hardware for IA-PCs.
>>
>> Diese neue Hardware muß von einem BS unterstützt werden!
>
> Diese neue Hardware ist seit vielen Jahren (seit 2005) Standard. Alles, was
> neuer als Windows XP ist, sollte HPET benutzen.
>
>
Ja, das gibt es (aktuell):
Event timer "LAPIC" quality 100
Event timer "RTC" frequency 32768 Hz quality 0
hpet0: <High Precision Event Timer> iomem 0xfed00000-0xfed003ff on acpi0
Timecounter "HPET" frequency 14318180 Hz quality 950
Event timer "HPET" frequency 14318180 Hz quality 450
Event timer "HPET1" frequency 14318180 Hz quality 440
Event timer "HPET2" frequency 14318180 Hz quality 440
Timecounter "ACPI-fast" frequency 3579545 Hz quality 900
acpi_timer0: <24-bit timer at 3.579545MHz> port 0x808-0x80b on acpi0
kern.timecounter.tc.i8254.frequency: 1193182
kern.timecounter.tc.i8254.quality: 0
kern.timecounter.tc.HPET.mask: 4294967295
kern.timecounter.tc.HPET.counter:
3013495652
kern.timecounter.tc.HPET.frequency: 14318180
kern.timecounter.tc.HPET.quality: 950
Unter meinem FreeBSD haben die Zeitdauer-Funktionen aus den Libs
eine Auflösung von 10 ms.
Die Uhrzeit kann ich mir auch mit scheinbar höherer Auflösung liefern lassen;
aber die reale Auflösung ist 10 ms.
Was nützt HPET mir, wenn es offenbar keine geeignete Zeitnahme-Funktion gibt, die auf HPET aufsetzt?
Es geht zudem in einem gewissen Maß um Portabilität.
Die üblichen Funktionen (z.B. <time.h>) basieren offenbar nicht auf HPET.
Hätte man aber machen können...
Eine explizite Analyse habe ich aber schon lange nicht mehr gemacht.
Ich verwende u.a. setitimer() und getitimer(), die aber keine C-Funktionen sind.