Охота на баг в рантайме Go на 32-битных встраиваемых системах

Hunting Down a Go Runtime Bug on 32-Bit Embedded Systems

Охота на баг в рантайме Go на 32-битных встраиваемых системах

Инженеры sigma-star нашли и исправили давний баг в рантайме Go, из-за которого приложения периодически падали на 32-битных ARM и i386 системах. Проблема была в netpoll: на little-endian системах хранение сырого указателя на eventfd в поле ev.Data приводило к конфликту с тегом fdseq, из-за чего сокет ошибочно принимался за eventfd. Баг проявлялся только в долго работающих программах после миллионов переиспользований pollDesc. Исправление, заменяющее сырой указатель на tagged nil pollDesc, уже вмержено в Go.

Мы можем только предполагать, но это говорит о том, что Google больше не запускает 32-битные программы на Go. Иначе они бы наткнулись на этот баг задолго до нас.
  1. dlopes7

    Очень интересное чтение, эти баги, которые проявляются только спустя долгое время в продакшене, труднее всего диагностировать.

  2. nasretdinov

    Go родился в эпоху 64-битных систем, я помню, что видел гораздо больше багов, которые проявляются только на 32-битных системах. Я почти уверен, что наблюдение из статьи верно: никто в Google не тестирует Go на чём-либо, кроме 64-битных ARM/x86 Linux.

  3. ReactiveJelly

    Значит, более сильная система типов на границе между Go и Linux поймала бы это?

Ещё за этот день

2026-08-29