Sunday, Feb 05th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Службы ядра Статистика и планирование процессов

Статистика и планирование процессов

На старых системах FreeBSD процедура hardclock() собирала статистику использования ресурсов о том, что происходило при прерывании от часов. Эта статистика использовалась для учета ресурсов, отслеживания деятельности системы и определения будущих приоритетов планирования. Кроме того, hardclock() форсировала переключения контекстов так, чтобы процессы могли разделять время процессора.

У этого подхода есть недостатки из-за регулярных прерываний часов, поддерживающих hardclock(). Процессы могут синхронизироваться с системными часами, что приведет к неточному измерению использования ресурсов (особенно центрального процессора) и неточному профилированию [McCanne & Torek, 1993]. Можно также написать программы, которые сознательно синхронизируются с системными часами, чтобы обмануть планировщик.

На архитектурах с несколькими высокоточными программируемыми часами (таких, как PC) часы для статистики работают с частотой, отличающейся от частоты основных часов. Процедура statclock() FreeBSD работает с частотой 128 тиков в секунду и отвечает за сбор использования ресурсов для процессов. С каждым тиком она добавляет текущему выполняющемуся процессу один тик; если процесс накопил четыре тика, повторно вычисляет его приоритет. Если новый приоритет меньше, чем текущий, организует перепланировку процесса. Таким образом, для процессов, синхронизировавшихся с системными часами, по-прежнему ведется учет процессорного времени.

Процедура statclock() также собирает статистику о том, что система делает в момент тика (находится в бездействии, выполняется в режиме пользователя или выполняется в системном режиме). Наконец, она собирает основную информацию о системном вводе/выводе (наример, какие диски в данный момент активны).

Для поддержки сбора более точной профилирующей информации FreeBSD поддерживает часы профилировки. Когда один или более процессов запрашивают информацию о профилировке, профилирующие часы запускаются с частотой, относительно превосходящей частоту основных системных часов (1024 тика в секунду на PC). При каждом тике они проверяют, работает ли один из процессов, который нужно проверять. Если да, получают текущее значение счетчика команд и увеличивают счетчик, связанный с этим местом в буфере профилирования, связанном с процессом.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 26 гостей онлайн

Реклама на сайте: