Отслеживание нагрузки на систему
Каждое ядро Unix следит за уровнем активности процессора в системе. Эта статистика нужна различным администраторным утилитам, таким как top. Если пользователь введет команду uptime, он получит статистику в виде "средней загруженности" за последнюю минуту, последние 5 минут и последние 15 минут. В однопроцессорной системе значение 0 говорит об отсутствии активных процессов (кроме процесса swapper с идентификатором 0), значение свидетельствует о стопроцентной занятости процессора одним процессом, а значения, превышающие , указывают на то, что процессор совместно используется несколькими активными процессами.
На каждом тике функция update times вызывает функцию caic ioado, которая подсчитывает количество процессов, находящихся в состоянии task_runn ing или тask_unInterruрт Ible и использует результат для обновления средней нагрузки на систему.
Профилирование кода ядра
Linux включает в себя профайлер кода readprofile, используемый разработчиками этой операционной системы для определения, на какие функции уходит время в режиме ядра. Профайлер идентифицирует горячие зоны ядра, т. е. наиболее часто выполняемые фрагменты кода ядра. Идентификация таких фрагментов очень важна, поскольку она позволяет выявить функции ядра, подлежащие дальнейшей оптимизации.
Профайлер основан на простом алгоритме Монте-Карло. При каждом прерывании по таймеру ядро определяет, произошло ли данное прерывание в режиме ядра. Если это так, ядро извлекает из стека значение, которое было в регистре eip перед прерыванием, и использует его для определения, чем ядро занималось до прерывания. В долгосрочной перспективе выборки аккумулируются в горячих зонах.
Функция profiie ticko собирает данные для профайлера кода. Она вызывается либо функцией do timer interrupt (которую вызывает обработчик глобальных прерываний по таймеру) в однопроцессорной системе, либо функцией smp iocai timer interrupt (которую вызывает обработчик локальных прерываний по таймеру) в многопроцессорной системе.
Чтобы профайлер работал, ядру Linux при загрузке должна быть передана в качестве параметра строка prof iie=N, где значение N таково, что N определяет размер фрагментов кода, подлежащих профилированию. Собранные данные можно прочитать в файле /proc/profile. При записи в этот файл счетчики сбрасываются, а в многопроцессорных системах запись в файл может также изменить частоту выборки. Впрочем, разработчики ядра, как правило, не обращаются к файлу /proc/profile непосредственно; вместо этого они пользуются системной командой readprofile.
Ядро Linux включает в себя еще один профайлер, называемый oprofile. Будучи более гибким и настраиваемым, чем readprofile, профайлер oprofile может применяться для обнаружения горячих зон в коде ядра, приложениях режима пользователя и системных библиотеках. Когда работает oprofile, функция profiie_tick вызывает функцию timer_notify() для сбора данных, нужных этому новейшему профайлеру.
Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | Следующая страница