Deploying AArch64 images in an X64 ecosystem

One of the things I always consider when deploying aarch64 architectures inside a developer ecosystem is about how to deploy applications to the cloud.

We all build on Intel except some teammates that are using M1, M2 processors (ARM). So it creates some friction cause when you have to test developments locally but deploy to AArch64 it means you should have a layer of emulation based on QEMU or similar.

So I wonder how does people handle this. At least from what I can see we need:

  • Be able to run x64 workloads in Aarch64 systems. Postgres, mysql, etc.
    • So you have dependencies running.
  • Have different compilations for different architectures in the pipeline, so we test on intel but we also tests on target. That means that repos must have doubled size artifacts (x84, aarch64)
  • Larger pipelines to run test suites in both archs. (I did a patch for thrift that was working nice in intel 32, 64 but not in arm).
  • Optimized jvm, if you run java.
  • Emulation layer to be able to run the whole ecosystem in local for local dev or testing. QEMU? Or native images in case of performance issues.

So… Having all this in mind. What are best practices?

1 Like

In my mind I can think that the team will work in his laptops with intel, buid and test on native arch. And push to a repo.
Once code it’s there it should pass the pipeline for the target architecture, aarch64. So the build system must run in this architecture to be able to run the tests. It means that we must have workers ready for aarch64. Once it passes it will push to a artifact repository in the native architecture and build images for common development architectures.

Intel workers will recompile, pass tests and build artifacts for x64. An leave ready to use images for composing services and local use.

That means that there’s no way to take advantage of compilation steps or artifact storage… They will be doubled or tripled depending on how many architectures we will require to be supported.

What happens with third party software like Mysql, Postgres, and other products. I suppose that cassandra for example is not a problem since it runs in JVM. But what about native ones… Do we have performance graphs when running on the emulation layer?

Do you use native nodes to run this software? (Mixed architecture datacenters)

1 Like