8.7 Профілювання
Профілювання являє собою спосіб пошуку вузьких місць у процесі виконання програми, тому його результати можуть бути використані для збільшення продуктивності. Є кілька важливих питань, які потребують відповіді:
▪ Навіщо потрібне профільування? Більшість систем, що вбудовуються, мають дуже обмежені ресурси з точки зору загальної пам'яті і частоти процесора. Тому дуже важливо забезпечити, щоб ці ресурси використовувалися оптимально. За допомогою профілювання визначаються різні вузькі місця у програмі. Усунення цих вузьких місць веде до збільшення продуктивності системи та оптимального використання ресурсів.
▪ Що вимірюється у процесі профілювання? Це включає такі величини, як відсоток часу виконання в кожній частині програми і використання пам'яті різними модулями програми. Для драйверів це може бути загальний час заборони переривань, і таке інше.
▪ Як використовуються результати профілювання? Результати профілювання використовують для оптимізації програм; проблемні частини коду можуть бути переписані за допомогою кращого алгоритму.
▪ Що є інструментами профілювання? Роль інструмента профілювання полягає в тому, щоб зв'язати вузькі місця, виявлені в ході виконання, з вихідним кодом, що лежить в основі. Інструменти профілювання також надають користувачеві дані профілювання у вигляді графіка, гістограми або іншого зручного для людини формату.
▪ Яким має бути середовище профілювання? Під час профілювання програмі мають даватися реалістичні вхідні сигнали. Для отримання більш точних результатів профілювання вся налагоджувальна інформація має бути вимкнена. Нарешті, вплив самого інструмента профілювання на результати має бутивідомо заздалегідь.
У цьому розділі ми обговоримо три профільники: eProf, OProfile та Kernel Function Instrumentation (KFI). Спочатку ми обговоримо eProf, вбудований профільувальник, який можна використовувати під час розробки програми. Далі ми обговоримо OProfile, який є дуже потужним інструментом профілювання. Нарешті, ми обговоримо KFI для функціонування ядра. Ці профільники переважно сконцентровані на часі виконання різних частин програми.