Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 13.09.2015
Сообщений: 16

Простой бенчмарк для ядра Linux

16.09.2015, 16:34. Показов 1518. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Пытаюсь написать наипростейший бенчмарк для ядра Linux:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <linux/module.h>   // included for all kernel modules
#include <linux/init.h>     // included for __init and __exit macros
#include <linux/time.h>     // ktime_to_us
#include <linux/hrtimer.h>  // ktime_get
 
 
const int LOOP_BOUND = 200000000;
 
static int __init bench_init(void)
{
    s64 time;
 
    int I, J, K;
 
    J = 2;
    K = 3;
    time = ktime_to_us(ktime_get());
 
    for (I = 1; I <= LOOP_BOUND; I++) {
        J = J + K;
        K = J + K;
        J = K - J;
        K = K - J - J;
    }
    
    pr_err("[Bench] time = %lld us\n", (long long)(ktime_to_us(ktime_get()) - time));
 
    return 0;    // Non-zero return means that the module couldn't be loaded.
}
 
static void __exit bench_exit(void)
{
}
 
module_init(bench_init);
module_exit(bench_exit);
 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Shilin Victor");
MODULE_DESCRIPTION("A simple benchmark");
При подгрузке такого модуля у меня всегда выдает в dmesg время работы бенчмарка 0 мкс. Что я делаю не так? Сначала подумал, что это из-за какой-то хитроумной оптимизации могло получиться так, что компилятор выносит то, что находится в цикле, наружу, однако при компиляции с -Os повторилась та же история.

Добавлено через 13 минут
UPD. частично решил проблему, заменив выражения в цикле на
C
1
int_sqrt(9);
(поскольку, мне в общем-то неважно, что именно внутри цикла). Получается, что проблема как раз была в оптимизации.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.09.2015, 16:34
Ответы с готовыми решениями:

Разработка модулей ядра Linux
Здорово Всем! Пожалуйста подскажите какую дистрибутив выбрать ? Чтоб по меньше хлопот было ... со сборкой ядра, и можно было...

Как научиться программированию ядра Linux
Доброго времени суток. Изучаю язык С и учусь работать в Linux. Далее планирую заняться программированием ядра Linux. Есть книги по ядру,...

Создание Linux на основе ядра Linux (kernel.org)
Доброго времени суток! Можете подсказать как на основе ядра Linux (kernel.org) создать свою сборку. Я еще никогда не делал ОС'ей , и...

4
Музыка нас Связала
 Аватар для Fonduee
232 / 232 / 52
Регистрация: 26.03.2008
Сообщений: 616
16.09.2015, 17:52
Цитата Сообщение от Radical_Dreamer Посмотреть сообщение
однако при компиляции с -Os повторилась та же история.

-Os соответсвует флагу -O2, ни о каком отключении оптимизации речь не идет.

Optimize for size. -Os enables all -O2 optimizations that do not typically increase code size. It also performs further optimizations designed to reduce code size.
0
0 / 0 / 0
Регистрация: 13.09.2015
Сообщений: 16
16.09.2015, 18:13  [ТС]
Fonduee, скомпилировал с -O1(с -O0 вообще не компилируется), та же самая история. Перенес имплементацию функции int_sqrt в свой файл, в этом случае выражение ktime_to_us(ktime_get()) - time также получается равным 0. Проблема в том, что мне нужно протестировать некоторые флаги оптимизации, чего, в общем-то не удается сделать, если тело функции находится где-то в другом файле (пересобирать каждый раз все ядро целиком? не, ну нафиг.). Есть ли у кого-нибудь идеи по этому поводу?
0
 Аватар для cybercitizen
204 / 26 / 5
Регистрация: 22.05.2015
Сообщений: 357
20.09.2015, 00:03
Цитата Сообщение от Radical_Dreamer Посмотреть сообщение
UPD. частично решил проблему, заменив выражения в цикле на
И это не удивительно. Твой цикл ничего не делает, поэтому компилятор его просто выбрасывает. Добавь туда что-то вроде volatile или register и узрей разницу.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.09.2015, 13:57
Я толком не понимаю, что ты хочешь. Если тебе нужно сделать так, чтобы этот код занимал время, то проще всего сделать объявление как

C
volatile int I, J, K;
После этого компилятор перестанет оптимизировать обращения к этим переменным
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.09.2015, 13:57
Помогаю со студенческими работами здесь

Бенчмарк для видеокарты
Каким софтом можно проверить видеокарту на работоспособность?

Бенчмарк для длинной арифметики
Долгими зимними вечерами я люблю страдать ерундой и писать свои велосипеды. Таким образом, я написал класс для длинной арифметики. И...

Нужен бенчмарк для теста leadtek px9400gt
Подскажите какой нибуть рабочий 3d бенчмарк для теста видеокарты leadtek px9400gt, а то какие не попробуешь они глючат или несовместимые...

Подключение ядра Linux
В общем препод дал задание, написать загрузчик и к нему же подключить ядро, естественно линукс так как с открытым исходным кодом и...

Програмирования ядра Linux 2.6
Добрый день Мне нужно записать драйвер у ядро ОС Linux 2.6 Команды insmod и modprobe загружают драйвер, но после перезапуска ОС он...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru