The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Сокращение времени загрузки Fedora 17 c 15 до 3 секунд
Изложенные в данной статье инструкции позволяют сократить до трёх секунд
загрузку дистрибутива Fedora 17 с NetworkManager до экрана приглашения входа в
систему от GDM. Указанная конфигурация опробована на ноутбуке Lenovo T420s
(2x2x Intel Core i5-2540M CPU @ 2.60GHz) и SSD-накопителем Intel SSDSA2BW160G3L.

1. Используем простейшую конфигурацию разбиения диска с загрузочным и рабочим
разделами с файловой системой Ext4:

   sda1 ext4 /boot
   sda2 swap
   sda3 ext4 /

После установки дистрибутива потребуется как минимум две перезагрузки для
достижения оптимального времени загрузки из-за необходимости адаптации к
загрузочной последовательности механизма readahead (вначале readahead собирает
информацию о загружаемых программах и библиотеках, после чего начнёт разом
загружать компоненты в кэш страниц памяти).

Обновляем все пакеты, активируем prelink и устанавливаем пакет systemd-analyze:

   sudo yum update
   sudo /etc/cron.daily/prelink
   sudo yum install systemd-analyze


После перезагрузки выполняем:

   sudo systemd-analyze

   Startup finished in 1413ms (kernel) + 2911ms (initramfs) + 10593ms (userspace) = 14918ms

Как видим в штатном режиме дистрибутив загрузился за 15 секунд.

Начинаем оптимизацию. 
Отключаем initramfs - так как в ядро встроена поддержка файловой системы ext4,
поэтому для монтирования корневого раздела не требуется загрузка дополнительных
модулей ядра. В параметрах загрузки явно указываем имя корневого раздела (без
UUID) и тип ФС. Содержимое /etc/grub2.cfg должно выглядеть примерно так:

   linux /vmlinuz-3.3.7-1.fc17.x86_64 root=/dev/sda3 rootfstype=ext4 quiet libahci.ignore_sss=1 raid=noautodetect
   # initrd /initramfs-3.3.7-1.fc17.x86_64.img

Опции "raid=noautodetect" и "libahci.ignore_sss=1" позволяют ускорить время
инициализации ядра из-за пропуска дополнительных проверок.

После перезагрузки systemd-analyze показывает сокращение времени до 14684ms.
Продолжаем оптимизацию.

Так как на компьютере не используются  LVM, RAID и шифрование можно смело
отключить все сервисы fedora-*storage*. Дополнительно можно отключить систему
вывода заставки  plymouth, так как нам важнее скорость а не эстетическое
наслаждение от ожидания завершения загрузки. Для отключения указанных сервисов
следует использовать команду "systemctl mask", достоинство которой ещё и в том,
что %post скрипт RPM в дальнейшем не включит сервис автоматически.

   cd /lib/systemd/system
   for i in fedora*storage* plymouth-*.* lvm2-monitor.* mdmonitor*.*; do sudo systemctl mask $i;done

Одновременно отключим лишние SysV-скрипты  livesys, livesys-late и spice-vdagentd:

   for i in livesys livesys-late spice-vdagentd ; do sudo chkconfig $i off;done

Перезагружаем систему и наблюдаем через systemd-analyze сокращение времени загрузки до 8197ms

Далее переходим к экстремальным действиям и отключаем все сервисы, кроме
NetworkManager, поэтому важно запомнить что именно было отключено, так как в
результате будет получена система без почты, межсетевого экрана, системы
печати, утилит abrt,  avahi, некоторых точек монтирования, rsyslog, irqbalance
и защиты selinux.

   cd /lib/systemd/system
   for i in abrt*.service auditd.service avahi-daemon.* bluetooth.* dev-hugepages.mount dev-mqueue.mount \\
      fedora-configure.service fedora-loadmodules.service fedora-readonly.service ip6tables.service \\
      iptables.service irqbalance.service mcelog.service rsyslog.service sendmail.service sm-client.service \\
      sys-kernel-config.mount sys-kernel-debug.mount; do \\
    sudo systemctl mask $i; \\
   done

