[linux] Conversion de jiffies en milli secondes


Answers

Les Jiffies sont codés en dur dans Linux 2.4. Vérifiez la définition de HZ , qui est définie dans le param.h spécifique à l'architecture. C'est souvent 100 Hz, ce qui est une tique chaque (1 sec / 100 ticks * 1000 ms / sec) 10 ms.

Cela est vrai pour i386, et HZ est défini dans include/asm-i386/param.h .

Il y a des fonctions dans include/linux/time.h appelées timespec_to_jiffies et jiffies_to_timespec où vous pouvez convertir entre une struct timespec et des jiffies :

    #define MAX_JIFFY_OFFSET ((~0UL >> 1)-1)

    static __inline__ unsigned long
    timespec_to_jiffies(struct timespec *value)
    {
            unsigned long sec = value->tv_sec;
            long nsec = value->tv_nsec;

            if (sec >= (MAX_JIFFY_OFFSET / HZ))
                    return MAX_JIFFY_OFFSET;
            nsec += 1000000000L / HZ - 1;
            nsec /= 1000000000L / HZ;
            return HZ * sec + nsec;
    }

    static __inline__ void
    jiffies_to_timespec(unsigned long jiffies, struct timespec *value)
    {
            value->tv_nsec = (jiffies % HZ) * (1000000000L / HZ);
            value->tv_sec = jiffies / HZ;
    }

Note: J'ai vérifié cette information dans la version 2.4.22.

Question

Comment convertir manuellement des jiffies en millisecondes et vice versa sous Linux? Je sais que le noyau 2.6 a une fonction pour cela, mais je travaille sur 2.4 (devoirs) et bien que j'ai regardé le code, il utilise beaucoup de macro-constantes dont je n'ai aucune idée si elles sont définies en 2.4.







Links