2

我最近为一个项目尝试了 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 任务调度程序相关吗?

4

0 回答 0