Вопрос по c, performance, kernel – Jiffies - как рассчитать прошедшие секунды?

2

У меня есть кусок кода, я хочу рассчитать время в секундах ... хотя я получаю время в jiffies, как я могу преобразовать его в секундах?

Вот мой код ядра:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/jiffies.h>
#include <linux/timer.h>
unsigned long js, je, tet;
int netblock_init_module(void){
    js = jiffies;
    printk("\n[Jiffies start Time : %lu]\nModule Started.\n", js);
    return 0;
}

void netblock_cleanup_module(void) {
    je = jiffies;
    printk("\n[Jiffies End Time : %lu]\nModule Removed.\n", je);
    tet = je - js;
    printk("\nEnd Time [%lu] - Start Time [%lu]: \nTotlal elapsed Time [%lu]\n",js,je, tet);

}

module_init(netblock_init_module);
module_exit(netblock_cleanup_module);

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("JIFFIES EXAMPLE");
MODULE_AUTHOR("RAHEEL");

Выход, который я получаю, похож на это:

$ insmod jiffexample.ko

[Время начала Jiffies: 13363583]

Модуль запущен

$ rmmod jiffexample.ko

[Время окончания Jiffies: 13361588]

Модуль удален.

Конечное время 13361588 - Время начала 1336358

Общее прошедшее время [1605]

Теперь я хочу получить конвертированное время в секундах ... как можно конвертировать прошедшее время в 1605 в секундах? или, альтернативно, вы можете сказать мне, сколько jiffies в секунду?

Вся необходимая информация находится в файловой системе / proc. Смотрите метод в модуле perl Proc :: Stat, это всего лишь несколько строк кода, которые можно адаптировать практически к любому другому языку, включая типичные команды bash Miker

Ваш Ответ

3   ответа
9

jiffies_to_msecs или jiffies_to_usecs

Все процедуры преобразования ниже:

Из include / linux / jiffies.h

...
/*
 * Convert various time units to each other:
 */
extern unsigned int jiffies_to_msecs(const unsigned long j);
extern unsigned int jiffies_to_usecs(const unsigned long j);
extern unsigned long msecs_to_jiffies(const unsigned int m);
extern unsigned long usecs_to_jiffies(const unsigned int u);
extern unsigned long timespec_to_jiffies(const struct timespec *value);
extern void jiffies_to_timespec(const unsigned long jiffies,
                            struct timespec *value);
extern unsigned long timeval_to_jiffies(const struct timeval *value);
extern void jiffies_to_timeval(const unsigned long jiffies,
                           struct timeval *value);
extern clock_t jiffies_to_clock_t(unsigned long x);
extern unsigned long clock_t_to_jiffies(unsigned long x);
extern u64 jiffies_64_to_clock_t(u64 x);
extern u64 nsec_to_clock_t(u64 x);
extern u64 nsecs_to_jiffies64(u64 n);
extern unsigned long nsecs_to_jiffies(u64 n);
...
0

HZ, функцияjiffies_to_timeval может быть использован
Это дает структуры с секундами и микросекундами.
Микросекунды всегда будут кратны1000000/HZ.

8

http: //www.kernel.org/doc/man-pages/online/pages/man7/time.7.htm:

Размер jiffy определяется значением постоянной ядра HZ.

Значение HZ варьируется в зависимости от версии ядра и аппаратных платформ. На i386 ситуация выглядит следующим образом: на ядрах вплоть до 2.4.x включительно HZ равнялся 100, давая значение jiffy 0,01 секунды; начиная с 2.6.0, HZ был повышен до 1000, что дает мгновенный результат в 0,001 секунды Начиная с ядра 2.6.13, значение HZ является параметром конфигурации ядра и может быть 100, 250 (по умолчанию) или 1000, что дает значение jiffies соответственно 0,01, 0,004 или 0,001 секунды. Начиная с ядра 2.6.20, доступна еще одна частота: 300, число, которое делится равномерно для общих частот видеокадров (PAL, 25 Гц; NTSC, 30 Гц).

Просто разделите на HZ.

Похожие вопросы