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