Домой Статьи и аналитика Технологии При переводе Firefox на zlib-rs разработчики натолкнулись на ошибку в CPU Intel

При переводе Firefox на zlib-rs разработчики натолкнулись на ошибку в CPU Intel

Внедрение библиотеки на языке Rust принесло прирост производительности, но спровоцировало критический баг на процессорах 13-го и 14-го поколений.

Организация Trifecta Tech Foundation, занимающаяся развитием таких проектов, как ntpd-rs, sudo-rs, zlib-rs и bzip2-rs, сообщила о переводе браузера Firefox на использование библиотеки zlib-rs. Данная библиотека, написанная на языке Rust, предназначена для выполнения операций сжатия и распаковки данных по алгоритму gzip. Помимо повышения уровня безопасности за счет защиты от ошибок при работе с памятью, внедрение zlib-rs обеспечило существенный прирост производительности: по результатам тестов, ускорение при выполнении одиночных операций декодирования составило от 3.3 до 32.5 раз, а при обработке непрерывного потока — от 2.7 до 10.86 раз.

Проблемы после внедрения в Firefox 151

Библиотека была впервые задействована в стабильном релизе Firefox 151. Однако вскоре после интеграции часть пользователей столкнулась с аварийным завершением работы приложения, вызванным выходом за пределы допустимых границ памяти. Разработчики подчеркивают преимущество языка Rust в данной ситуации: программа предсказуемо завершилась с ошибкой, тогда как аналогичный инцидент при использовании библиотеки на языке C мог привести к скрытому повреждению данных без остановки процесса. В качестве временной меры разработчики выпустили патч 151.0.1, в котором вернулись к использованию классической библиотеки zlib.

Выявление ошибки в CPU Intel

Первые признаки сбоя были зафиксированы еще год назад на этапе раннего тестирования, однако воспроизвести их на рабочих станциях разработчиков не удавалось. Несмотря на это, после длительного периода проверки в бета-версиях браузера, было принято решение о полноценном внедрении zlib-rs. Только после анализа массовых отчетов о проблемах в релизной версии удалось выявить закономерность: сбой оказался вызван специфической ошибкой в микрокоде процессоров Intel на архитектуре Raptor Lake (13-е и 14-е поколения).

Технические подробности сбоя

Неполадка возникала из-за использования генератором кода LLVM инструкции mov byte ptr [rsi + rdi + 1], ch в процессе записи результатов кодирования Хаффмана в память. Выяснилось, что при выполнении данной команды процессоры семейства Raptor Lake ошибочно записывают в память младшие биты 0–7 (регистр CL) вместо ожидаемых битов 8–15 (регистр CH). На текущий момент разработчики уже внедрили обходное решение для этой проблемы в кодовую базу Firefox и библиотеки zlib-rs.

Источник: http://www.opennet.ru