Search
Write a publication
Pull to refresh

Comments 5

А как же святой грааль мемсанов - Valgrind?

по ссылке №1 (https://static.googleusercontent.com/media/research.google.com/hr//pubs/archive/43308.pdf ) есть сравнение msan (в том числе) с valgrind, если вкратце, то основной профит msan в том что он намного эффективнее по ресурсам (cpu и расход памяти) и нормально работает с многопоточными приложениями

А почему, можете объяснить?
Ну и не хочу придираться, в статье нет (как же это бесит) даты ее выхода. По списку литературы могу предположить что это было лет 10, если не больше назад. Не очень актуально.

не смотря на то что статье и правда 10 лет (она 2015 года), принципиально с того времени особо ничего не изменилось. msan (и прочие санитайзеры типа asan) делают compile-time инструментацию кода для трекинга операций с памятью, а valgrind это делает без пересборки исходников, но очень тяжелым способом (транслируя код в специальное представление, заменяя всё что нужно чтобы следить за памятью и транслируя еще раз в машинный код)

  1. Тормозит и ест память (как уже написали рядом), и иногда это вообще не позволяет через него гонять программы. У меня был случай, когда бинарь в норме ел гигабайт, скажем, 20 памяти, а под valgrind'ом там уходило за терабайт, и оно просто не запускалось даже на сервере с 512 гигами памяти, терабайтовым свопом и оверкоммитом.

  2. Так как это виртуальная машина, то ей нужно уметь эмулировать все инструкции реальной машины, и тут оно несколько отстаёт от реального железа. Например, на моей машине avx-512 есть, а valgrind, даже собранный прямо сейчас из гита, его не поддерживает:

    % eix -Ic valgrind
    [I] dev-debug/valgrind (9999@18.08.2025): An open-source memory debugger for GNU/Linux
    % valgrind ls
    ==5846== Memcheck, a memory error detector
    ==5846== Copyright (C) 2002-2024, and GNU GPL'd, by Julian Seward et al.
    ==5846== Using Valgrind-3.26.0.GIT and LibVEX; rerun with -h for copyright info
    ==5846== Command: ls
    ==5846== 
    vex amd64->IR: unhandled instruction bytes: 0x62 0xF1 0x7F 0x48 0x7F 0x84 0x24 0x30 0x0 0x0
    vex amd64->IR:   REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
    vex amd64->IR:   VEX=0 VEX.L=0 VEX.nVVVV=0x0 ESC=NONE
    vex amd64->IR:   PFX.66=0 PFX.F2=0 PFX.F3=0
    ==5846== valgrind: Unrecognised instruction at address 0x404511a.
    ==5846==    at 0x404511A: _dl_start (in /lib64/ld-linux-x86-64.so.2)
    ==5846==    by 0x4044247: ??? (in /lib64/ld-linux-x86-64.so.2)
    
Sign up to leave a comment.

Articles