You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

3.7 KiB

ARM64 Support for FoundationDB Integration

This document explains how to run FoundationDB integration tests on ARM64 systems (Apple Silicon M1/M2/M3 Macs).

Problem

The official FoundationDB Docker images (foundationdb/foundationdb:7.1.61) are only available for linux/amd64 architecture. When running on ARM64 systems, you'll encounter "Illegal instruction" errors.

Solutions

We provide three different approaches to run FoundationDB on ARM64:

Pros: Native performance, no emulation overhead
Cons: Longer initial setup time (10-15 minutes to build)

# Build and run ARM64-native FoundationDB from source
make setup-arm64
make test-arm64

This approach:

  • Builds FoundationDB from source for ARM64
  • Takes 10-15 minutes on first run
  • Provides native performance
  • Uses docker-compose.arm64.yml

2. 🐳 x86 Emulation (Quick Setup)

Pros: Fast setup, uses official images
Cons: Slower runtime performance due to emulation

# Run x86 images with Docker emulation
make setup-emulated
make test-emulated

This approach:

  • Uses Docker's x86 emulation
  • Quick setup with official images
  • May have performance overhead
  • Uses standard docker-compose.yml with platform specification

3. 📝 Mock Testing (Fastest)

Pros: No dependencies, always works, fast execution
Cons: Doesn't test real FoundationDB integration

# Run mock tests (no FoundationDB cluster needed)
make test-mock
make test-reliable

Files Overview

File Purpose
docker-compose.yml Standard setup with platform specification
docker-compose.arm64.yml ARM64-native setup with source builds
Dockerfile.fdb-arm64 Multi-stage build for ARM64 FoundationDB
README.ARM64.md This documentation

Performance Comparison

Approach Setup Time Runtime Performance Compatibility
ARM64 Native 10-15 min ARM64 only
x86 Emulation 2-3 min ARM64 + x86
Mock Testing < 1 min Any platform

Quick Start Commands

# For ARM64 Mac users - choose your approach:

# Option 1: ARM64 native (best performance)
make clean && make setup-arm64

# Option 2: x86 emulation (faster setup) 
make clean && make setup-emulated

# Option 3: Mock testing (no FDB needed)
make test-mock

# Clean up everything
make clean

Troubleshooting

Build Timeouts

If ARM64 builds timeout, increase Docker build timeout:

export DOCKER_BUILDKIT=1
export BUILDKIT_PROGRESS=plain
make setup-arm64

Memory Issues

ARM64 builds require significant memory:

  • Increase Docker memory limit to 8GB+
  • Close other applications during build

Platform Detection

Verify your platform:

docker info | grep -i arch
uname -m  # Should show arm64

CI/CD Recommendations

  • Development: Use make test-mock for fast feedback
  • ARM64 CI: Use make setup-arm64
  • x86 CI: Use make setup (standard)
  • Multi-platform CI: Run both depending on runner architecture

Architecture Details

The ARM64 solution uses a multi-stage Docker build:

  1. Builder Stage: Compiles FoundationDB from source

    • Uses Ubuntu 22.04 ARM64 base
    • Installs build dependencies (cmake, ninja, etc.)
    • Clones and builds FoundationDB release-7.1
  2. Runtime Stage: Creates minimal runtime image

    • Copies compiled binaries from builder
    • Installs only runtime dependencies
    • Maintains compatibility with existing scripts

This approach ensures we get native ARM64 binaries while maintaining compatibility with the existing test infrastructure.