Для отключения selinux правим  файл /etc/selinux/config и добавляем настройку
"selinux=0" в строку с параметрами ядра. Настройки /etc/grub2.cfg принимают
примерно такой вид:

   linux /vmlinuz-3.3.7-1.fc17.x86_64 root=/dev/sda3 rootfstype=ext4 libahci.ignore_sss=1 raid=noautodetect selinux=0
   #  initrd /initramfs-3.3.7-1.fc17.x86_64.img


Перезагружаемся и наблюдаем по systemd-analyze сокращение загрузки до 2926ms.

Но идеи по оптимизации пока не исчерпаны. Попробует выжать ещё времени через
манипуляции с монтированием разделов. Переводим раздел /boot в режим
"монтирование по требованию" и создаём раздел /tmp с использованием  tmpfs для
сокращения нагрузки на диск в процессе загрузки. В результате /etc/fstab будет
выглядеть следующим образом:

   /dev/sda3  /                       ext4    defaults        1 1
   /dev/sda1  /boot                   ext4    noauto,comment=systemd.automount     1 2
   /dev/sda2  swap                    swap    defaults        0 0
   tmpfs      /tmp                    tmpfs   defaults        0 0

После перезагрузки systemd-analyze выдаёт 2769ms.

Так как NetworkManager запускается также при старте программы входа в систему,
можно отключить приводящую к загрузке  NetworkManagers зависимость на уровне
multi-user, так как он всё равно будет параллельно запущен при запуске gdm,
зависимость для которого остаётся.

   sudo rm /etc/systemd/system/multi-user.target.wants/NetworkManager.service

Проверяем время загрузки - 2603ms.

Для проверки насколько readahead влияет на время загрузки  для эксперимента
временно выключим readahead:

   cd /lib/systemd/system   
   for i in *readahead*; do sudo systemctl mask $i;done

После перезагрузки systemd-analyze показывает 2547ms. Но несмотря на сокращение
времени загрузки до запуска экрана входа в систему, сам э
кран визуально появляется с некоторой задержкой. Для того чтобы более точно
оценить время загрузки воспользуемся секундомером.

   sudo dracut -f

Время загрузки с readahead и возвращённым initramfs: 

   systemd-analyze 
   Startup finished in 803ms (kernel) + 2217ms (initramfs) + 1018ms (userspace) = 4039ms

При сборке initramfs без plymouth и в режиме только хоста:

   sudo dracut -f -H -o plymouth

получаем:

   systemd-analyze 
   Startup finished in 612ms (kernel) + 499ms (initramfs) + 1330ms (userspace) = 2443ms

Следует иметь в виде,  что сервисы  отключенные через "systemctl mask" при
необходимости  можно в любой момент вернуть командой "systemctl unmask".
 
