Ihads.ru

Все про недвижимость
40 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как собрать счетчики производительности процессора в Windows

Как собрать счетчики производительности процессора в Windows?

Периодически мои подписчики задают мне вопросы о том, как проводить микроархитектурный анализ в Windows? Если честно, это никогда не представляло для меня какой-то особой проблемы. Угадайте почему? Потому что я работаю в Intel и, конечно же, у меня есть лицензия для использования Intel® VTune™ Amplifier. Поэтому я не могу полностью прочувствовать боль людей, которые заняты работой, связанной с производительностью в Windows, и не имеют доступа к Vtune или AMD CodeAnalyst. Поскольку это не было для меня проблемой, я ничего не предпринимал для ее решения. Наконец, недавно я просматривал блог Бартека посвященный кодингу и наткнулся на статью «Любопытный случай с производительностью бранчинга». Мне это показалось случаем, который можно легко проверить, просто запустив perf stat, если бы мы работали в Linux. Но поскольку мы работаем в Windows… все не так просто.

В этой статье я хочу представить один из способов сбора PMU-счетчиков без Intel® VTune™ Amplifier. Почти всю необходимую информацию я взял из блога Брюса Доусона. Он написал статью, которую я хочу расширить и сделать ее более пошаговой. Т.е., все лавры здесь принадлежит Брюсу, потому что не я автор этой работы. Если вы хотите поэкспериментировать сами, я предлагаю вам сначала воспроизвести пример, описанный в статье Брюса (вот ссылка на github с исходниками и скриптами).

Однако не воспринимайте все, что написано в моей статье, за чистую монету. Я не Windows-разработчик и не трачу много времени на анализ производительности в Windows. Это всего лишь один из способов сбора PMU-счетчиков — могут быть и другие, более простые и надежные. В конце концов, вы всегда можете приобрести Intel® VTune™ Amplifier, который, кстати, может быть довольно дорогим. Но сразу хочу сказать, что, если вы собираетесь проводить серьезный анализ производительности и тюнинг в Windows, реальных альтернатив Vtune нет (и это не реклама).

Какие инструменты вам понадобятся?

xperf. Вам необходимо установить Windows Performance Toolkit, который является частью Windows Assessment and Deployment Kit (Windows ADK). У меня xperf был автоматически добавлен в PATH.

tracelog. Следуйте этим инструкциям, чтобы получить этот инструмент. Вам необходимо установить следующие компоненты:

Windows Driver Kit

Tracelog не был добавлен в мой PATH, но мне удалось найти его по следующему пути: » C:Program Files (x86)Windows Kits10bin10.0.17763.0×64 «. У вас этот путь может отличаться.

Для установки всех этих комплектов потребуется некоторое время, поэтому запаситесь терпением.

Использование tracelog и xperf для сбора трейсов

Я буду использовать пример, приведенный Брюсом, частично повторяя его действия. Вот как вы можете получить трейсы (с информацией о неправильных прогнозах бранчинга) из своего приложения, используя упомянутые выше инструменты (следует запускать от имени администратора):

Если мы заглянем в pmccounters.txt, внутри мы увидим все трейсы в текстовом формате. Из них можно извлечь много интересного, но давайте сосредоточимся на двух вещах:

Читайте так же:
Не работает счетчик пробега дэу матиз

Событии Pmc (счетчик мониторинга производительности):

Событии CSwitch (переключение контекста):

Рассмотрим этот фрагмент трейса:

Обратите внимание, что для каждого события CSwitch есть соответствующее событие Pmc. Мы видим, что они имеют одинаковые таймстемпы. В этом фрагменте трейса произошло переключение контекста с нашего процесса ( ConditionalCount.exe ) на другой процесс ( csrss.exe ). Мы можем увидеть это, посмотрев на Old Process Name (PID) события CSwitch с таймстемпом 214821. Т.е. был некоторый период времени, в течение которого ConditionalCount.exe выполнялся на ЦП (между таймстемпами 214821 и 214810).

