2011-12-27 17 views

Odpowiedz

12

Limit jest arbitralny i można go zmienić ponownie rekompilując valgrind.

Valgrind śledzi pamięć za pomocą dwupoziomowej, rzadkiej macierzy. 16 bitów adresu służy do indeksowania do tabeli wpisu 65536 zawierającej wskaźnik do mapy drugiego poziomu, która śledzi zakres przestrzeni adresowej (zwykle 2 ± 4 bajty = 64 KB w przypadku procesów 32-bitowych, 2 ± 5 bajtów = 512 KB w przypadku Procesy 64-bitowe). Całkowita ilość pamięci, którą można śledzić w tej 2-poziomowej, rzadkiej macierzy, wynosi 65536 × ten rozmiar porcji. Modyfikując kod, rozmiar tych fragmentów można zwiększyć do 2 razy, kosztem większej ilości pamięci, aby śledzić większość fragmentów.

W this message na Valgrind użytkownikami listy, Julian Seward wyjaśnia, w jaki sposób zwiększyć limit od 32 GB do 128 GB:

  • w memcheck/mc_main.c zmiany N_PRIMARY_BITS od 19 do 21

  • zmian twierdzenia na koniec memcheck/mc_main.c odpowiednio:

    • MAX_PRIMARY_ADDRESS → 4 * (istniejąca wartość +1) - 1
    • dla MASK(1/2/4/8) twierdzeń ustawiony na zero, skrajnie prawe dwóm „1”, bity w bloku prowadzących 1 bitów, np MASK(8)0xFFFFFFE000000007ULL myślę

  • w coregrind/m_aspacemgr/aspacemgr-linux.c zmiana aspacem_maxAddr z (Addr)0x800000000 - 1 do (Addr)0x2000000000ULL - 1.


Update: Maksymalna ilość pamięci Valgrind można używać wzrosła w ostatnich wersjach

  • 32 PL przed Valgrind 3,9
  • 64 GB Valgrind 3,9 do 3.12
  • 128 GB w Valgrind 3.13
+0

Świetna odpowiedź, dzięki – piotr

Powiązane problemy