Какое наименьшее временное разрешение для несколько точных измерений загрузки процессора?

#linux #cpu-usage #performance

#linux #загрузка процессора #Производительность

Вопрос:

Некоторые из параметров, которые я хочу измерить, очень короткие, и я могу повторять их столько раз, только если не буду запускать какой-либо код установки / удаления в середине.

примечание: в Linux чтение /proc/stat

Комментарии:

1. Следовательно, вы имеете в виду » самое высокое временное разрешение»?

Ответ №1:

Не очень портативно, и вам придется проявлять большую осторожность, чтобы обеспечить его надежность, но счетчик отметок времени определенно имеет самое высокое доступное разрешение (увеличивается с каждым тактом процессора).

Счетчик временных меток до недавнего времени был отличным способом получения информации о времени процессора с высоким разрешением и низкими накладными расходами. С появлением многоядерных / гиперпоточных процессоров, систем с несколькими процессорами и операционных систем, находящихся в «спящем режиме», на TSC нельзя положиться в предоставлении точных результатов — если не предпринять больших усилий для исправления возможных недостатков: частоты тика и того, все ли ядра (процессоры) имеют одинаковые значения в своих регистрах учета времени. Нет никаких гарантий, что счетчики временных меток нескольких процессоров на одной материнской плате будут синхронизированы. В таких случаях программисты могут получить надежные результаты, только привязав свой код к одному процессору. Даже в этом случае скорость процессора может измениться из-за мер по энергосбережению, принятых ОС или BIOS, или система может перейти в режим гибернации, а затем возобновиться (сброс счетчика временных меток). В этих последних случаях, чтобы оставаться актуальными, счетчик необходимо периодически перекалибровать (в соответствии с временным разрешением, требуемым вашим приложением).

На странице также есть несколько заметок о решениях, специфичных для Linux:

В Linux аналогичная функциональность обеспечивается считыванием значения CLOCK_MONOTONIC clock с помощью функции POSIX clock_gettime.