macos – 如何调试copy-on-write?

我们有一些
code依赖于广泛使用fork.我们开始遇到性能问题,我们的一个假设是,当分叉进程中发生copy-on-write时,我们确实浪费了很多速度.

有没有办法专门检测复制和写入的发生时间和方式,以便详细了解此过程.

我的平台是OSX,但更多的一般信息也很受欢迎.

最佳答案 有几种方法可以在OS X上获取此信息.如果您对从命令行中查看有关写时复制行为的信息感到满意,则可以使用带间隔的vm_stat工具.例如,vm_stat 0.5将每秒打印两次完整统计.其中一列是写时复制错误的数量.

如果您希望以更详细的方式收集特定信息,但仍然来自实际运行过程之外,则可以使用OS X附带的Instruments应用程序.这包括一组用于收集有关正在运行的进程的信息的工具,对您的情况最有用的可能是VM Tracker,虚拟内存跟踪或共享内存仪器.它们在流程的生命周期中捕获大量有用信息.该应用程序不是非常直观,但它可以满足您的需求.

如果您想了解进程中的详细信息,我认为您需要使用(记录不完整的)VM统计信息API.您可以使用host_statistics例程请求内核填充vm_statistics结构.例如,运行此代码:

mach_msg_type_number_t count = HOST_VM_INFO_COUNT;
vm_statistics_data_t vmstats;
kern_return_t host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t) &vmstats, &count);

将使用诸如cow_faults之类的信息填充vmstats结构,该信息提供由写时复制行为触发的故障数.查看标题/usr/include / mach / vm_ *,它们声明了用于收集此信息的类型和例程.

点赞