Sto provando a valgrind un heisenbug su un processo che usa più di 32 Gb di ram e colpendo questa limitazione di valgrind, si tratta di un arbitrario che potrebbe essere evitato ricompilando valgrind o è difficile?Perché valgrind è limitato a 32 Gb su architetture a 64 bit?
risposta
Il limite è arbitrario e può essere modificato mediante la ricompilazione di valgrind.
Valgrind tiene traccia della memoria utilizzando un array sparse a 2 livelli. 16 bit dell'indirizzo vengono utilizzati per indicizzare in una tabella 65536-entry contenente un puntatore a una mappa di secondo livello, che traccia un intervallo dello spazio di indirizzamento (normalmente 2¹⁶ byte = 64 KB per i processi a 32 bit, 2¹⁹ byte = 512 KB per Processi a 64 bit). Quindi la quantità totale di memoria che può essere tracciata da questo array sparse a 2 livelli è 65536 × questa dimensione del blocco. Modificando il codice, la dimensione di questi blocchi può essere aumentata a una potenza maggiore di 2, al costo di utilizzare più memoria per tenere traccia dei pezzi più parziali.
In this message sulle valgrind-users mailing list, Julian Seward spiega come aumentare il limite da 32 GB a 128 GB:
in
memcheck/mc_main.c
cambiamentoN_PRIMARY_BITS
19
-21
cambiamento le affermazioni alla fine del
memcheck/mc_main.c
di conseguenza:
MAX_PRIMARY_ADDRESS
→ 4 * (valore esistente + 1) - 1- per le
MASK(1/2/4/8)
asserzioni, azzerare più a destra due '1' bit nel blocco dei principali 1 bit, ad esempioMASK(8)
→0xFFFFFFE000000007ULL
Credoin
coregrind/m_aspacemgr/aspacemgr-linux.c
cambiamentoaspacem_maxAddr
da(Addr)0x800000000 - 1
a(Addr)0x2000000000ULL - 1
.
Aggiornamento: La quantità massima di memoria Valgrind può utilizzare è aumentata nelle versioni più recenti:
- 32 GB prima Valgrind 3,9
- 64 GB Valgrind 3.9 fino a 3.12
- 128 GB in Valgrind 3.13
- 1. Accesso a file da 2,3,4 GB in processo a 32 bit su Windows a 64 bit (o 32 bit)
- 2. Operazioni su operandi a 64 bit in architetture a 32 bit?
- 3. Perché MSBuild a 64 bit carica estensioni a 32 bit?
- 4. SQL Server 2012 a 32 bit o 64 bit su computer a 64 bit?
- 5. Compilare binario a 32 bit su sistema a 64 bit
- 6. Perché la memoria di LuaJIT è limitata a 1-2 GB su piattaforme a 64 bit?
- 7. SDK Android a 32 o 64 bit su sistema operativo Windows a 64 bit?
- 8. Esegui libreria a 32 bit su iPhone 5s 64 bit
- 9. Perché mmap un file da 4 GB su armv7l a 32 bit è riuscito?
- 10. Come dovrebbe funzionare l'applicazione nelle architetture intel a 64 bit contro 32 bit?
- 11. L'aggiunta del supporto a 64 bit al codice a 32 bit esistente è difficile?
- 12. Compilando 32 bit Assembler su ubuntu a 64 bit
- 13. Sto sviluppando un'applicazione a 64 bit. È possibile eseguire l'applicazione a 64 bit su un sistema operativo a 32 bit?
- 14. Applicazione a 32 o 64 bit su sistema operativo a 64 bit?
- 15. Perché __sync_add_and_fetch funziona per una variabile a 64 bit su un sistema a 32 bit?
- 16. Interop da 64 a 32 bit - come?
- 17. Perché è più veloce a 64 bit rispetto a 32 bit?
- 18. Interoperabilità a 32 e 64 bit su Windows a 64 bit
- 19. esegue un binario a 32 bit su una macchina a 64 bit
- 20. Determinazione dell'architettura a 32/64 bit nell'assemblaggio
- 21. App Java a 64 bit: è richiesto un sistema operativo a 64 bit, JRE a 64 bit e applicazione a 64 bit?
- 22. Puntatori a 32 bit con ISA x86-64: perché no?
- 23. La macchina virtuale a 32 o 64 bit è più veloce sulla macchina a 64 bit (VMware)
- 24. Port 32 bit driver di Windows a 64 bit Windows
- 25. OpenCL: istruzione popcnt a 32 e 64 bit su GPU?
- 26. Inno Setup installazione dll a 32 bit e 64 bit
- 27. prestazioni a 32 bit vs 64 bit aritmetica
- 28. Devo usare JDK a 32 o 64 bit?
- 29. Il server Java funziona a 32 bit, ma non a 64 bit. Perché?
- 30. Perché std :: size_t 4 byte su sistemi a 32 bit quando unsigned long long è 8 byte su entrambi i sistemi a 32 bit e 64 bit?
Ottima risposta, grazie – piotr