Странное улучшение времени процесса при наблюдении с помощью sysdig
Я недавно попробовал Sysdig для проекта.
Моя главная цель - ловить системные вызовы из ядра, и Sysdig кажется хорошим вариантом. На самом деле, я провел несколько тестов с разными методами и сравнил накладные расходы для каждого из них.
Я пришел сюда с простым тестом: программа на C, которая просто открывается, пишет, а затем закрывает файл 100000 раз.
#include "stdio.h"
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
int main(void)
{
int i;
char puffer[100];
FILE * handle;
for (i=0; i<100000; i++) {
strcpy (puffer, "Sysdig c'est trop fort !\n");
handle = fopen("test.txt", "w");
fputs(puffer, handle);
fgets(puffer, 80, handle);
fclose(handle);
}
return 0;
}
Я провел 5 тестов без присмотра, и средняя продолжительность:
- реальный: 30,29с
- Пользователь:1,068
- SYS:13.098
Я провел 5 других тестов с маленьким LKM с помощью kprobes. Потребовалось еще около 3 секунд, чтобы завершить тот же тест.
На данный момент все кажется нормальным, но когда я запускал тесты с Sysdig:
sudo sysdig proc.name="ctest" > ctestlog
куда ctest
моя C программа, у меня были такие результаты в среднем:
- реальный: 17,1108
- пользователь: 0,6336
- sys: 7,3752
Таким образом, в результате этих тестов Sysdig улучшил мой процесс в два раза.
Я уточняю, что стандартное отклонение от моих тестов составляет менее 1 секунды.
Кто-то уже видел что-то подобное или есть объяснение?
Может ли это быть связано с планировщиком задач linux из-за задания Sysdig?