Документация/cpu-load.txt говорит, что загрузка процессора Linux *может* вводить в заблуждение. Существуют ли новые (или старые) меры по смягчению последствий, о которых в нем не упоминается?

Usandobash:

var=${var/\/instances/}

Esto usa la sustitución del parámetro ${variable/pattern/replacement}para reemplazar (la primera cadena)/instancesen $varcon nada.

Esto también podría escribirse

var=${var/'/instances'/}
3
01.07.2019, 18:12
1 ответ

Вы сказали, что процесс smallhogиспользует 80% процессорного времени. Остальные 20% времени на этом ЦП приходится на прерывания! Почему smallhog.c показывает загрузку ЦП менее 100 % в моей системе?

smallhogделает что-то очень интенсивное -. Его специфическая тактика явно побеждена IRQ_TIME_ACCOUNTING. Смотри ниже.

Я подозреваю, что есть еще способ обойти тиканье таймера :-). Вероятно, вам нужен умный способ предсказать, когда сработает галочка. Например. посмотрев на /proc/interrupts.

config IRQ_TIME_ACCOUNTING
    bool "Fine granularity task level IRQ time accounting"
    depends on HAVE_IRQ_TIME_ACCOUNTING && !VIRT_CPU_ACCOUNTING_NATIVE
    help
      Select this option to enable fine granularity task irq time
      accounting. This is done by reading a timestamp on each
      transitions between softirq and hardirq state, so there can be a
      small performance impact.

      If in doubt, say N here.

Эта функция включена в конфигурациях ядра Fedora (, см./boot/config-*). На процессорах x86 используется TSC. Эту функцию можно отключить с помощью параметра времени загрузки -, tsc=noirqtime. [*]

.

Более точные методы учета

Как упоминалось в вопросе, PowerPC/S390 имеют определенный код который может учитывать процессорное время при каждом переключении контекста. Это называется VIRT_CPU_ACCOUNTING_NATIVE. Но в вашем ядре x86 этого нет.

Существует общий эквивалент, называемый VIRT_CPU_ACCOUNTING_GEN. (GEN — это сокращение от «универсальный» ). Эта функция встроена в ядро ​​Fedora. Но эта функция не активирована по умолчанию.

Вы должны внимательно прочитать :-).VIRT_CPU_ACCOUNTING_GEN только становится активным в «полных системах dynticks». Хотя конфигурация ядра Fedora включает NO_HZ_FULL, по умолчанию Fedora не включает «полные dynticks». Включение «полных dynticks» требует указания опции во время загрузки nohz_full=со списком «адаптивных -тиков CPU». («По крайней мере один не-адаптивный -тактовый ЦП должен оставаться в сети…»)

См. linux -5.2 -rc5/init/Kconfig:

menu "CPU/Task time and stats accounting"

config VIRT_CPU_ACCOUNTING
    bool

choice
    prompt "Cputime accounting"
    default TICK_CPU_ACCOUNTING if !PPC64
    default VIRT_CPU_ACCOUNTING_NATIVE if PPC64

# Kind of a stub config for the pure tick based cputime accounting
config TICK_CPU_ACCOUNTING
    bool "Simple tick based cputime accounting"
    depends on !S390 && !NO_HZ_FULL
    help
      This is the basic tick based cputime accounting that maintains
      statistics about user, system and idle time spent on per jiffies
      granularity.

      If unsure, say Y.

config VIRT_CPU_ACCOUNTING_NATIVE
    bool "Deterministic task and CPU time accounting"
    depends on HAVE_VIRT_CPU_ACCOUNTING && !NO_HZ_FULL
    select VIRT_CPU_ACCOUNTING
    help
      Select this option to enable more accurate task and CPU time
      accounting.  This is done by reading a CPU counter on each
      kernel entry and exit and on transitions within the kernel
      between system, softirq and hardirq state, so there is a
      small performance impact.  In the case of s390 or IBM POWER > 5,
      this also enables accounting of stolen time on logically-partitioned
      systems.

config VIRT_CPU_ACCOUNTING_GEN
    bool "Full dynticks CPU time accounting"
    depends on HAVE_CONTEXT_TRACKING
    depends on HAVE_VIRT_CPU_ACCOUNTING_GEN
    depends on GENERIC_CLOCKEVENTS
    select VIRT_CPU_ACCOUNTING
    select CONTEXT_TRACKING
    help
      Select this option to enable task and CPU time accounting on full
      dynticks systems. This accounting is implemented by watching every
      kernel-user boundaries using the context tracking subsystem.
      The accounting is thus performed at the expense of some significant
      overhead.

      For now this is only useful if you are working on the full
      dynticks subsystem development.

      If unsure, say N.

endchoice

Я перечеркнул последний абзац, потому что он устарел. В настоящее время разработана «полная подсистема dynticks».

[ *] Соображения TSC

Если процессор x86 не имеет TSC, ядро ​​не пытается использовать какой-либо другой источник аппаратных часов дляIRQ_TIME_ACCOUNTING(или для VIRT_CPU_ACCOUNTING_GEN).

Код предполагает, что любой доступный TSC принимается. Я не знаю, насколько хорошо это работает с процессорами, у которых нетconstant_tsc:-). Хотя я на 99,9% уверен, что соответствующие сопровождающие знали об этой проблеме и спросили бы, почему это приемлемо.

См. родной _запланированный _часы()и tsc _инициализация():

/*
 * Fall back to jiffies if there's no TSC available:
 * ( But note that we still use it if the TSC is marked
 *   unstable. We do this because unlike Time Of Day,
 *   the scheduler clock tolerates small errors and it's
 *   very important for it to be as fast as the platform
 *   can achieve it. )
 */
1
27.01.2020, 21:29

Теги

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