Ich habe Kapitel 7 in den 'Linux Device Drivers' (which can be found here) gelesen, dass die Zeit in 'jiffies' gemessen werden kann. Das Problem mit der Variablen "stock jiffies" ist, dass es sich ziemlich häufig umbricht (besonders wenn Sie CONFIG_HZ auf 1000 gesetzt haben).Zeitmessung im Linux Kernel 2.6
In meinem Kernel-Modul speichere ich einen Jiffies-Wert, der zu einem bestimmten Zeitpunkt in der Zukunft gesetzt wird, und vergleiche ihn zu einem späteren Zeitpunkt mit dem aktuellen 'jiffies'-Wert. Ich habe schon gelernt, dass es Funktionen gibt, die die 32-Bit-Jiffy Wrap berücksichtigen so zwei Werte vergleichen ich dies mit:
if (time_after(jiffies, some_future_jiffies_value))
{
// we've already passed the saved value
}
kommt meine Frage: So, jetzt will ich den ‚some_future_jiffies_value‘ gesetzt zu "jetzt + 10ms". Dies kann einfach dadurch erreicht werden:
some_future_jiffies_value = jiffies + msecs_to_jiffies(10);
Ist das korrekt? Was passiert, wenn der aktuelle Jiffies in der Nähe von MAX_JIFFY_OFFSET liegt und der resultierende Wert von msecs_to_jiffies (10) den Wert von some_future_jiffies_value hinter diesen Offset stellt? Wird es automatisch umbrochen oder sollte ich etwas Code hinzufügen, um dies zu überprüfen? Gibt es Funktionen, die mich davor bewahren, damit umgehen zu müssen?
Update:
zu stopfen mit Wraparound zu vermeiden Ich habe meine Schlafschleife neu geschrieben:
// Sleep for the appropriate time
while (time_after(some_future_jiffies_value, jiffies))
{
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1);
}
Ich nehme an, das mehr tragbar ist richtig?
Update 2:
Vielen Dank ‚ctuffli‘ für die Zeit nehmen, auf diese Frage zurückkommen und ein Feedback auf meine Kommentare als auch die Bereitstellung. Mein Kernel-Treiber funktioniert jetzt gut und es ist viel weniger hässlich im Vergleich zu der Situation, bevor Sie mir all diese Tipps gegeben haben. Vielen Dank!
Ein anderer Gedanke: würde mit Get \ _jiffies \ _64() mich davor bewahren, jemals an den Wraparound denken zu müssen und mich einfach Mathe machen zu lassen? – Benjamin