Ядро Linux в комментариях

       

Ускорение планировщика


И без того высокооптимальная функция schedule (строка ) была оптимизирована вновь. Большинство изменений связано с реструктуризацией кода, следующего после строки (system_call), т.е. ускорение достигалось за счет прямолинейной организации кода для общих случаев и разбрасывания тел операторов if по всей функции. Например, строки и , которые запускали нижние половины в случае их существования, сейчас приобрели следующий вид:

if (bh_mask & bh_active) goto handle_bh; handle_bh_back: /* ... */ handle_bh: do_bottom_half(); goto handle_bh_back;

Следовательно, если нижние половины должны запускаться, управление передается на новую метку handle_bh, которая обеспечивает выполнение нижних половин и возврат назад. При старом подходе, в нормальном случае, когда нет нижних половин для запуска, имел место переход; это связано с тем, что сгенерированный код содержал после вызова handle_bottom_halves оператор перехода. Как можно заметить, в новой версии в нормальном случае (без нижних половин) все следует прямолинейно, без переходов.



Содержание раздела