C++分析:KiFastSystemCallRet
在使用 Very Sleepy 进行分析时,我看到它是评价最高的项目后,我搜索了这个,似乎每个人都得到了答案“这是一个系统功能,忽略它”。但 Sleepy 对该函数的提示说:
提示:KiFastSystemCallRet 通常意味着 线程正在等待某事 否则完成。可能的原因 可能是磁盘 I/O,等待 事件,或者可能只是调用 Sleep()。
现在,我的应用程序对 CPU 的消耗非常大,因此 33% 的时间都花在等待事情发生上,这有点奇怪。
我真的就忽略它吗?
编辑:显然,77% 的调用来自模块 nvd3dnum 中的 QueryOglResource (?)。我认为这可能是 nvidia Direct3D 的东西,即渲染。
I searched for this after seeing it's the top rated item when profiling using Very Sleepy, and it seems everyone gets the answer "it's a system function, ignore it". But Sleepy's hint for the function says:
Hint: KiFastSystemCallRet often means
the thread was waiting for something
else to finish. Possible causes
might be disk I/O, waiting for an
event, or maybe just calling Sleep().
Now, my app is absolutely thrashing the CPU and so it's a bit weird 33% of the time is spent waiting for something to happen.
Do I really just ignore it?
EDIT: apparently, 77% of the calls to this come from QueryOglResource (?) which is in module nvd3dnum. I think that might be nvidia Direct3D stuff, i.e rendering.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不要忽视它。 了解其调用方式。
如果您回顾调用堆栈到它进入代码的位置,
这会告诉你问题出在哪里。
随机停止它(而不是使用断点)很重要,这样最有可能出现实际花费大量时间的堆栈跟踪。
Don't ignore it. Find out how it's being called.
If you look back up the call stack to where it gets into your code,
that will tell you where the problem is.
It's important to halt it at random (not with a breakpoint), so that the stack traces that are actually costing a lot of time will be most likely to appear.
该函数对于分析器来说毫无意义,它基本上是整个系统函数范围的逻辑终点。你有什么函数调用它?等待多个对象?异步读取?
That function is pretty meaningless for a profiler, it's basically the logical end point for a whole range of system functions. What functions do you have calling it? WaitForMultipleObjects? Asynch reads?