tgoop.com/gdb_dbg/209
Last Update:
Подумалось: насколько фаззинг (в данном контексте - генерация случайным образом корректных входных программ) хорош для поиска компиляторных багов, но настолько же он бесполезен для поиска проблем в рантайме (багов в GC, синхронизации и т.д.).
Это, конечно, очень понятно: компилятор (хороший) стабилен и всегда работает одинаково на одних и тех же входных данных, чтобы найти проблемы вам нужно добавить случайности именно в то, что вы компилируете. Фаззер здесь божественен.
Рантайм же по своей сути работает со случайными событиями. Как именно операционная система выдавала вашим тредам кванты для работы? Кто из потоков в результате выиграл гонку за lock? Как это повлияло на скорость аллокации объектов? А это в свою очередь на момент, в которой случилась сборка мусора, и на расположение объектов в памяти к этому моменту. Это я еще не говорю про влияние других процессов, которое, конечно, тоже есть: GC вполне может ориентироваться на общее потребление памяти в системе, да и опять таки, кванты то им тоже выдаются, т.е. общая загруженность системы может радикально повлиять на всю картину происходящего в рантайме.
Конечно же, можно сказать, что все это в конце концов детерминировано, просто влияющих факторов очень много. Но какая разница, если при каждом новом запуске мы получаем все новые события? Все это напоминает старый, как жизнь, спор: "существует ли у человека свобода выбора или любой наш выбор предрешен, пусть и огромным количеством факторов?". Лично для меня здесь нет никакого противоречия: глобальный детерминизм логичен, но в условиях невозможности наблюдения всех первопричин это не имеет никакого значения, а значит можно считать, что свобода выбора существует. Вот и получается, что GC с рантаймом - тоже в определенном смысле наделены такой свободой, характером и удачей.
Ну и какой же тут может быть толк от фаззера? Случайность, которую он порождает на порядок меньше той, с которой мы сталкиваемся в рантайме при прокачке гигабайтов памяти средним таким приложением на спринге. Гораздо полезнее для нас варировать паттерны поведения операционной системы, например, рандомно менять приоритеты тредам, как в chaos mode чудесного отладчика rr, или же полностью подменить планировщик на свой, как это сделано в Hermit, и уже в него добавлять свою, контролируемую случайность. Вот это и правда может вскрыть очень сложные, спорадичные баги в рантайме, т.к. путь исполнения будет максимально нетипичен, даже для такой хаотичной системы.
Забавно, что вот эти chaos моды добавляют тулы, которые как раз создавались для уменьшения недетерменизма и помощи в отладке (чтобы дать стабильный способ воспроизведения спорадичной проблемы). Но оказывается, что когда борешься с хаосом, со временем начинаешь неплохо понимать, как его можно создавать самостоятельно. Нахожу это очень поэтичным.
#дух_машины
BY Алло, это отладочная?
Share with your friend now:
tgoop.com/gdb_dbg/209