我该怎么做才能找到 pread64/pwrite64 挂起的原因?
Posted
技术标签:
【中文标题】我该怎么做才能找到 pread64/pwrite64 挂起的原因?【英文标题】:What can I do to find the cause of pread64/pwrite64 hangs? 【发布时间】:2011-07-01 07:20:09 【问题描述】:我的应用程序正在使用 pread64/pwrite64 对原始 /dev/sdb 块设备执行一些繁重的 IO。有时它做得很好。调用 pread64/pwrite64 通常只需 50-100us。但有时需要更长的时间,最多几秒钟。
您有什么建议可以找到导致此类问题的原因?
【问题讨论】:
【参考方案1】:我没用过,但听说有一个叫latencytop的工具。
【讨论】:
latencytop 对我的情况没有用。我已经知道哪些特定操作会导致挂起。但我想知道这种挂起的原因。但无论如何,谢谢你提到这样一个工具。我不知道。 @Sergej:如果您深入研究它,看起来内核对latencytop 的支持存储了完整的回溯,而不仅仅是系统调用。有了它,您应该能够看到在慢速 pread64 期间调用了哪些内核函数。 怎么做?我没有找到任何关于它的信息。【参考方案2】:当它像这样挂起时,抓住stackshot。另一个选项是 pstack 或 lsstack。 正如@Zan 指出的那样,latencytop 也可以为您提供这些信息。
这可能无法完全回答您的问题,但至少您可以肯定地知道它在挂起时试图做什么。
【讨论】:
以上是关于我该怎么做才能找到 pread64/pwrite64 挂起的原因?的主要内容,如果未能解决你的问题,请参考以下文章