31.05.2012 , Источник: http://www.harald-hoyer.de/personal...
Ключи: fedora, boot, speed, optimization, systemd / Лицензия: CC-BY
Раздел:    Корень / Администратору / Система / Загрузка, однопользовательский режим

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Anonymousw (?), 19:56, 31/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    тут не сказано про настрйки prelink и как быть с wine, так-как prelink "убивает" вайн если проходиться по его компонентам, ещё есть e4rat который дефрагментит и предзагружает файлы для загрузки, но это не более чем изврат.
     
  • 1.2, pavlinux (ok), 20:00, 31/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >  Опции "raid=noautodetect" и "libahci.ignore_sss=1" позволяют ускорить время
    > инициализации ядра из-за пропуска дополнительных проверок.

    После сделать dmesg | grep 'lpj='
    и дописать в ядро этот loop per jitter, например lpj=11111111
    (по 50 мс на ядро, cэкономит.)

    А так же,
    - похрерачить все символы через strip -S
    - дисковый раздел должен быть один! Никаких /boot, /run, /var...
    - в ядре дефлотным IO шыдулером сделать deadline, потом менять на нужный...
    ...

    B И ваще, оптимизация начинается с кастрации ядра, чтоб не писать raid=noautodetect :)


    > irqbalance

    Уже сто тыщь раз писали, что с меньше чем 8 ПРОЦЕССОРАМИ (не ядрами),
    оно без полезно в режиме демона, можно раз в полчаса вызывать с флагом --oneshot


     
     
  • 2.4, Аноним (-), 22:00, 31/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > А так же,
    > - похрерачить все символы через strip -S

    символы в отдельных пакетах -debuginfo, которые по умолчанию не установлены

     
     
  • 3.5, an. (?), 23:06, 31/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > символы в отдельных пакетах -debuginfo, которые по умолчанию не установлены

    символы (отладочная информация) - да, отдельно, но после компиляции в библиотеках все равно хранятся имена функций, которые можно удалить с помощью strip (подробности man strip).

     
     
  • 4.6, Аноним (-), 23:26, 31/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    /usr/lib/rpm/redhat/brp-strip-static-archive выполняет 'strip -g' , а это то же, что и 'strip -S'
     
     
  • 5.7, pavlinux (ok), 00:40, 01/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Ах да, теперь маленькая -s (ака --strip-all), раньше -S ваще не было.  

    Но стрипать банарники, это самая последняя стадия,
    когда уже всё оптимизированно по самые "неболуйся".  

     

  • 1.3, pavlinux (ok), 20:12, 31/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > sudo rm /etc/systemd/system/multi-user.target.wants/NetworkManager.service

    Уважаю! :)

     
  • 1.8, xandry (ok), 21:27, 01/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Опции "raid=noautodetect" и "libahci.ignore_sss=1" позволяют ускорить время

    инициализации ядра из-за пропуска дополнительных проверок.

    Каких проверок? Если с "raid=noautodetect" всё более менее понятно из названия, то что делает "libahci.ignore_sss=1"?

     
     
  • 2.9, pavlinux (ok), 03:39, 02/06/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Дикий баян, за 2009 год Тогда уже юзали в Оpenembbedded, OSADL, RTLinux, ART Li... большой текст свёрнут, показать
     

  • 1.10, Аноним (-), 18:12, 20/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > 17 c 15 до 3 секунд?

    Так со скольких до скольки?

     
  • 1.11, СуперАноним (?), 12:48, 24/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Лучше потерять время на монтирование при загрузке, но сделать отдельный раздел для /home, чем париться с копированием туда-сюда при необходимости полной переустановки системы.
     
     
  • 2.12, Feodor Slonikov (?), 00:25, 13/01/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Лучше потерять время на монтирование при загрузке, но сделать отдельный раздел для
    > /home, чем париться с копированием туда-сюда при необходимости полной переустановки системы.

    после этой оптимизации чего улучшение всего 8 сек вместо обещанных много :)
    но  проблемка появилась не переключается раскладка  комбинации клавиш менял но переключить получается только выбором в панели keyboard layouts
    спасайте меня все! и со старым новым годом :)

     

  • 1.13, partizan (??), 12:03, 23/12/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    У меня вообще что-то странное случилось. Время загрузки более 3-х минут.

    [root@comp-celeron-cpu-c52aa6 ~]# sudo systemd-analyze
    Startup finished in 3.985s (kernel) + 3min 884ms (userspace) = 3min 4.870s
    [root@comp-celeron-cpu-c52aa6 ~]#

    что делать с этим (userspace)?
    Система перестала вообще грузится, т.к. диск забился под завязку всяким хламом (как я потом выяснил). Диск почистил от мусора. Стала загружаться система. Но вот так надолго подвисает.

    В Линукс я не эксперт. Подскажите хоть направление, где искать решение.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру