Замена алгоритма сортировки в sysinit позволила ускорить загрузку FreeBSD

Во FreeBSD принято изменение, меняющее в коде инициализации ядра (sysinit) алгоритм сортировки массивов. Вместо ранее применявшегося алгоритма пузырьковой сортировки в sysinit задействован более эффективный алгоритм сортировки слиянием, что позволило на 2 мс сократить время загрузки ядра в виртуальных машинах Firecracker.

Метод пузырьковой сортировки предназначен в основном для учебных целей и из-за повторяющегося перебора (сложность “O(N^2)”) эффективен только для небольших массивов. В sysinit на выполнение более тысячи операций пузырьковой сортировки уходило примерно 7% от всего времени загрузки ядра FreeBSD.

Использование сортировки слиянием позволило устранить эту задержку, так как данный алгоритм решает ту же задачу примерно в 100 раз быстрее. Кроме смены алгоритма для сокращения времени сортировки и уменьшения операций выделения памяти в ядре также задействована оптимизация на основе слияния отсортированных списков, вместо повторной сортировки каждого дополненного списка.

Release. Ссылка here.