Спектральный анализ сервера

Что будет, если к Perfmon применить быстрое преобразование Фурье? Или функцию корреляции? Получится #черте_что!

У меня есть сервер, на котором идет много периодических процессов. Если записать его CPU с разрешением 1 секунда, то получится примерно вот что:

Мы видим некую периодичность, но как лучше увидеть ee в чистом виде, очистить от шума?

Первое, что мне пришло в голову, это быстрое преобразование Фурье:

import csv
import numpy as np
import matplotlib.pyplot as plt
import scipy.fftpack

...

N = len(cpu)
x = np.linspace(0.0, N/60., N)
yf = scipy.fftpack.fft(cpu)

Нас интересуют частоты порядка минут, поэтому ограничим ось x соответственно:

Четко видны 'собственные частоты', на которых 'звучит' ваш сервер. С многими пиками я могу связать job schedule. Но гармоник здесь слишком много, и вторая идея, которая мне пришла в голову такова: для того, чтобы понять периодичность, применим самокорреляцию (ненормированную):

import numpy as np
import matplotlib.pyplot as plt

...

x2 = np.linspace(-N/2/60., N/2/60., N)
corr = np.correlate(cpu,cpu,mode='same')

Мне кажется что на данном графике сердцебиение вашего сервера видно наиболее явно. Для сравнения построим те же графики для другого сервера с другим профилем нагрузки, где она флуктирует, но нет явной периодичности:

Только не спрашивайте, пожалуйста, какой в этом смысл! Это кодобред! А вот более полезный способ работы с серверами.

@Tzimie
12.01.2022 19:37 UTC
Первоисточник

Комментарии

@tbl
12.01.2022 14:44 UTC
+2

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

@echo10
12.01.2022 15:17 UTC
+1

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

@Sdima1357
12.01.2022 15:49 UTC
0

Альфа ритмы всепланетного мозга самопроизвольно зародившегося в интернете...

Он спит.

@AhuraMasda
13.01.2022 13:50 UTC
+2

и будить - НЕ НАДО!

13.01.2022 14:06 UTC
+1

Тссс.... Потише пожалуйста.

@belch84
12.01.2022 18:34 UTC
0
А можно ли картинку колебаний преобразовать в звук?
Примерно вот такую
image
@Tzimie
12.01.2022 18:43 UTC
0

Попробую на досуге, библиотеки вроде есть

@Refridgerator
13.01.2022 03:11 UTC
0
Всё что угодно можно преобразовать в звук, только результат в данном случае не будет выглядеть как на картинке. Если хочется звук в реальном времени — тогда значение загрузки процессора можно кодировать частотой синусоиды, которые плавно смешиваются друг с другом.
13.01.2022 07:43 UTC
0
На самом деле эта картинка представляет собой таки звуковые колебания, точнее, мелодию, которую я когда-то собственноручно вырезал из MP3 файла, чтобы использовать в качестве рингтона на телефоне. Я пользовался программой Steinberg WaveLab, в таком виде она представляет мелодию для всевозможных операций аудиомонтажа. Мне было интересно, насколько такое представление соответствует действительности, но быстро найти средство, которое прямо по картинке генерирует звук, мне не удалось. На Хабре когда-то была статья "Как звучит сердцебиение: перевод бумажной кардиограммы в WAV-формат", в ней описывалось решение похожей задачи, но применить ее метод непосредственно, мне кажется, трудно
13.01.2022 09:39 UTC
0
Я имел в виду, что осциллограмма музыкального сигнала заметно отличается от шумоподобного, в том числе и с гармоническими составляющими.
@Refridgerator
13.01.2022 03:01 UTC
+5
Разрешение 1 секунда — это мало. Нужно хотя бы 10-25 мс, т.е. период переключения потоков. И у вас в коде перед FFT отсутствует умножение на оконную функцию, оттого и в спектре у вас слишком много мусора. И графики амплитуд нагляднее в логарифмическом, а не в линейной масштабе.

Сама идея не такая уж и бессмысленная — я делал нечто подобное для анализа шума в цепях питания звукового тракта.
@tbl
13.01.2022 08:37 UTC
0

умножение на оконную функцию

Причем не абы какой функцией усреднение делать (среднее арифметическое не подойдет), а Lancsoz window с помощью sin(x)/x

13.01.2022 09:50 UTC
+1
Ни Lancsoz, ни sin(x)/x тоже не подойдут. Здесь же задача не в усреднении или сглаживании, а в уменьшении эффекта "spectral leakage", и оконные функции для этого тоже используются специальные, Хамминг/Блэкман/Нуттал наиболее часто используемые.