В ядре есть кольцевой буфер, куда пишется информация функцией printk. Размер этого буфера - LOG_BUF_LEN, эта переменная определена в файле printk.c. Во всех доках написано, что на ядрах 2.6 размер этого буфера по умолчанию - 16 Кб. Но этот размер может быть изменен при сборке ядра
Мне нужно узнать расмер кольцевого буфера ядра работающей системы.
Для этого я использовал команду dmesg, которая этот буфер читает. Опция -s указывает, сколько байтов читать. Я думал так: если указать большое число и пернаправить вывод dmesg в файл, то размер этого файла и будет равен размеру кольцевого буфера ядра.
Но при реализации возникли какие-то глюки.
Когда я, скажем писал:
dmesg -s 20000 > 1,
файл выходил размером 14008.
dmesg -s 17000 > 1,
размер файла - 11908
dmesg -s 100000 > 1,
размер файла - 45877.
dmesg -s 90000 > 1,
размер файла - 45877.
Почему он выходит разным? И реальный ли это размер буфера ядра?
И почему он не равен 16 Кб, как указано во всех доках?
Попробовав на другой системе, я получал размер файла 10894 вне зависимости от параметра, переданного dmesg.
Как узнать размер буфера ядра?
-
- Неотъемлемая часть форума
- Сообщения: 435
- Зарегистрирован: 03 апр 2004, 17:05
- Контактная информация:
погрепайте kernel/printk.c на предмет функции do_syslog. у меня на операционном столе в настоящий момент лежит версия отдаленно напоминающая 2.6.21, в которой эта функция умеет при type=10 вернуть размер ring buffer'а. соответственно man 2 klogctl и вы, возможно, узнаете его размер. на более старые ядра не ручаюсь, но пробуйте.