fork
의 광범위한 사용에 의존하는 code이 있습니다. 우리는 성능 문제에 부딪 치기 시작했고 가설 중 하나는 포크 된 프로세스에서 쓰기 중 복사가 발생할 때 많은 속도가 낭비된다는 것입니다.copy-on-write를 디버깅하는 방법은 무엇입니까?
복사 및 쓰기가 발생하는시기와 방법을 구체적으로 탐지하여이 프로세스에 대한 자세한 정보를 얻을 수있는 방법이 있습니까?
내 플랫폼은 OSX이지만 더 일반적인 정보도 제공됩니다.
fork
의 광범위한 사용에 의존하는 code이 있습니다. 우리는 성능 문제에 부딪 치기 시작했고 가설 중 하나는 포크 된 프로세스에서 쓰기 중 복사가 발생할 때 많은 속도가 낭비된다는 것입니다.copy-on-write를 디버깅하는 방법은 무엇입니까?
복사 및 쓰기가 발생하는시기와 방법을 구체적으로 탐지하여이 프로세스에 대한 자세한 정보를 얻을 수있는 방법이 있습니까?
내 플랫폼은 OSX이지만 더 일반적인 정보도 제공됩니다.
OS X에서이 정보를 얻는 방법은 몇 가지가 있습니다. 명령 행에서 copy-on-write 동작에 대한 정보 만보고 있으면 간격을두고 vm_stat
도구를 사용할 수 있습니다. 예 : vm_stat 0.5
은 초당 두 번 전체 통계를 인쇄합니다. 열 중 하나는 쓰기 중 복사 오류의 수입니다.
자세한 정보를 수집하고 싶지만 실제로 실행중인 프로세스 외부에서 정보를 수집하려면 OS X과 함께 제공되는 Instruments 응용 프로그램을 사용할 수 있습니다.이 정보에는 귀하의 경우에 가장 유용한 실행 프로세스는 VM 추적기, 가상 메모리 추적 또는 공유 메모리 도구가 될 수 있습니다. 이것들은 프로세스의 수명 동안 많은 유용한 정보를 수집합니다. 이 응용 프로그램은 직관적이지는 않지만 필요한 작업을 수행합니다.
세부 정보 을 처리중인으로 보내려면 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);
는 복사 (copy-on-write) 동작에 의해 트리거 결함의 수를 제공 같은 정보 cow_faults
, 함께 vmstats
구조를 채 웁니다. 이 정보를 수집하기위한 유형과 루틴을 선언하는 헤더 /usr/include/mach/vm_*
을 확인하십시오.