Linux 如何减缓进程的所有时间测量?

Linux 如何减缓进程的所有时间测量?,linux,time,hook,Linux,Time,Hook,我想让应用程序相信时间比实时快/慢。也就是说,当t0+dt为实时时,我需要使用用户定义的s使所有时间测量API返回t0+dt*s。这将影响任何类似gettimeofday()以及timer\u gettime()和所有相关函数和机制(包括计时器的实际触发时间) 我想在某个地方放一个钩子,可以改变应用程序的可见时间 在Linux系统中,放置这样一个钩子的最佳位置是什么,这样我就不必创建太多的钩子了?有什么中心位置吗?您可以使用中描述的LD\U预加载技巧。 seams可以完全满足您的需要(请参阅“高

我想让应用程序相信时间比实时快/慢。也就是说,当
t0+dt
为实时时,我需要使用用户定义的
s
使所有时间测量API返回
t0+dt*s
。这将影响任何类似
gettimeofday()
以及
timer\u gettime()
和所有相关函数和机制(包括计时器的实际触发时间)

我想在某个地方放一个钩子,可以改变应用程序的可见时间


在Linux系统中,放置这样一个钩子的最佳位置是什么,这样我就不必创建太多的钩子了?有什么中心位置吗?

您可以使用中描述的LD\U预加载技巧。
seams可以完全满足您的需要(请参阅“高级时间规范选项”下的自述文件)。以下示例显示“睡眠”的时间变慢2倍:

(在debian系统上,因此为/usr/lib/)

如果它实际上没有实现您想要的功能,而不是推出您自己的解决方案,我建议您从中获取它的源代码并实现您需要的功能


为了完整起见,另一个可能的起点是。

这些似乎只是改变时间,而不是改变时间的尺度。也就是说,它们不会影响任何计时器。无论如何,谢谢你在这个方向上的第一个指针。@Ruslan:也许我不明白你所说的“改变尺度”是什么意思,但这似乎很好:'time FAKETIME=“x0.5”LD_PRELOAD=/usr/lib/x86_64-linux-gnu/FAKETIME/libfaketime.1睡眠1'只需要2秒,而不是1秒(针对这个例子改变了答案)啊,事实上,在文档中遗漏了这个。奇怪的是,尽管计时器确实改变了速度,
localtime
仍能获得实时数据。不管怎样,我认为这是一个足够好的答案开始,谢谢。
$ time FAKETIME="x0.5" LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1 sleep 1
real    0m2.002s
user    0m0.000s
sys 0m0.000s