Macos 如何调试写时复制?

Macos 如何调试写时复制?,macos,copy-on-write,Macos,Copy On Write,我们有一些依赖于广泛使用fork。我们开始遇到性能问题,我们的一个假设是,在分叉进程中发生写时复制时,我们确实浪费了很多速度 是否有一种方法可以专门检测何时以及如何进行复制和写入,以详细了解此过程 我的平台是OSX,但更一般的信息也很受欢迎。有几种方法可以在OS X上获取此信息。如果您只对从命令行查看有关写时复制行为的信息感到满意,您可以间隔使用vm_stat工具。例如,vm_stat 0.5每秒将打印两次完整的统计信息。其中一列是写入时复制错误的数量 如果您希望以更详细的方式收集特定信息,但仍

我们有一些依赖于广泛使用
fork
。我们开始遇到性能问题,我们的一个假设是,在分叉进程中发生写时复制时,我们确实浪费了很多速度

是否有一种方法可以专门检测何时以及如何进行复制和写入,以详细了解此过程


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

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

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

如果您想要过程中的详细信息,我认为您需要使用(文档不完整的)VM statistics API。您可以使用
host\u statistics
例程请求内核填充
vm\u 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.*
,其中声明了用于收集此信息的类型和例程