Works on Arm News is produced most Fridays by the Works on Arm project at Packet. Ed Vielmetti writes the newsletter, and Zoe Allen edits and produces it. If you are interested in subscribing to this publication, add your name athttps://www.worksonarm.com/blog .

In this issue

  • ESXi on Arm (VMware)
  • GCC 8.2 for Arm
  • Works on Arm Cluster BOF at Linaro Connect in Vancouver, BC
  • Cloudflare report on porting its software stack to arm64
  • LDC, a D language compiler targeting LLVM
  • Mono/Xamarian increases arm64 support in its CI build farm

ESXi on Arm (VMware)

VMware did a public demonstration of ESXi running on an Arm processor at their VMworld show in Las Vegas on August 27, 2018. The demo showed off the capabilities of doing virtualization at the edge of the network on Arm processors. As noted in The Register:

This morning’s keynote audience briefly glimpsed vSphere Client managing a 64-bit Arm Cortex-A72-powered host that was running four virtual machines. The box apparently had four logical processors, two network interfaces, had been up 184 days, and was using VMware ESXi 6.8.2 build 16864140. The hardware appears to be a Marvell Armada 8040-powered device, and was said to be within a turbine generator in a wind farm.

GCC 8.2 for Arm

A distribution of GCC 8.2 for Arm systems is now available from Arm. GCC 8.2 was released in July 14, 2018, and the Arm build of the entire toolchain targeted at the Arm Cortex-A family and implementing the Arm A-profile architecture was released on August 31, 2018.

GCC – now the “GNU compiler collection” – incorporates C, C++, and assembly language compilers, plus some Linaro specific processor macros to support continuity as this is a distribution that had previously been produced by Linaro.

In addition, this release includes a Spectre v1 mitigation backport based on an upstream Free Software Foundation trunk. The release notes say:

This is an initial backport of those mitigations in the GNU toolchain and should be regarded as support for prototyping and early access only. Moreover, while the backports include support for the other architectures, they are included for completeness and all issues regarding these patches must be taken up upstream in the https://gcc.gnu.org/bugzilla by reproducing the same with upstream FSF trunk. Arm is interested in feedback regarding these workarounds for Spectre v1.

A description of the mitigation has been published on LWN.net (link below).

Works on Arm cluster Birds of a Feather session at Linaro Connect, 19 September 2018

The Works on Arm cluster is run by Packet for Arm to provide test, development, and data center CI/CD resources for community projects to build on arm64. The project also includes a weekly video office hours, this weekly newsletter, and a channel on the Packet Community Slack and Freenode IRC (#worksonarm) for community discussion.

This BOF session will provide current and future users of the cluster an opportunity to discuss technical issues regarding integration, testing, Cloud Native and network workloads, and generally provide a forum for helping set the direction of the effort in the coming year.

The BOF leader, Ed Vielmetti, is director of the Works on Arm project.

The session runs from 15:00 – 15:25 on Wednesday, 19 September 2018, as part of the Linaro Connect conference to be held in Vancouver, British Columbia, Canada the week of 17-21 September.

Cloudflare report on porting its software stack to arm64

Alexander Huynh from Cloudflare has an excellent writeup on their efforts to port their software stack (which includes 100s of packages) to a new Debian-based arm64 infrastructure.

Our stack uses a diverse range of programming languages, including C, C++, Go, Lua, Python, and Rust. Different languages have different porting requirements, with some being easier than others.

The writeup focuses on cross-compilation needs, as developers are expected to do builds on their laptops during the development cycle for an eventual arm64 target use. To assist in the test efforts, Cloudflare makes extensive use of QEMU, targeting especially the Docker build and test cycle.

Alexander points to a patch submitted by Resin.IO to assist in the process of sandboxing arm64 processes into a new environment under QEMU on a host operating system. The new -execve option handles this requirement:

They’ve also submitted a patch to qemu-user that prepends the emulator into every execve call, similar to how binfmt_misc is implemented[2]. By prepending the emulator, you’re essentially forcing every new process to also be emulated, resulting in a nice self-contained environment.

Cloudflare notes one limitation in the QEMU test environment, having to do with QEMU’s inability to handle Go threads.

Going on a hunch, we confirmed a hypothesis that non-deterministic failures are generally due to threading issues. Unfortunately, opinion on the issue tracker showed that Go / QEMU incompatibilities aren’t a priority, so we were left without an upstream fix.

Will Newton noted this QEMU crash problem and has reproduceable code, which should help address the issue.

The Cloudflare software portability teardown is well worth reading in its entirety. It builds off last year’s discussion of the arm64 hardware powering this effort.

LDC, a D language compiler targeting LLVM

D is an object-oriented, imperative, multi-paradigm system programming language. LDC is an implementation of D that uses the LLVM language back end as a code generator.

An open issue tracks progress towards a full implementation of D targeting arm64. A notable remaining snag includes a fully realized implmentation of variadic arguments (va_arg), but enough of the compiler is working to produce a release, and there is continuous integration and testing based on Shippable’s arm64 support.

The current beta release of LDC is LDC 1.12.0-beta1 (of September 4, 2018) and the current stable release with arm64 support is LDC 1.11.0 (of August 18, 2018).

Mono/Xamarian increases arm64 support in its CI build farm

Sponsored by Microsoft, Mono is an open source implementation of Microsoft’s .NET Framework based on the ECMA standards for C# and the Common Language Runtime. A growing family of solutions and an active and enthusiastic contributing community is helping position Mono to become the leading choice for development of cross platform applications.

Jo Shields reports that the Mono build farm for arm64 is growing:

Setting up 10 new octo-core 1U ARM64 servers for the Mono/Xamarin CI farm.

The latest Stable Mono release is: 5.14.0 Stable (5.14.0.177). Packages are available for arm64 and other platforms for Ubuntu and Debian; there are not currently pre-built Mono packages for Centos and Fedora direct from the developers for platforms other than x86_64.