Как узнать размер буфера ядра?

Форум предназначен для новичков. В нем предполагается рассматривать вопросы, которые встают на первых этапах освоения Linux
Gekt0r
Заглянувший
Сообщения: 12
Зарегистрирован: 26 фев 2006, 19:16

Как узнать размер буфера ядра?

Сообщение Gekt0r »

В ядре есть кольцевой буфер, куда пишется информация функцией 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 Кб, как указано во всех доках? :shock:

Попробовав на другой системе, я получал размер файла 10894 вне зависимости от параметра, переданного dmesg.

Foxx
Неотъемлемая часть форума
Сообщения: 435
Зарегистрирован: 03 апр 2004, 17:05
Контактная информация:

Сообщение Foxx »

погрепайте kernel/printk.c на предмет функции do_syslog. у меня на операционном столе в настоящий момент лежит версия отдаленно напоминающая 2.6.21, в которой эта функция умеет при type=10 вернуть размер ring buffer'а. соответственно man 2 klogctl и вы, возможно, узнаете его размер. на более старые ядра не ручаюсь, но пробуйте.

Аватара пользователя
exe
Неотъемлемая часть форума
Сообщения: 860
Зарегистрирован: 28 ноя 2003, 21:08
Откуда: Минск

Сообщение exe »

Не знаю поможет ли:

1. gzip -dc /proc/config.gz | grep CONFIG_LOG_BUF_SHIFT

В принципе LOG_BUF_LEN = (1 << CONFIG_LOG_BUF_SHIFT)

Gekt0r
Заглянувший
Сообщения: 12
Зарегистрирован: 26 фев 2006, 19:16

Сообщение Gekt0r »

exe, не помогло...
Foxx, классно)) Получилось)) Блин, я ориентировался на man с opennet.ru, а там ничего не говорится про type=10) Помогли исходники)

Спасибо всем за советы!

Ответить