【问题标题】:Any tool to trace page fault and other related events for a specific file on iOS?有任何工具可以跟踪 iOS 上特定文件的页面错误和其他相关事件吗?
【发布时间】:2018-11-01 11:51:24
【问题描述】:

System Usage(Instruments) 似乎只跟踪显式文件 io 调用(openclosewriteread)。 System Trace(Instruments)trace page fault,不过是按调用栈组织的,过滤比较困难。

那么任何工具都可以跟踪特定文件的低级 io 事件?

【问题讨论】:

    标签: ios instruments darwin dtrace xnu


    【解决方案1】:

    DTrace 可以做到这一点(至少在 Solaris 中,您必须在 macOS 上自己尝试一下)。 vm 提供程序具有名为 fspginfspgoutfsfree 的探测器,它们分别在 FS 支持的页面被调入或调出内存时触发,或者如果它们未修改则被释放。还有一个更通用的称为maj_fault,每当页面错误导致 IO 时就会触发。

    唯一的问题是 DTrace 无法让您从这些探测器中返回文件名,如果您主要是在单个文件上出现页面错误,这可能没问题,或者如果您真的很烦人重新试图找出哪个文件是被分页的。但是,您仍然可以获得导致页面错误的进程的 execnamepid,以防万一。

    Here’s 您可以在其中查看vm 提供程序的文档。那里有一些示例脚本,但这个可能是最好用的:

    vminfo:::maj_fault,
    vminfo:::zfod,
    vminfo:::as_fault
    /execname == "soffice.bin" && start == 0/
    {
        /*
         * This is the first time that a vminfo probe has been hit; record
         * our initial timestamp.
         */
        start = timestamp;
    }
    
    vminfo:::maj_fault,
    vminfo:::zfod,
    vminfo:::as_fault
    /execname == "soffice.bin"/
    {
        /*
         * Aggregate on the probename, and lquantize() the number of seconds
         * since our initial timestamp.  (There are 1,000,000,000 nanoseconds
         * in a second.)  We assume that the script will be terminated before
         * 60 seconds elapses.
         */
        @[probename] =
            lquantize((timestamp - start) / 1000000000, 0, 60);
    }
    

    这会打印出每种故障类型的内存活动时间线,并且文档会更详细地解释它。

    【讨论】:

      【解决方案2】:

      这两个系统使用工具都依赖 Kdebug 来获取它们的信息。您可以使用内置的 ktrace(1)(或第三方工具,如 kdv (http://newosxbook.com/tools/kdv.html))直接监控 Kdebug(如果您是 root),其中任何一个都会为您提供所有 Kdebug 消息,并带有过滤器可以稍后使用 grep(1) 等应用。如果您启用了 SIP,则使用 Dtrace 将不起作用(并且在性能方面也很痛苦) - 因此 Kdebug 是一个不错的选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-22
        • 2012-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多