Значение счетчика BranchMispredictions постоянно увеличивается. Мы можем подсчитать, сколько было ошибочных прогнозов бранчинга за этот период времени, посчитав разницу этих значений в двух событиях Pmc. Для этого фрагмента было 1101713 — 1101534 = 179 неверных прогнозов бранчинга. Суммируя все дельты, мы можем рассчитать общее количество ошибочных прогнозов бранчинга за все время работы приложения.

Совет от профессионала: если вы наблюдаете показатели, которые отличаются от ожидаемых, я все таки рекомендую вам попробовать запустить тот же бенчмарк в Linux с помощью команды perf stat . Вы можете найти множество статей о том, как это сделать, в моем блоге. Другой способ — сбросить сборку и проверить наличие ожидаемого кода. Возможно, компилятор сделал что-то умное и удалил код, который вы хотели протестировать.

Анализ трейсов с помощью скрипта Python

Для анализа трейсов и извлечения информации Брюс написал специальный скрипт. Этот скрипт извлекает значения PMC для процессов, которые нас интересуют (2 аргумента):

Вот результат, который я получил на своем компьютере (Win 10, Intel (R) Core (TM) i5-7300U).

Vtune показывает аналогичные результаты.

Какие еще счетчики мы можем собрать?

Заключение

Этот метод еле-еле дотягивает до того, что умеют делать Vtune или perf в Linux. Количество счетчиков ограничено, и это только подсчет без сэмплинга (см. разницу между подсчетом и сэмплингом здесь). Так-то это так, но, по крайней мере, вы можете провести предварительный анализ производительности.

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

Если вы знаете какой-либо другой способ сделать это проще или лучше, дайте мне знать. Я определенно хотел бы узнать его.

Я надеюсь, что это также поможет людям, которые используют Windows и хотят участвовать в моем конкурсе. Если это так, подписывайтесь с помощью формы внизу страницы.

Перевод данной статьи был подготовлен в преддверии старта курса «Нагрузочное тестирование».

Также приглашаем всех желающих зарегистрироваться на демо-урок курса по теме «Проведение нагрузочного тестирования в средстве Performance center».

1. Откройте Performance Monitor с помощью поиска (все версии Windows)

В Windows 10 и Windows 7 вы можете осуществлять поиск, используя полное имя инструмента Performance Monitor . Во всех версиях Windows вы можете искать по имени исполняемого файла: perfmon .

Читайте так же:
Журналы счетчиков windows 7

В Windows 10 щелкните или коснитесь поля поиска на панели задач, введите « Монитор производительности » или выполните в нем перфмон , а затем щелкните или коснитесь результата с тем же именем.

В Windows 8.1 начните вводить « perfmon » на начальном экране. При наборе активируется функция поиска, и в появившихся результатах нажмите или коснитесь perfmon .

В Windows 7 откройте меню «Пуск» и введите « Монитор производительности » в поле поиска. В списке результатов нажмите на системный монитор .

Интернет прокси-сервер

Возможна отправка данных через интернет используя прокси, это штатная возможность платформы, для этого необходимо настроить служебный файл платформы inetcfg.xml.

Содержимое файла должно быть примерно следующим:
<InternetProxy
protocols=»http=10.1.0.8:8080 10.1.0.9:8080″
user=»proxyUser»
password=»proxyPassword»
bypassOnLocal=»true»
bypassOnAddresses=»127.0.0.1 *.master»
/>

Подробнее смотрите в документации к 1С или на ИТС

Этап II. Настройка счетчиков производительности.

Создаем новый набор счетчиков.

Идём в контрольную панель и вызываем «Administrative Tools» (Control PanelAll Control Panel ItemsAdministrative Tools)

Открываем «Performance Monitor» и в раздел «User Defined» добавляем новую коллекцию счетчиков:

