Próbuję walczyć z heisenbugiem w procesie, który wykorzystuje ponad 32 GB pamięci RAM i trafia w ograniczenie tego valgrind, czy jest to arbitralne, którego można uniknąć, rekompilując valgrind, czy jest to trudne?Dlaczego valgrind jest ograniczony do 32 Gb na architekturach 64-bitowych?
Odpowiedz
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
zmianyN_PRIMARY_BITS
od19
do21
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, npMASK(8)
→0xFFFFFFE000000007ULL
myślęw
coregrind/m_aspacemgr/aspacemgr-linux.c
zmianaaspacem_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
- 1. dlaczego rozmiar stosu jest tak ograniczony?
- 2. Dlaczego pamięć LuaJIT jest ograniczona do 1-2 GB na platformach 64-bitowych?
- 3. std :: iota jest bardzo ograniczony
- 4. Przetwarzanie na dużych bitmapach (do 3 GB)
- 5. Dlaczego mmap plik 4GB na 32-bitowym armv7l powiodło się?
- 6. Jak podzielić duży plik tekstowy (32 GB) przy użyciu C#
- 7. Rozmiar int w C na różnych architekturach
- 8. Przydziel więcej niż 2 GB na stercie za pomocą C++ na 32-bitowym jądrze linuxowym
- 9. Uzyskiwanie dostępu> 2,3,4 GB Pliki w trybie 32-bitowym na 64-bitowym (lub 32-bitowym) systemie Windows
- 10. JavaScript prototyp ograniczony do funkcji?
- 11. Ograniczony np.polyfit
- 12. Czy jest interfejs emacs valgrind?
- 13. Jak powinna działać aplikacja w architekturach 64-bitowych i 32-bitowych?
- 14. c pthreads + valgrind = wyciek pamięci: dlaczego?
- 15. Keras wyjście przewidywania wieloklasowego jest ograniczony do jednej grupy
- 16. „com.example jest ograniczony” podczas przesyłania pliku APK do Sklepu Play
- 17. Czy: hover jest ograniczony tylko do elementów potomnych?
- 18. Set max na Mongo ograniczony zbiór
- 19. Python 32-bitowe limity pamięci na 64-bitowe okna
- 20. Java Dlaczego konwertuje długie rozszerzenie (64) na zmienne (32)?
- 21. Valgrind raport
- 22. Dlaczego jest (-1 >>> 32) = -1?
- 23. to model aktora ograniczony do określonych języków?
- 24. Jaki jest powód tego błędu Valgrind?
- 25. Utwórz ogólny interfejs ograniczony do własnej klasy
- 26. Lua - io.open() tylko do 2 GB?
- 27. Dlaczego nie mogę utworzyć F-ograniczony obiekt w Scala
- 28. Dlaczego partycja Spark RDD ma limit 2 GB dla HDFS?
- 29. Jak uruchomić valgrind w aplikacji na Androida?
- 30. Dlaczego fragmentacja pamięci jest problemem na 64-bitowym komputerze?
Świetna odpowiedź, dzięki – piotr