2013-03-25 14 views
5

Czy ktoś wie, jak uzyskać dostęp do pamięci (wskaźniki), które powodują błędy strony? Interesują mnie głównie błędy głównych stron.Dostęp do pamięci dziennika powodujący poważne błędy strony

Trochę tła o tym, co próbuję osiągnąć. Mam aplikację o dużej pojemności pamięci (baza danych) i chcę skorelować stronicowanie z dostępem do dużych struktur danych (takich jak tabele, indeksy przydzielane za pomocą mmap()). Odwzorowania procesu są łatwe do pobrania z/proc // map. Teraz, jeśli mam dostęp do pamięci, która powoduje błędy strony, mogę śledzić liczbę błędów stron podczas uzyskiwania dostępu do każdej struktury danych.

Myślę, że perf lub systemtap może wykonać zadanie. Jakieś pomysły?

Odpowiedz

6

Zobacz, co jest dostępne w punkcie próbkowania:

% stap -L vm.pagefault 
vm.pagefault name:string write_access:long address:long $mm:struct mm_struct* \ 
    $vma:struct vm_area_struct* $address:long unsigned int $flags:unsigned int 

Zaloguj próbując map adresy do nazw symboli

# stap -e 'probe vm.pagefault { if (execname()=="foo") { printf("%p (%s)\n", address, usymdata(address)) } }' -d /bin/foo --ldd 

Zobacz także: http://sourceware.org/systemtap/examples/#memory/pfaults.stp

6

Twoje przypuszczenie jest słuszne. Za pomocą narzędzia perf można śledzić liczbę błędów stron spowodowanych przez aplikację.

Polecam przeczytać this tutorial, aby nauczyć się korzystać z tego narzędzia.

Aby zainstalować wystarczy użyć:

Szukasz przypadku strona winy. Można zainstalować (w Ubuntu lub innej dystrybucji apt) przez:

sudo apt-get install linux-tools-common linux-base 
sudo apt-get install linux-tools-YOUR-KERNEL number 

można uzyskać numer jądra z: uname -r

Jako przykład, to polecenie uruchamia narzędzie perf na „ls "polecenie:

perf record -e page-faults:u -F 250 ls 

a następnie można spojrzeć na wyniki (binarny z«ls»nie ma informacji debugowania, więc nie należy się spodziewać wyjścia ładna) z:

perf report 
Powiązane problemy