The tests under golang.org/x/tools almost always fail on the linux-arm builder.

Looking at the build dashboard, the most frequent failure mode (by far) seems to result in errors of the form fork/exec /workdir/go/bin/go: cannot allocate memory *os.PathError in the golang.org/x/tools/internal/lsp tests:

https://build.golang.org/log/5fb7985054d8b682b81438c385ff16e8325a3aa6 https://build.golang.org/log/e422caa59d35f5c76e097fdadb60407ee2807368 https://build.golang.org/log/3e3e538cf33e70880da37c2dd1c716b733b4b009 https://build.golang.org/log/739f069936cc47cc800b4d898c505e17a9d4a7e1

However, some of the other tests have also flaked with various resource-exhaustion errors:

A similar cannot allocate memory failure mode for golang.org/x/tools/go/internal/gcimporter: https://build.golang.org/log/99a21d9e2e1064d08890439b43de987e0bfcdf52

fatal error: runtime: out of memory in golang.org/x/tools/go/ssa: https://build.golang.org/log/de56b0ffe0e39b38b9ed449bd0cd382be72eda69

pthread_create failed: Resource temporarily unavailable and no space left on device: https://build.golang.org/log/7151dca16e38a6f61051f032b2f6b713253052ac


I don't know exactly what the resource footprint of the linux-arm builder is (@andybons or @dmitshur might know?), but if the x/tools tests are expected to pass within that footprint we may need to dial back the test concurrency on that builder.

CC @ianthehat

Comment From: dmitshur

I don't know exactly what the resource footprint of the linux-arm builder is

Our linux/arm builders are on Scaleway, see here. There are 50 builders and they're C1 BareMetal instances. Documentation at https://www.scaleway.com/en/bare-metal-instances/ says C1 instances have 2 GB of RAM, 4 ARMv7 cores.

2 GB of RAM certainly isn't a lot. The next step up, C2S, has 8 GB RAM, but also 64-bit CPUs instead of the 32-bit we need (not sure if that's a blocker or not).

Comment From: gopherbot

Change https://golang.org/cl/192332 mentions this issue: dashboard: skip x/tools on the linux-arm builder

Comment From: bradfitz

The other possibility is to use go test -p 1 on the linux-arm builder.

That'd require a bit of coordinator changes.

Comment From: bcmills

I'm not entirely sure that would even fix it: I don't know how much of the memory usage is due to parallelism vs. large test-cases, or how much of it ends up in long-running LSP servers.

Comment From: gopherbot

Change https://golang.org/cl/192336 mentions this issue: go/packages,internal/lsp: skip memory-intensive tests on the linux-arm builder

Comment From: gopherbot

Change https://golang.org/cl/192578 mentions this issue: all: skip more memory-intensive tests on linux-arm

Comment From: millerresearch

This issue applies (even more so) to the plan9-arm builders, which are mainly Raspberry Pi 3B+ boards with 1GB of RAM. I'll submit a CL to make the ExitIfSmallMachine test apply to plan9-arm, as it does to linux-arm.

Comment From: gopherbot

Change https://golang.org/cl/291469 mentions this issue: gopls/internal/regtest: exit if small machine

Comment From: gopherbot

Change https://golang.org/cl/322409 mentions this issue: internal/testenv: update linux-arm to linux-arm-scaleway

Comment From: dmitshur

The Scaleway linux/arm builders are no more, and there haven't been recent reports here. If this comes up on the newer linux/arm builders, watchflakes will file a report. Closing.