Я хотел бы иметь возможность «захватить» прерывание hrtimer с помощью модуля ядра Linux и воспроизвести прерывание в более поздний период времени. Есть мысли о том, как это сделать?

Пример использования: программа, которая вызывает sleep (1). Мой модуль захватит прерывание hrtimer, когда оно сработает через 1 секунду, дождется времени «x», а затем повторно запустит прерывание, разбудив процесс.

Примечание: я не хочу перехватывать системный вызов сна.

Благодарность!

1
Jereme Lamps 20 Мар 2014 в 01:22
Я бы сказал, что все возможно. Я не могу вам сказать, что нужно, чтобы сделать что-то подобное, не нарушая восприятие времени остальной частью ядра. Если вы скажете нам почему вы хотите отложить эту программу, мы могли бы помочь вам больше - возможно, даже с помощью решения только для пользовательского пространства.
 – 
thkala
20 Мар 2014 в 12:43
Для пояснения скажем, что я хочу получить прерывание hrtimer только для определенного PID, поэтому я не испорчу восприятие времени для всего ядра, а только для процесса с определенным PID. Что касается «почему», предположим, что у меня есть запущенный процесс, который, как я знаю, часто вызывает sleep (). Я хочу замедлить его выполнение, увеличив время сна.
 – 
Jereme Lamps
20 Мар 2014 в 20:58
Вы пробовали просто переопределить функции библиотеки C sleep() с помощью библиотеки LD_PRELOAD?
 – 
thkala
20 Мар 2014 в 21:04

1 ответ

Лучший ответ

Честно говоря, написание модуля ядра Linux только для изменения поведения sleep() для одного приложения звучит излишне.

В большинстве случаев у вас должна быть возможность использовать предварительно загружаемый общий объект для перехвата / переопределения семейства функций sleep() с помощью ваши собственные реализации. Приложение вызовет вашу реализацию, и ваш код может затем вызвать функцию real с измененным списком параметров.

Этот метод намного проще и менее навязчив, чем все, что связано с программированием ядра, хотя он не будет работать, если ваше приложение статически связано или если оно использует прямые системные вызовы вместо библиотечных функций.

0
Community 23 Май 2017 в 14:57