Выбираем «Create manually (Advanced)»:

Указываем, что мы хотим логировать именно счетчики производительности:

На следующем экране представлены все возможные счетчики. Для примера возьмем один:

В разделе «Processor» есть счетчик «% Processor time». В нижнем списке уточняем, какое ядро хотим мониторить. Для примера выбираем «Total» и нажимаем «Add». Это позволит отслеживать в процентах общую нагрузку по всем ядрам.

Указываем интервал сбора данных. Выбираем, к примеру, 15 секунд.

Далее без изменений, поэтому можно сразу жать «финиш». В итоге получаем набор счетчиков, но он пока не запущен, и запускать его пока что рано.

Перенастраиваем набор на БД MS SQL

Заходим в DataCollector01 и перевыбираем параметр Log format с Binary на SQL

Далее в параметре «Data source name» выбираем созданный в первом разделе провайдер

Идём в настройки New Data Collector Set. На закладке «Schedule» добавляем задание по старту счетчиков на ежедневной основе.

На закладке «Stop Condition» выставляем условия окончания сбора счетчиков. Я выбрал в качестве ограничения размер БД в 10 Гб.

Сохраняем и з апускаем счетчики

Проверяем, что данные начали собираться в БД MS SQL:

Этап II. Настройка счетчиков производительности.

Создаем новый набор счетчиков.

Идём в контрольную панель и вызываем «Administrative Tools» (Control PanelAll Control Panel ItemsAdministrative Tools)

Открываем «Performance Monitor» и в раздел «User Defined» добавляем новую коллекцию счетчиков:

Выбираем «Create manually (Advanced)»:

Указываем, что мы хотим логировать именно счетчики производительности:

На следующем экране представлены все возможные счетчики. Для примера возьмем один:

В разделе «Processor» есть счетчик «% Processor time». В нижнем списке уточняем, какое ядро хотим мониторить. Для примера выбираем «Total» и нажимаем «Add». Это позволит отслеживать в процентах общую нагрузку по всем ядрам.

Указываем интервал сбора данных. Выбираем, к примеру, 15 секунд.

Читайте так же:
Для чего нужен счетчик гугл

Далее без изменений, поэтому можно сразу жать «финиш». В итоге получаем набор счетчиков, но он пока не запущен, и запускать его пока что рано.

Перенастраиваем набор на БД MS SQL

Заходим в DataCollector01 и перевыбираем параметр Log format с Binary на SQL

Далее в параметре «Data source name» выбираем созданный в первом разделе провайдер

Идём в настройки New Data Collector Set. На закладке «Schedule» добавляем задание по старту счетчиков на ежедневной основе.

На закладке «Stop Condition» выставляем условия окончания сбора счетчиков. Я выбрал в качестве ограничения размер БД в 10 Гб.

Сохраняем и з апускаем счетчики

Проверяем, что данные начали собираться в БД MS SQL:

Этап II. Настройка счетчиков производительности.

Создаем новый набор счетчиков.

Идём в контрольную панель и вызываем «Administrative Tools» (Control PanelAll Control Panel ItemsAdministrative Tools)

Открываем «Performance Monitor» и в раздел «User Defined» добавляем новую коллекцию счетчиков:

Выбираем «Create manually (Advanced)»:

Указываем, что мы хотим логировать именно счетчики производительности:

На следующем экране представлены все возможные счетчики. Для примера возьмем один:

В разделе «Processor» есть счетчик «% Processor time». В нижнем списке уточняем, какое ядро хотим мониторить. Для примера выбираем «Total» и нажимаем «Add». Это позволит отслеживать в процентах общую нагрузку по всем ядрам.

Указываем интервал сбора данных. Выбираем, к примеру, 15 секунд.

Далее без изменений, поэтому можно сразу жать «финиш». В итоге получаем набор счетчиков, но он пока не запущен, и запускать его пока что рано.

Перенастраиваем набор на БД MS SQL

