Ограничение частоты следования событий при отладке
Ограничение частоты следования событий при отладке
Часто необходимо встроить в код отладочные проверки (с соответствующими функциями вывода информации), чтобы визуально производить мониторинг проблемы. Однако, в ядре некоторые функции вызываются по много раз в секунду. Если в такую функцию будет встроен вызов функции printk(), то системная консоль будет перегружена выводом отладочных сообщений и ее будет невозможно использовать.
Для предотвращения такой проблемы существует два сравнительно простых приема. Первый — ограничение частоты следования событий — очень полезен, когда необходимо наблюдать, как развивается событие, но частота возникновения события очень большая. Чтобы ограничить поток отладочных сообщений, эти сообщения выводятся только раз в несколько секунд, как это показано в следующем примере.
static unsigned long prev_jiffy = jiffies; /* ограничение частоты */
if (time_after(jiffies, prev_jiffy + 2*HZ)) {
prev_jiffy = jiffies;
printk(KERN_ERR "blah blah blah ");
}
В этом примере отладочные сообщения выводятся не чаще, чем один раз в две секунды. Это предотвращает перегрузку консоли сообщениями и системой можно нормально пользоваться. Частота вывода может быть большей, или меньшей, в зависимости от требований.
Вторая ситуация имеет место, когда необходимо замечать любые появления события. В отличие от предыдущего примера нет необходимости выполнять мониторинг развития событий. А только получить сообщение о том, что что-то произошло. Вероятно это уведомление необходимо получить один, или два раза. Проблема возникает в том случае, если проверка, которая после того, как сработала один раз, начинает срабатывать постоянно. Решением в данном случае будет не ограничение частоты, а ограничение общего количества повторений.
static unsigned long limit = 0;
if (limit < 5) {
limit++;
printk(KERN_ERR "blah blah blah ");
}
В этом примере количество отладочных сообщений ограничено числом пять. После пяти сообщений условие всегда будет ложно.
В обоих примерах переменные должны быть статическими (static) и локальными по отношению к той функции, где используются. Это позволяет использовать одинаковые имена переменных в разных функциях.
Ни один из этих примеров не рассчитан на SMP, или преемптивность, хотя очень легко перейти к атомарным операциям и сделать их безопасными для использования и в этих случаях. Однако, честно говоря, это всего лишь отладочный код, поэтому зачем нужны лишние проблемы?
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Рекомендации по проектированию, отладке и тестированию программ
Рекомендации по проектированию, отладке и тестированию программ Рискуя дать совет, противоречащий высказываниям во многих других книгах и технических статьях, в которых основной упор делается на тестировании и уже затем рассматривается все остальное, лично я
Замечания по отладке службы
Замечания по отладке службы Предполагается, что служба будет выполняться непрерывно, поэтому она должна быть надежной и по возможности лишенной каких бы то ни было дефектов. Несмотря на возможность подключения службы к отладчику и использования журнала регистрации
Порядок следования байтов
Порядок следования байтов Порядок следования байтов (byte ordering) — это порядок, согласно которому байты расположены в машинном слове. Для разных процессоров может использоваться один из двух типов нумерации байтов в машинном слове: наименее значимый (самый младший) байт
4.2. Некоторые подходы к отладке распределенных приложений
4.2. Некоторые подходы к отладке распределенных приложений При отладке распределенного приложения в целом нужно представлять общее его состояние, которое включает структуры данных, распределенные по нескольким платформам. Кроме того, необходимо иметь протокол
4.11.5. Ограничение сети
4.11.5. Ограничение сети В крупных сетях описывать каждый компьютер очень сложно. Для облегчения этой задачи можно использовать групповые записи. Например, вам надо разрешить выход в Интернет только для сети 192.168.1.x (с маской 255.255.255.0). Это значит, что первые 24 бита (первые три
9.5.8. Ограничение канала
9.5.8. Ограничение канала При организации доступа в Интернет очень часто требуется отдельным пользователям обеспечить большую скорость подключения. Как это сделать, когда по умолчанию все равноправны и могут работать на максимально доступной на данный момент скорости?
11.2.2. Ограничение доступа
11.2.2. Ограничение доступа Я считаю необходимым подробно рассмотреть блочную директиву Limit. Эта директива определяет вид и параметры доступа к тому или иному каталогу. Рассмотрим листинг 11.9.Листинг 11.9. Пример использования директивы Limit<Directory incoming> <Limit
П2.4. Ограничение доступа
П2.4. Ограничение доступа П2.4.1. Запрет доступа к сайту (или к списку сайтов) Предположим, что вам нужно запретить доступ к определенному сайту (или к списку сайтов). Для этого зайдите в раздел Биллинг | Клиенты | Фильтры | До группы (рис. П2.10). Выполните команду меню Действие |
Ограничение
Ограничение Второй элемент формулы ОДП – дедлайн (от англ. deadline), или ограничение. Это может быть ограничение по времени (например, скидка 50 % только два дня) или по количеству (например, ценный подарок для первых 50 покупателей). Причем короткие по времени дедлайны работают
Реакция в частотной области для цепей настройки частоты
Реакция в частотной области для цепей настройки частоты Схемы настройки используются в различных электронных устройствах, которые находят применение в радио и телевидении. Параллельно трансформаторным обмоткам подключаются конденсаторы, чтобы создать резонансные
Порядок следования узлов
Порядок следования узлов В качестве дополнительного упражнения удалите графики с экрана Probe и получите график V(L1:1)=0,8 В, VR(L1:1)=0,64 В и VI(L1:1)=0,48 В при f=60 Гц. Теперь удалите эти графики и получите график VP(L1:1)=36,9. На рисунке, созданном в Capture, катушка индуктивности была три раза
8.1.23. Вычисление частоты различных значений в массиве
8.1.23. Вычисление частоты различных значений в массиве Для массивов нет метода count, как для строк (чтобы подсчитать число вхождений каждого элемента). Поэтому создадим свой собственный:class Array def count k=Hash.new(0) self.each{|x| k[x]+=1 } k endendmeal = %w[spam spam eggs ham eggs spam]items = meal.count# items равно {"ham"
Ссылочное ограничение
Ссылочное ограничение Ссылочное ограничение реализовано как FOREIGN KEY. Ограничение внешнего ключа существует только в контексте другой таблицы и уникального ключа этой таблицы, заданного явно или неявно в предложении REFERENCES при объявлении ограничения.Таблицы, связанные в
Изменение частоты сэмплирования
Изменение частоты сэмплирования Иногда бывает необходимо изменить частоту сэмплирования существующего звукового файла, например записать звуковые данные на диск можно только с частотой сэмплирования 44 100 Гц. Чтобы изменить частоту сэмплирования звукового файла,
Кому достанутся дополнительные частоты LTE Максим Букин
Кому достанутся дополнительные частоты LTE Максим Букин Опубликовано 13 августа 2010 года Основной потребитель значительного спектра радиочастот в России, Министерство обороны, совершенно не стремится ускорять конверсию частот, которые пригодны для