Как рассчитывается средняя загрузка во FreeBSD?

Если вы хотите использовать awk :

awk 'BEGIN {RS="\n|\\||;|\\$\\("}
     $1 ~ /^[0-9]+\./ {print $2; next}
     {print $1}' file | sort | uniq

Объяснение : Сообщите awk, что вашим разделителем записей может быть новая строка ИЛИ "|", ИЛИ ";", ИЛИ "$ (", таким образом передаваемые по конвейеру, заменяемые или связанные команды разделяются на записи. Затем проверьте, является ли ваше первое поле числом, за которым следует точка, если да, то вы в начале строки, поэтому выведите второе поле; в противном случае выведите первое поле.

2
01.02.2017, 12:21
1 ответ

В традициях UTSL я вставил код, выполняющий вычисления. Здесь nrun = sched_load () - это общее количество «готовых к запуску» процессов в этот момент, а avg указывает на структуру с 3 числами с фиксированной запятой (1,5,15 минут). cexp - это магические числа для уменьшения значений на 1,5 и 15 минут. Для справки это находится в /usr/src/sys/kern/kern_synch.c ... который я мог бы порекомендовать как увлекательное чтение.

Что касается FreeBSD, то больше всего людей удивляет в отзывчивых машинах с высокой средней нагрузкой то, что точечное пробуждение большого количества процессов может сильно завышать числа. IE: если 400-ish процессы все вместе просыпаются (иногда это делают веб-серверы или серверы баз данных).

/*
 * Compute a tenex style load average of a quantity on
 * 1, 5 and 15 minute intervals.
 */
static void
loadav(void *arg)
{
    int i, nrun;
    struct loadavg *avg;

    nrun = sched_load();
    avg = &averunnable;

    for (i = 0; i < 3; i++)
        avg->ldavg[i] = (cexp[i] * avg->ldavg[i] +
            nrun * FSCALE * (FSCALE - cexp[i])) >> FSHIFT;
    /*
     * Schedule the next update to occur after 5 seconds, but add a
     * random variation to avoid synchronisation with processes that
     * run at regular intervals.
     */
    callout_reset_sbt(&loadav_callout,
        SBT_1US * (4000000 + (int)(random() % 2000001)), SBT_1US,
        loadav, NULL, C_DIRECT_EXEC | C_PREL(32));
}
1
27.01.2020, 22:19

Теги

Похожие вопросы