시스템에서 작업 실행을 위한 메모리 할당 수를 계산하는 Linux 커널에서 제공하는 카운터를 찾고 있습니다. 저는 기계의 일부 작업이 루프에 메모리를 할당하는 것과 같은 어리석은 작업을 수행하는 시기를 감지하기 위해 Prometheus를 사용하여 이 카운터 변경을 고속으로 관찰하고 싶습니다.
기계의 현재 상태를 나타내는 숫자인 게이지처럼 보이는 다양한 표시기를 발견했습니다. 예를 들면 nr_free_pages
및 가 있습니다 kbhugused
. 이는 현재 사용 가능하거나 사용되는 항목의 양을 측정하지만 페이지를 할당한 다음 다시 해제하는 작업으로 인해 측정기가 변경되지 않으므로 나에게는 거의 쓸모가 없습니다.
IRC에서 제가 발견한 아이디어 중 하나는 호출 횟수를 기록하는 카운터가 있다는 것이었습니다 brk(2)
.금방 찾았어요메모리를 할당하는 데 사용되는 유일한 시스템 호출은 아닙니다.
지금 을 보고 있지만 pgalloc_normal
정확히 /proc/vmstat
무엇을 측정하는지 아직 파악하지 못했습니다.
우리는 왜 엄청난 메모리 할당률을 찾고 있습니까? 메모리 할당에는 비용이 발생하기 때문입니다. 커널 공간 사이를 전환해야 할 뿐만 아니라, 커널에는 시스템이 2개의 CPU, 80개의 데이터 실행 스레드를 병렬로 처리하는 것에서 메모리를 할당하는 1개의 스레드로 전환할 수 있는 많은 잠금이 있습니다. 이것은 우리가 접했고 집중하고 싶은 실제 시나리오입니다.
답변1
내가 아는 한 아직 기성 카운터는 없지만 시스템 호출을 추적하는 방법은 여러 가지가 있습니다. 가장 간단한 방법은 다음을 사용하는 것입니다 perf
.
sudo perf stat -e syscalls:sys_enter_mmap -e syscalls:sys_enter_brk -I 1000 -a
여기에는 호출 수 mmap
와 초당 호출 수가 표시됩니다.brk
이 변형을 사용하면 모든 시스템 호출을 추적할 수 있습니다.
sudo perf stat -e 'syscalls:sys_enter_*' -I 1000 -a
-p
특정 프로세스를 모니터링하는 대신 관련 pid를 사용할 수도 있습니다 -a
.