Я просмотрел различные ссылки на переполнение стека, а также другие, и я нашел один шаблон или общий c способ расчета использования процессора. Одна из ссылок ниже
https://github.com/moncho/dry/blob/07244d36010d1029ee03bda29fa5aec6449ebf61/docker/stats.go#L168
Я пытаюсь вычислить то же самое, самостоятельно. Но кажется, что всякий раз, когда я вычисляю значение, оно даже не близко, может ли кто-нибудь проверить подход один раз? & Если нет, может ли кто-нибудь помочь мне с подходом?
Я хочу рассчитать процессор для определенного c временного интервала, просто чтобы привести пример. def something_get_execute () Я хочу рассчитать использование процессора только для этой c функции.
Для того же, что я делаю после этого, Получение значений для пользователя и системы отсюда:
/sys/fs/cgroup/cpu,cpuacct/cpuacct.stat
Перед выполнением функции и после ее выполнения. После этого я получаю дельту для контейнера, используя следующую формулу:
container_cpu_delta = (cpuacct.stat_final_user - cpuacct.stat_initial_user) / (cpuacct.stat_final_system - cpuacct_stat_initial_system)
Тем временем я делаю то же самое, чтобы получить значение для хоста до и после выполнения функции, я получаю значение для пользователя и системы из:
/proc/stat
grep в первой строке, и я получаю 1-й и 3-й параметры
cpu 205434 341 56826 3122952 48119 0 25640 0 0 0
i.e 205434 & 56826
И выполняю тот же расчет
host_cpu_delta = (proc_stat_final_user - proc_stat_init_user)/(proc_stat_final_system-proc_stat_init_user)
& Затем, наконец, я делаю
cpu_percentage = (container_cpu_delta/host_cpu_delta) * no_of_cores (am bit confused about this cores allocated to container or cores on the host)
Однако есть некоторые наблюдения:
Так много раз я видел разницу
(cpuacct.stat_final_user - cpuacct.stat_initial_user)
т.е. контейнер больше
(proc_stat_final_user - proc_stat_init_user)
Host, что я буду чувствовать немного странно. Поскольку значения хоста также содержат цикл контейнера. Не знаете, какие ядра использовать при вычислении, процессор, выделенный контейнеру, или все процессоры на хосте? Все, что я делаю внутри контейнера, например, чтение всех значений. Пожалуйста, дайте мне знать, если что-то упущено в расчетах, это будет большим подспорьем.
Большое спасибо :)