Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d7012437df | ||
|
|
c24887c795 |
102
s4a.tex
102
s4a.tex
@@ -1388,6 +1388,108 @@ systemd уже подготовлен для работы внутри таки
|
|||||||
|
|
||||||
И все это уже сейчас доступно в Fedora~15.
|
И все это уже сейчас доступно в Fedora~15.
|
||||||
|
|
||||||
|
\section{Поиск виновных}
|
||||||
|
|
||||||
|
Fedora~15\footnote{Также известный как величайший в истории релиз свободной ОС}
|
||||||
|
является первым релизом Fedora, использующим systemd в качестве системы
|
||||||
|
инициализации по умолчанию. Основной нашей целью при работе над выпуском F15
|
||||||
|
является обеспечение полной взаимной интеграции и корректной работы всех
|
||||||
|
компонентов. При подготовке следующего релиза, F16, мы сконцентрируемся на
|
||||||
|
дальнейшей полировке и ускорении системы. Для этого мы подготовили ряд
|
||||||
|
инструментов (доступных уже в F15), которые должны помочь нам в поиске проблем,
|
||||||
|
связанных с процессом загрузки. В этой статье я попытаюсь рассказать о том, как
|
||||||
|
найти виновников медленной загрузки вашей системы, и о том, что с ними делать
|
||||||
|
дальше. Мы хотим помочь вам в поиске тех системных компонентов, которые являются
|
||||||
|
причинами ваших проблем.
|
||||||
|
|
||||||
|
Первый инструмент, который мы можем вам предложить, очень прост: по завершении
|
||||||
|
загрузки, systemd регистрирует в системном журнале информацию о суммарном
|
||||||
|
времени загрузки:
|
||||||
|
\begin{Verbatim}
|
||||||
|
systemd[1]: Startup finished in 2s 65ms 924us (kernel) + 2s 828ms 195us (initrd)
|
||||||
|
+ 11s 900ms 471us (userspace) = 16s 794ms 590us.
|
||||||
|
\end{Verbatim}
|
||||||
|
|
||||||
|
Эта запись означает следующее: на инициализацию ядра (до момента запуска initrd,
|
||||||
|
т.е. dracut) ушло 2 секунды. Далее, чуть менее трех секунд работал initrd. И
|
||||||
|
наконец, почти 12 секунд было потрачено systemd на запуск программ из
|
||||||
|
пространства пользователя. Итоговое время, начиная с того момента, как
|
||||||
|
загрузчик передал управление коду ядра, до того момента, как systemd завершил
|
||||||
|
все операции, связанные с загрузкой системы, составило почти 17 секунд.
|
||||||
|
Казалось бы, смысл этого числа вполне очевиден, однако не~стоит делать поспешных
|
||||||
|
выводов. Прежде всего, в нем не~учитывается время, затраченное на инициализацию
|
||||||
|
вашего сеанса в GNOME, так как эта задача уже выходит за рамки задач процесса
|
||||||
|
init. Кроме того, в этом периоде времени учитывается только работа systemd, хотя
|
||||||
|
часто бывает так, что некоторые демоны продолжают \emph{свою} работу по
|
||||||
|
инициализации уже после того, как секундомер остановлен. Проще говоря:
|
||||||
|
предложенные вам числа позволяют лишь оценить общую скорость загрузки, однако
|
||||||
|
они не~являются точной характеристикой длительности процесса.
|
||||||
|
|
||||||
|
Кроме того, эта информация носит поверхностный характер: она не~сообщает, какие
|
||||||
|
именно системные компоненты заставляют systemd ждать так долго. Чтобы исправить
|
||||||
|
это упущение, мы ввели команду +systemd-analyze blame+:
|
||||||
|
\begin{Verbatim}
|
||||||
|
$ systemd-analyze blame
|
||||||
|
6207ms udev-settle.service
|
||||||
|
5228ms cryptsetup@luks\x2d9899b85d\x2df790\x2d4d2a\x2da650\x2d8b7d2fb92cc3.service
|
||||||
|
735ms NetworkManager.service
|
||||||
|
642ms avahi-daemon.service
|
||||||
|
600ms abrtd.service
|
||||||
|
517ms rtkit-daemon.service
|
||||||
|
478ms fedora-storage-init.service
|
||||||
|
396ms dbus.service
|
||||||
|
390ms rpcidmapd.service
|
||||||
|
346ms systemd-tmpfiles-setup.service
|
||||||
|
322ms fedora-sysinit-unhack.service
|
||||||
|
316ms cups.service
|
||||||
|
310ms console-kit-log-system-start.service
|
||||||
|
309ms libvirtd.service
|
||||||
|
303ms rpcbind.service
|
||||||
|
298ms ksmtuned.service
|
||||||
|
288ms lvm2-monitor.service
|
||||||
|
281ms rpcgssd.service
|
||||||
|
277ms sshd.service
|
||||||
|
276ms livesys.service
|
||||||
|
267ms iscsid.service
|
||||||
|
236ms mdmonitor.service
|
||||||
|
234ms nfslock.service
|
||||||
|
223ms ksm.service
|
||||||
|
218ms mcelog.service
|
||||||
|
...
|
||||||
|
\end{Verbatim}
|
||||||
|
|
||||||
|
Она выводит список юнитов systemd, активированных при загрузке, с указанием
|
||||||
|
времени инициализации для каждого из них. Список отсортирован по убыванию этого
|
||||||
|
времени, поэтому наибольший интерес для нас представляют первые строчки. В нашем
|
||||||
|
случае это +udev-settle.service+ и
|
||||||
|
+cryptsetup@luks\x2d9899b85d\x2df790\x2d4d2a\x2da650\x2d8b7d2fb92cc3.service+,
|
||||||
|
инициализация которых занимает более одной секунды. Стоит отметить, что к
|
||||||
|
анализу вывода команды +systemd-analyze blame+ тоже следует подходить с
|
||||||
|
осторожностью: она не~поясняет, \emph{почему} тот или иной юнит тратит
|
||||||
|
столько-то времени, она лишь констатирует факт, что время было затрачено. Кроме
|
||||||
|
того, не~стоит забывать, что юниты могут запускаться параллельно. В частности,
|
||||||
|
если две службы были запущены одновременно, то время их инициализации будет
|
||||||
|
значительно меньше, чем сумма времен инициализации каждой из них.
|
||||||
|
|
||||||
|
Рассмотрим повнимательнее первого осквернителя нашей загрузки: службу
|
||||||
|
+udev-settle.service+. Почему ей требуется так много времени для запуска, и что
|
||||||
|
мы можем с этим сделать? Эта служба выполняет очень простую задачу: она ожидает,
|
||||||
|
пока udev завершит опрос устройств, после чего завершается. Опрос же устройств
|
||||||
|
может занимать довольно много времени. Например, в нашем случае опрос устройств
|
||||||
|
занимает более 6~секунд из-за встроенного в компьютер 3G-модема, в котором
|
||||||
|
отсутствует SIM-карта. Этот модем очень долго отвечает на запросы udev. Опрос
|
||||||
|
устройств является частью схемы, обеспечивающей работу ModemManager'а и
|
||||||
|
позволяющей NetworkManager'у упростить для вас настройку 3G. Казалось бы,
|
||||||
|
очевидно, что виновником задержек является именно ModemManager, так как опрос
|
||||||
|
устройств для него занимает слишком много времени. Но такое обвинение будет
|
||||||
|
заведомо ошибочным. Дело в том, что опрос устройств вообще является довольно
|
||||||
|
длительной процедурой. Медленный опрос 3G-устройств для ModemManager является
|
||||||
|
частным случаем, отражающим это общее правило. Хорошая система опроса устройств
|
||||||
|
обязательно должна учитывать тот факт, что операция опроса любого из устройств
|
||||||
|
может затянуться надолго. Истинной причиной наших проблем является тот факт,
|
||||||
|
что мы должны ожидать завершения опроса устройств, т.е., наличие
|
||||||
|
+udev-settle.service+ как обязательной части нашего процесса загрузки.
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|
||||||
vim:ft=tex:tw=80:spell:spelllang=ru
|
vim:ft=tex:tw=80:spell:spelllang=ru
|
||||||
|
|||||||
Reference in New Issue
Block a user