我最近为一个项目尝试了 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,29s
- 用户:1.068
- 系统:13.098
我使用带有 kprobes 的小型 LKM 运行了其他 5 个测试。完成相同的测试又花了大约 3 秒。
此时,一切看起来都很正常,但是当我使用 Sysdig 运行测试时:
sudo sysdig proc.name="ctest" > ctestlog
我的 C 程序在哪里ctest
,我的平均结果如下:
- 真实:17,1108
- 用户:0,6336
- 系统:7,3752
所以这个测试的结果是 Sysdig 将我的流程提高了两倍。
我精确到我的测试的标准偏差小于 1 秒。
有人已经看到类似的东西或有解释吗?
由于 Sysdig 作业,它可以与 linux 任务调度程序相关吗?