Вход:  Пароль:  
FreeSource: DmitrijMaslennikov/proof ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |

Профилирование


Первое, что необходимо сделать — это замерить текущее время запуска системы. Ниже я привожу способ, который показался мне найболее простым и действенным.
Инициализация системы целиком написана на sh скриптах. Они запускаются процессом /sbin/init непосредственно. Что именно запускается можно посмотреть в файле настройки /etc/inittab. Формат файла описан в соответствующем руководстве. Из него следует, что основные действия производят всего два скрипта /etc/rc.d/rc.sysinit и /etc/rc.d/rc. Последний запускается с параметром соответствующим текущему runlevel. Как правило, для десктопа, это 5. Оба этих скрипта запускают другие скрипты из директории /etc/rc.d/init.d.
Самый простой способ, который пришел мне в голову, заключается в том, что раз все скрипты выполняются интерпретатором записанным в первой строке файла, то можно его подменить. Но вый интерпретатор просто запускает bash, ждет завершения, а потом записывает время выполнения. Одна тонкость связана с тем, что время выполнения части скриптов корень файловой системы доступен только для чтения, поэтому необходимо подождать некоторое время, пока он не будет примонтирован как rw. Программа по замеру времени пишется легко на C++ и, думаю в дополнительных разъяснениях не нуждается (сюда можно как-нибудь файл залить???)
Компилируем ее командой
$g++ rinit.cpp -o rinit -lboost_filesystem
Полученный в результате бинарник кидаем в /bin. И заменяем /bin/bash или /bin/sh на /bin/rinit в первых строках интересующих нас файлов (я это сделал скриптом; могу выложить). После перезагрузки результат можно посмотреть с помощью следующего скрипта (залью его когда узнаю как или куда).


Это пока все о профилировании. Тот же способ использовался мной и при профилировании init-ng.


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]