Мне нужно отследить мое ядро ​​в FreeBSD. Оно зависает при загрузке, потому что я меняю планировщик. Как мне это сделать?

Я изменяю свой планировщик, и это приводит к его зависанию (потому что я не могу реализовать его должным образом и не собираю вещи, которые бросаю в очереди). Так что я пытаюсь увидеть, как далеко это зайдет. Как мне записывать данные в журнал, а потом как читать этот журнал при загрузке ядра.

Я бросаю свои потоки в новый набор очередей вместо традиционных 3 runq по 64 в каждом. Чтобы пройти и выбрать поток, я использую TAILQ_FOREACH.


person Robin Singh    schedule 08.02.2016    source источник


Ответы (2)


Ты делаешь это неправильно.

Что вам нужно сделать, так это запустить гипервизор с поддержкой отладчиков, таких как qemu или bhyve. Затем вы подключаете gdb к загружаемому ядру и проверяете состояние по мере его сбоя.

В принципе, вы /можете/ иметь журнал, в который вы записываете данные и который вы извлекаете после неудачной загрузки, но я не понимаю, зачем вам это делать. Самый простой способ добиться этого — просто распечатать и, возможно, увеличить размер буфера, чтобы вы могли вместить больше сообщений. Ядро всегда помещает журнал в одно и то же место и проверяет магический номер при загрузке, чтобы знать, следует ли начинать с нуля или начинать добавление. Затем указанный журнал доступен в dmesg и /var/log/messages. Но, как отмечалось ранее, это не тот способ.

person employee of the month    schedule 08.02.2016

Пробовали взломать отладчик? https://www.freebsd.org/doc/en/books/developers-handbook/kerneldebug-online-ddb.html

DTrace также может быть полезен.

person arved    schedule 08.02.2016