Разработчики MontaVista рассказали о методах сокращения загрузки Linux до 1 сек

Летом прошлого года компания MontaVista продемонстрировала загружаемый менее чем за 1 секунду вариант своего Linux дистрибутива для встраиваемых устройств. На днях разработчики MontaVista дали интервью изданию EDN, в котором рассказали о дальнейшем продвижении в оптимизации процесса загрузки. Сокращение времени от включения устройства до готовности к работе пользовательского приложения особенно востребовано для нетбуков, мобильных устройств и такого оборудования, как информационные табло.

Современные процессоры способны выполнять миллиарды операций в секунду, основные задержки в процессе загрузки главным образом связаны с инициализацией оборудования и операциями ввода/вывода. Для того чтобы добиться уменьшения времени загрузки до 1 секунды, в MontaVista работа была разделена на три стадии:

  1. Оптимизация работы загрузчика и сокращение объема загружаемого кода. Так как основная цель разработки - мобильные устройства, был принят тезис, что аппаратное окружение между перезагрузками не изменяется, что позволило заведомо исключить из ядра ненужные драйверы и проверки. В итоге, время загрузки было сокращено до 7 секунд.
  2. Оптимизация процесса инициализации. С учетом особенностей текущего аппаратного обеспечения, процесс инициализации был разделен на несколько параллельных ветвей, для одновременного выполнения задач в которых в процессе загрузки активно используется DMA (direct-memory-access). DMA-агенты перемещают различные загрузочные задачи между Flash-памятью и памятью CPU, что используется для фонового выполнения операций с минимальной нагрузкой на CPU, кэша в котором вполне хватает для выполнения подобных вещей в параллельном режиме. Использование DMA позволило сократить время загрузки с 7 до 4 секунд.
  3. Оптимизация запуска пользовательских приложений. Для запуска первичных приложений используется RAM-диск. Приложения загружаются прямо в кэш страниц памяти ядра, минуя стадию связывания и запуска. Дополнительно, при взаимодействии с разработчиками прикладных программ, проводится разделение приложения на логические части. Вместо загрузки всей программы, осуществляется загрузка лишь самого необходимого для начала работы кода. В итоге, время загрузки удалось свести к примерно 1 секунде.

©  OpenNet