我正在审查一个服务器实现,它为每个正在处理的请求调用时间(NULL).我想知道调用时间(NULL)对典型的Linux系统有什么影响,如果有更便宜的命令来确定当天 - 或者通常你会多久调用一次()?
感谢您对该主题的看法.
这是一个系统调用,就像其他答案所说的那样,其他答案为您提供了一种衡量系统成本的好方法.(一旦进入内核,它就不需要做太多工作,所以它非常接近纯系统调用开销的成本.而且Linux已经尽其所能有效地实现系统调用.所以从这个意义上说,你可以认为它很好优化.)
与其他答案不同,我不会认为这样便宜,因为自动不值得担心.如果这是在一个内循环中,它取决于你在内循环中做了什么.如果这是一个处理请求的服务器,那么每个请求可能会产生很多系统调用,而且每个请求的成本确实不会有太多变化.但是,我已经看到了调用time()(或gettimeofday()的syscall开销的代码,这实际上归结为它)确实会产生不利影响.
如果你担心成本问题,那么接下来要问自己的是找到时间的便宜方式.一般来说,不会有更便宜的好方法.如果您使用的是x86,则可以向CPU请求rdtsc指令(并且可能在其他cpu架构上有模拟) - 这是一个没有特权的汇编指令,因此您可以将其放入代码中的任何位置.但是存在很多陷阱 - rdtsc并不总是以可预测的速率增加,特别是如果cpu速度因电源管理而改变,这取决于你正在使用的cpu的精确模型; 这些值可能无法跨多个cpu等同步.操作系统会跟踪所有这些,并在调用gettimeofday()时为您提供友好,易用的信息版本.
在Linux(不是古老的Linux)上,它不是系统调用,而且速度非常快,快到只需要不到10个周期。在vdso中实现,即用户空间调用。
| 归档时间: |
|
| 查看次数: |
4314 次 |
| 最近记录: |