Заходим в DataCollector01 и перевыбираем параметр Log format с Binary на SQL

Далее в параметре «Data source name» выбираем созданный в первом разделе провайдер

Идём в настройки New Data Collector Set. На закладке «Schedule» добавляем задание по старту счетчиков на ежедневной основе.

На закладке «Stop Condition» выставляем условия окончания сбора счетчиков. Я выбрал в качестве ограничения размер БД в 10 Гб.

Сохраняем и з апускаем счетчики

Проверяем, что данные начали собираться в БД MS SQL:

Этап III. Получение данных и их обработка в 1С

Теперь нужно получить данные из этой БД и как-то интерпретировать. Для этого нам понадобятся 2 функции:

Подключение к БД:

Получение данных из БД

В описываемом примере используется только 1 счетчик, но на самом деле их может быть много, поэтому сначала получим их список из таблицы [CounterDetails]:

Результат разбиваем на 3 списка (можно одним, но не наглядно):

  1. Список объектов контроля (ОЗУ, процессор и т.д.) [ObjectName]
  2. Список счетчиков [CounterName]
  3. Список экземпляров (Например нагрузку на процессор можно отслеживать в общем, а можно по ядрам) [InstanceName]

В итоге, выбрав нужное значение, в каждом из списков можно получить ID, по которому мы получим данные из таблицы [CounterData]. Помимо ID в условии указываем интервал времени, за который мы хотим получить информацию:

Читайте так же:
Счетчик дней сколько прожил

Для построения графика достаточно выбрать CounterDateTime и CounterValue.

В итоге получилась обработка следующего вида.

Для удобства помимо графика на форму выведены таблицы результатов запросов.

Настройки подключения к БД видны на закладке «Настройки». В событии»ПриСозданииНаСервере» можно прописать их автозаполнение

При контроле сервера каждому требуется свой состав счетчиков. Каждый для себя определяет границы счетчиков, превышение которых не желательно (это могут быть рекомендованные показатели или выбранные для себя эмпирически). Чтобы всё это не держать в голове, было принято решение вести в обработке таблицу соответствия:

1. Имя счётчика (в нижнем регистре)

2. Значение которое будет отчерчено на графике зеленой линией

3. Описание счетчика.

Для примера, в обработке заполнил полностью для рассматриваемого счетчика. Результат видно на основном скрин-шоте:

Никаких уникальных технологий не применялось, всё сделано именно на уровне «для чайников», из-за этого кому-то код может показаться «не на уровне». Так что пожелания и к онструктивная критика — приветствуются.

Если где-то описал сумбурно и требуется больше пояснений или кода — готов откорректировать.

Скачать файлы

Специальные предложения

Electronic Software Distribution

Маркировка 488-ФЗ

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

(2) http://www.gilev.ru/1c/cloud/HardwareClient82.cf лежит уже 4й год, там практически все указанное в статье есть, очередное изобретение велосипеда

особенно меня радуют статьи «в интернете не нашел, поэтому. » так и хочется спросить сколько секунд искал

теперь по статье — открываете системный монитор действия — свойства — источник — базы данных.
чтобы снимать данные каждую секудну идете рядом в свойствах — общие — элементы диаграммы — съем показаний каждые: 1 секунда
интервал анализируемых данных выбирается свойства — источник — диапазон времени

как говориться без комментариев

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

при указании нескольких источников точно также можно посмотреть графики с разных серверов

  • Скопировать ссылку
  • Перейти

(8) Gilev.Vyacheslav, Суть стаьи не конкурировать с другими сервисами, а показать что и как можно сделать.

Меня не интересует отправка данных на сторонние ресурсы + черный ящик, который не ясно как работает (как минимум по соображениям инф. безопасности) . В нем есть описание счётчиков и обоснование граничных условий? Ссылки на MSDN? + стоимость 10 000 руб. для юр. лиц.

  • Скопировать ссылку
  • Перейти

