Тесты Go -race не работают на GitHub Действия Ubuntu с ThreadSanitizer ENOMEM (работает на macOS)Linux

Ответить
Anonymous
 Тесты Go -race не работают на GitHub Действия Ubuntu с ThreadSanitizer ENOMEM (работает на macOS)

Сообщение Anonymous »

Тело сообщения (StackOverflow/Reddit/и т. д.)
Я провожу тесты Go с детектором гонок в GitHub Actions через Nix, и всегда сталкиваюсь с ошибкой выделения ThreadSanitizer на Linux-раннерах. На macOS точно такой же конвейер работает нормально.
Ошибка:

Код: Выделить всё

==5050==ERROR: ThreadSanitizer failed to allocate 0x1fc0000 (33292288) bytes at address caaaab6a0000 (errno: 12)
FAIL    go.trai.ch/bob/internal/core/domain 0.007s
FAIL
Мой 

Код: Выделить всё

.github/workflows/ci.yaml
 сейчас выглядит так:

Код: Выделить всё

name: CI

on:
push:
branches: [ main ]
pull_request:

jobs:
test:
name: Test on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, macos-26]

steps:
- uses: actions/checkout@v6

- uses: DeterminateSystems/nix-installer-action@v21
- uses: DeterminateSystems/magic-nix-cache-action@v13

- name: Check Flake
run: nix flake check

- name: Run Tests
run: nix develop --command go test -v -race ./...

- name: Build Binary
run: nix build
Что я вижу
  • В macOS runner: 

    Код: Выделить всё

    go test -v -race ./...
     успешно.
  • В Ubuntu runner: 

    Код: Выделить всё

    go test -v -race ./...
     постоянно терпит неудачу из-за ошибки ThreadSanitizer «не удалось выделить… errno: 12», указанной выше.
  • Сбой происходит только при использовании .
Что я уже пробовал [*]Попробуйте различные действия установщика Nix (например, с 

Код: Выделить всё

magic-nix-cache
).

[*]Выполнение того же рабочего процесса без каких-либо изменений в самом коде Go.

[*]Проблема возникает только в Linux CI; локально (в том числе на macOS) 

Код: Выделить всё

go test -race ./...
 работает нормально.


Окружающая среда (приблизительно)
  • Платформа: действия GitHub
  • ОС: запуск Ubuntu через 

    Код: Выделить всё

    runs-on: ubuntu-22.04
     (и другие, которые я пробовал) и macOS через 

    Код: Выделить всё

    runs-on: macos-26
  • Менеджер пакетов: Nix (хлопья)
  • Команда: 

    Код: Выделить всё

    nix develop --command go test -v -race ./...
  • Go: устанавливается через Nix (из )
(Если поможет, могу добавить  или точный фрагмент / 

Код: Выделить всё

nix develop
 setup.)
Вопросы
  • Что обычно вызывает подобную ошибку выделения ThreadSanitizer (

    Код: Выделить всё

    errno: 12
    ) в Linux в действиях GitHub?
  • Вероятно ли это:
    • проблема с ограничением памяти в бегунке Ubuntu,
    • что-то конкретное о том, как детектор гонок Go / Tsan работает в Linux,
    • или связано с запуском Go через Nix (например, некоторые проблемы с песочницей Nix/ulimit/ASLR/адресным пространством)?
  • Существуют ли рекомендуемые способы:
    • уменьшить Tsan /  использование памяти в тестах Go на CI или
    • настройте GitHub Actions/Nix так, чтобы 

      Код: Выделить всё

      go test -race
       меньшая вероятность нехватки памяти?
  • В качестве обходного пути распространена ли практика:
    • запускать  только в подмножестве пакетов
    • или только в версиях macOS
    • или настройте 

      Код: Выделить всё

      GORACE / GOMAXPROCS
       /проверить параллелизм для CI?
Есть какие-нибудь подсказки о том, как отладить это в действиях GitHub (например,  проверки, переменные среды для Tsan/Go, параметры Nix и т. д.) или известные проблемы с Go  + Nix + Ubuntu будут очень признательны.

Подробнее здесь: https://stackoverflow.com/questions/798 ... omem-works
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»