소프트웨어를 사용하는데 로봇에 사용되는 임베디드 보드의 성능에 따라 얼마나 소프트웨어 성능에 영향을 미치는지 확인을 하기위해 퍼포먼스 카운터라는 것을 사용해봤다. 해당 프로세스가 실행이 되면 각종 카운터에 대해서 로그를 남기고 이것으로 대략적으로나마 동일한 소프트웨어를 다른 임베디드 보드에서 실행하였을시 그 성능차이를 볼 수 있을것 같다.
사용을 하려면 '윈도우키+R'을 누른뒤에 'perfmon'이라고 입력하면 프로그램이 실행된다. 여기서 설정을 한뒤에 저장해두면, 해당 프로세스가 실행될때마다 카운터 로그가 남게 된다.
3 각종 병목 현상과 관련이 있는 카운터들
- 각종 병목 현상과 관련 있는 카운터에 대한 정보는 Bottleneck-Detection Counters 페이지를 참고하기 바란다.
3.1 메모리 관련 병목
Counter | Description |
\Memory\Page Faults/sec | 초당 페이지 폴트 발생 횟수. 하드 폴트 및 소프트 폴트 모두를 포함한다. |
\Memory\Page Reads/sec | 하드 폴트를 해결하기 위해 디스크를 읽어들이는 횟수. |
\Memory\Page Writes/sec | 페이지 아웃을 위해 디스크에다 쓰는 횟수. |
\Memory\Pages Input/sec | 하드 폴트를 해결하기 위해 디스크를 읽어들이는 횟수. |
\Memory\Pages Output/sec | 페이지 아웃을 위해 디스크에다 쓰는 횟수. |
\Memory\Available Bytes | 메모리 여유분. |
\Memory\Pool Nonpaged Bytes | 전체 프로세스에 대한 Nopaged Pool에서의 할당량. 즉 Process(_Total )\ Pool Nonpaged Bytes의 양과 같다. |
\Process\Page Faults/sec | 해당 프로세스 내의 스레드에 의해 일어나는 초당 페이지 폴트의 횟수. |
\Process\Working Set | 해당 프로세스의 워킹 셋의 크기. |
\Process\Private Bytes | 현재 해당 프로세스만 사용할 수 있도록 할당된 메모리. |
\Process\Page File Bytes | 해당 프로세스가 사용하고 있는 페이징 파일의 크기. |
3.2 CPU 관련 병목
Counter | Description |
\Processor\% Processor Time | 애플리케이션 또는 운영체제 관련 프로세스를 실행하는 데 들어간 시간의 비율. 즉 IDLE 상태의 반대. |
\System\% Total Processor Time | |
\System\Processor Queue Length | 프로세서 큐에 들어가 있는 스레드의 갯수. 이 큐에 들어가있는 있는 스레드는 모두 ready 상태다. 즉 이 큐가 길어진다는 말은 스레드가 CPU에 비해 너무 많다는 말이다. |
\Process\% Privileged Time | 간단히 말해 해당 프로세스가 시스템 콜에 사용한 시간의 비율. |
\Process\% Processor Time | 해당 프로세스가 자신의 코드를 실행하는데 사용한 시간의 비율. |
\Process\% User Time | 해당 프로세스가 User Mode에서 동작한 시간의 비율. 즉 시스템 콜을 제외하고, 자신의 코드를 실행하는데 사용한 시간의 비율. |
\Process\Priority Base | 해당 프로세스의 우선 순위. |
\Thread\% Privileged Time | 간단히 말해 해당 스레드가 시스템 콜에 사용한 시간의 비율. |
\Thread\% Processor Time | 해당 스레드가 자신의 코드를 실행하는데 사용한 시간의 비율. |
\Thread\% User Time | 해당 스레드가 User Mode에서 동작한 시간의 비율. 즉 시스템 콜을 제외하고, 자신의 코드를 실행하는데 사용한 시간의 비율. |
\Thread\Context Switches/sec | 해당 스레드가 콘텍스트 스위칭을 일으킨 횟수. |
\Thread\Priority Base | 스레드의 원래 우선 순위. |
\Thread\Priority Current | 스레드의 현재 우선 순위. |
\Thread\Thread State | 스레드의 상태. 0 - Initialized, 1 - Ready, 2 - Running, 3 - Standby, 4 - Terminated, 5 - Waiting, 6 - Transition, 7 - Unknown |
3.3 디스크 관련 병목
Counter | Description |
\PhysicalDisk\% Disk Time | 해당 디스크가 읽기/쓰기 작업을 수행한 시간의 비율. 즉 IDLE하지 않았던 시간의 비율. |
\PhysicalDisk\Avg. Disk Queue Length | 해당 디스크 큐에 들어간 읽기/쓰기 작업의 평균 갯수. |
\PhysicalDisk\Current Disk Queue Length | 현재 디스크 큐에 들어가있는 IO 요청 갯수. |
\PhysicalDisk\Avg. Disk Sec/Read | 디스크에서 데이터를 읽어들이는데 걸린 평균 시간. |
\PhysicalDisk\Avg. Disk Sec/Write | 디스크에다 데이터를 쓰는데 걸린 평균 시간. |
\PhysicalDisk\Disk Read Bytes/sec | 읽기 작업을 하는 동안 초당 전송된 데이터의 크기. |
\PhysicalDisk\Disk Write Bytes/sec | 쓰기 작업을 하는 동안 초당 전송된 데이터의 크기. |
\PhysicalDisk\Avg. Disk Bytes/Read | 읽기 작업을 하는 동안 전송된 데이터의 평균. |
\PhysicalDisk\Avg. Disk Bytes/Write | 쓰기 작업을 하는 동안 전송된 데이터의 평균.. |
\PhysicalDisk\Disk Reads/sec | 디스크에 요청된 작업 중에 읽기의 비율. |
\PhysicalDisk\Disk Writes/sec | 디스크에 요청된 작업 중에 쓰기의 비율. |
3.4 캐시 관련 병목
Counter | Description |
\Memory\Cache Bytes | 현재 사용중인 모든 캐쉬 메모리의 총합. |
\Memory\Cache Faults/sec | 초당 캐쉬 폴트의 발생 횟수. |
\Memory\Page Faults/sec | 초당 페이지 폴트 발생 횟수. 하드 폴트 및 소프트 폴트 모두를 포함한다. |
\Memory\Pages Input/sec | 하드 폴트를 해결하기 위해 디스크를 읽어들이는 횟수. |
\Memory\Pages Output/sec | 페이지 아웃을 위해 디스크에다 쓰는 횟수. |
\Cache\Copy Reads/sec | Shows the rate at which read operations from pages of the file system cache involve a copy read. |
\Cache\Data Flushes/sec | Shows the rate at which the file system cache has flushed its contents to disk in response to a request to flush or to satisfy a write-through file write request. |
\Cache\Copy Read Hits % | Shows the percentage of cache copy read requests that did not require a disk read to access the page in the cache. A copy read is a file read operation that is satisfied by a memory copy from a page in the cache to the application's buffer. The LAN redirector uses this method for retrieving information from the cache, as does the LAN server for small transfers. This method is also used by the disk file systems. |
\Cache\Lazy Write Pages/sec | Shows the rate at which the Lazy Writer thread has written to disk. |
\Cache\Lazy Write Flushes/sec | Shows the rate at which the Lazy Writer thread writes to disk. |
\Cache\Read Aheads/sec | Shows the rate at which read operations from the file system cache detect sequential access to a file. The read aheads permit the data to be transferred in larger blocks than those being requested by the application, reducing the overhead per access. |
\PhysicalDisk\Disk Reads/sec | 디스크에 요청된 작업 중에 읽기의 비율. |
\PhysicalDisk\Disk Writes/sec | 디스크에 요청된 작업 중에 쓰기의 비율. |
3.5 다중 CPU 머신에서의 병목
Counter | Description |
\System\% Total Processor Time | |
\System\Processor Queue Length | 프로세서 큐에 들어가 있는 스레드의 갯수. 이 큐에 들어가있는 있는 스레드는 모두 ready 상태다. 즉 이 큐가 길어진다는 말은 스레드가 CPU에 비해 너무 많다는 말이다. |
\Processor\% Processor Time | 애플리케이션 또는 운영체제 관련 프로세스를 실행하는 데 들어간 시간의 비율. 즉 IDLE 상태의 반대. |
\Process\% Processor Time | 해당 프로세스가 자신의 코드를 실행하는데 사용한 시간의 비율. |
\Thread\% Processor Time | 해당 스레드가 자신의 코드를 실행하는데 사용한 시간의 비율. |
3.6 네트워크 관련 병목
Counter | Description |
\Network Interface\Bytes Total/sec | 해당 네트워크 인터페이스를 통해 초당 읽고 쓴 데이터의 크기. |
\Network Interface\Bytes Sent/sec | 해당 네트워크 인터페이스를 통해 초당 읽은 데이터의 크기. |
\Network Interface\Bytes Received/sec | 해당 네크워크 인터페이스를 통해 초당 쓴 데이터의 크기. |
\Protocol_layer_object\Segments Received/sec | 현재 연결된 연결을 통해 받은 세그먼트의 갯수. |
\Protocol_layer_object\Segments Sent/sec | 현재 연결된 연결을 통해 쓴 세그먼트의 갯수. 재전송 데이터만 들어간 세그먼트는 제외. |
\Protocol_layer_object\Frames Sent/sec | |
\Protocol_layer_object\Frames Received/sec | |
\Server\Bytes Total/sec | 해당 서버가 네트워크를 통해 읽거나 쓴 데이터의 크기. |
\Server\Bytes Received/sec | 해당 서버가 네트워크를 통해 읽은 데이터의 크기. |
\Server\Bytes Transmitted/sec | 해당 서버가 네트워크를 통해 쓴 데이터의 크기. |
\Network Segment\% Network Utilization |
Protocol_layer_object 항목은 TCP, UDP 등을 말한다.
'Robotics > Software Tech.' 카테고리의 다른 글
비주얼 스튜디오 닷넷 활용가이드 (0) | 2008.02.17 |
---|---|
NT의 Performance Counter를 이용한 시스템 성능 평가 (0) | 2008.02.15 |
windows embedded xp step by step guide (0) | 2008.02.10 |
Flex 소켓 통신(클라이언트) (0) | 2008.01.31 |
Flex 관련 pdf 자료모음 (2) | 2008.01.31 |