(10) т.е. код так и не посмотрели, но решили порассуждать «не читал, но осуждаю»
похвальный подход, вопросов больше нет

(11) DenIv, именно потому что и наш код, и многие сторонние обработки уже много раз заново изобретались — данная статья нового контекста не несет на мой взгляд

«За пользование своим сервисом вы просите денег. » ну 100 рублей мы просим потому что когда 3 года сервис работал бесплатно, люди настраивали десятки гигабайт в месяц к нам заливать, а при этом не разу не пользовались, поэтому мы сделали скорее психологический барьер чтобы ненужную работу наши сервера не делали, если 100 рублей — это как цуп за 84 000 руб., то готовы взять 1 рубль или даже бесплатно, главное что вы обязуетесь выключить заливку, если не будете заглядывать больше месяца

Читайте так же:
Работа контроль за счетчиками

если уж говорить про сбор счетчиков, уж хотя бы написали бы про подкладывание счетчиков загруженности оборудования в трассировку профайлера, многим лень почитать, хоть новое узнают люди )))

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

PhysicalDisk(_Total)% Disk Read Time
PhysicalDisk(_Total)% Disk Write Time
PhysicalDisk(_Total)Avg. Disk Bytes/Read
PhysicalDisk(_Total)Avg. Disk Bytes/Write
PhysicalDisk(_Total)Current Disk Queue Length
PhysicalDisk(_Total)Disk Read Bytes/sec
PhysicalDisk(_Total)Disk Write Bytes/sec
PhysicalDisk(ххх)Avg. Disk sec/Read по 3-м дискам
PhysicalDisk(ххх)Avg. Disk sec/Write по 3-м дискам
Processor(_Total)% Processor Time
Processor(_Total)DPCs Queued/sec

При наличии 11 дисков и 16 CPU занимает за сутки 390 МБ.

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

(2) Gilev.Vyacheslav
Вячеслав, стесняюсь спросить: Ваш сервис, разве не по этому же принципу работает? Вы какими мотивами руководствовались когда изобретали свой велосипед?
К чему это негатив? Идея не нова, действительно, но в интернетах, кроме Ваших сервисов, которые собирают по тому же принципу показания, но только в Ваши БД, и ЦУПа, ничего вменяемого БЕСПЛАТНО действительно нет.
Ваш HardwareClient82 — это конфигурация собрал что-то отправил куда-то, получил ответ с истиной. Логика совершенно другая. За пользование своим сервисом вы просите денег.
Здесь все прозрачно, не кофа, а обработка, денег не стоит.
Процитирую. Вас же: — «как говориться без комментариев »
PS. Ваш авторитет в данной области ни у кого не вызывает сомнений, однако, именно поэтому Ваша позиция : все дерьмо я Д`артаньян смотрится как-то странно

(2) h00k ЦИБ — стоит нормальных денег, плюс без подготовки и обучения понять что-то в ЦУПе сложно (ИМХО).

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

научитесь лучше пользоваться SQL Server Profiler
там всё есть. с отборами

а еще лучше см. «Настольная книга 1С:Эксперта по технологическим вопросам»
(артикул: 4601546110060)
Подробнее о ней на сайте: http://v8.1c.ru/metod/books/book.jsp?id=452

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

Отличная идея.
Однозначно ПЛЮС

Еще бы лучше в настройках и в запросах имя базы.
А то ругается ))

  • Скопировать ссылку
  • Перейти

Не запускается сбор, ошибка «Вызов SQLAllocConnect завершился в ошибкой %1»

Журнал показал
Источник PDH, Код события 3041, в описании ошибки вот это:
Вызов SQLAllocConnect завершился с ошибкой [Microsoft][ODBC SQL Server Driver][SQL Server]Ошибка входа пользователя «»…

БД и Сервер на котором запускается сбор, не объединены в домен. Сборщик стартует от имени локальной учетки, как быть?

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector