• Operating systems, kernels, and virtualization
  • Cloud Native with Kubernetes and containers
  • Telco and networking
  • Edge computing
  • Languages, libraries, and functions
  • Optimization, portability, diversity and variety
  • CI/CD and build services

The Works on Arm project has an ambitious scope to enable open source software on 64-bit Arm systems. This special edition of Works on Arm news recaps the overall mission and goals of the effort, and is prepared to accompany a presentation to be given at Linaro Connect 2018 in Vancouver, BC.

Works on Arm provides hardware and infrastructure resources to projects that are supporting 64-bit Arm (arm64 or aarch64) architectures. We focus on projects that have a maximum enabling impact on the ecosystem and like to take on ambitious efforts.

This is a brief rundown of project focus for the seven functional areas noted above. Most projects will slot into two or more areas of interest.

Operating systems, kernels, and virtualization

We seek out projects that look to build complete operating systems on arm64, and support them with bare metal resources. The effort includes resources for running the latest Linux kernel. Packet bare metal hardware boots with iPXE and supports both preconfigured and custom installations. To date we have collaborated with Ubuntu, Debian, Red Hat, CentOS, Fedora, SUSE, OpenSUSE, Alpine, NixOS, FreeBSD, and other efforts.

Effective virtualization of bare metal systems requires access to hardware, and Works on Arm has collaborated with the QEMU and KVM project teams to enable their efforts.

A popular system for providing virtual machines through a familiar interface is OpenStack, and Packet has worked with the OpenStack Foundation extensively to provide test and CI infrastructure and to support future production installations.

Cloud Native with Kubernetes and containers

Cloud Native computing focuses on the container abstraction originally implemented by Docker and the scheduling layer of Kubernetes originally developed by Google. The initial deployments of Kubernetes were all targeted at x86 systems, but the popularity of clusters of single-board arm64 computing resources to build test and educational cluster systems has helped drive interest in a full 64-bit Arm deployment of Kubernetes.

The Cloud Native stack is often programmed in Google’s “Go” language (golang), and the Works on Arm project has provided resources and expertise to identify portability and performance improvements needed to put arm64 software in this stack on an equal footing with other platforms.

Kubernetes at version 1.12 will have full arm64 capabilities. The next heavy lift is to port all packages in its Helm package manager to multiarchitecture support. This will entail investment in CI and build tooling to help package developers bring their work to support all systems. Packet has made an investment in one key networking tool (Project Calico) to enable multiarchitecture support for the variety of tools that make up that project.

Telco and networking

The telco and networking stack encompasses several large projects that look to bring virtualization of network functions to routing and switching facilities at the core and at the edge of the network.

Some of the largest of these projects are programmed in Java, and it is this use of Java that has prompted a Works on Arm investment in both the core language (through work with Adopt OpenJDK) and in understanding what can at times be deep dependencies on Java library functions.

Packet provides hardware to Works on Arm including high performance Mellanox NICs. We look forward in the future to additional smart NIC support, some of which have 64-bit Arm processors on board to further accelerate network functions.

Edge computing

Deployment of substantial computing resources at the edge of the network is a counterbalancing force to the centralized compute model that hyperscale processors have followed. Flexible computing works in the edge of the net, whether that be a home computing cluster, a micro data center at the base of a cell tower, or internet-of-things code embedded in objects.

The programming tools used in edge compute are characteristically diverse, with programming models often taking advantage of domain specific libraries and languages that work closely with the available hardware.

Work on edge computing applications motivates language and library support and development across systems like Python and Node.JS which provide flexible development environments combined with function integration with high performance C and C++ libraries tuned for performance.

Languages, libraries, and functions

Support for a wide variety of languages, and the libraries and functions built up from those languages, has been core to the Works on Arm project. We have invested in C and C++ (via LLVM and gcc) as well as providing core support for Go (golang), Node.JS (Javascript), and additionally scientific languages like Julia. We have collaborated with efforts to investigate the large function libraries provided by Java, Python, and Node.JS and to scope out those codebases for portability to arm64.

In turn, these function libraries provide a rich environment for function-as-a-service systems like OpenFaaS, Node-RED, and OpenWhisk to enable rapid deployment of relatively complex code in a greatly simplified environment.

Support for the biggest language families like LLVM can be complex because there are lots of independent projects underway in parallel that each address some aspect of the system as a whole. The CI requirements for such efforts will easily chew up as many machines as you can provide.

Optimization, portability, diversity and variety

Work on languages follows three major patterns. For core languages, we seek optimization both of the language itself as well as the extensive library support that mature languages provide. Languages and functions that are not as mature on arm64 require careful and thoughtful work to portability, especially of large code bases with libraries that are stable and resistant to change. Finally, we always seek out diversity and variety, especially when it comes to domain specific languages that provide an outsized benefit to solving problems within their narrow range of focus.

CI/CD and build services

Build systems are where the ideals of portability and multi-architecture support meet the reality of needing to test every change on every branch on every architecture, and to build a complete set of artifacts in an easy to consume format when the code is ready to ship.

Traditional build systems like Jenkins, buildbot, Bazel, OBS, and a host of others depend on access to fast compute for building and a plethora of lightweight virtual machines for testing. We are actively working across all of the largest projects that use Works on Arm resources to find build systems that are both effective in doing tests as well as efficient in system utilization.

The newer crop of CI-as-a-service vendors have taken to Works on Arm to expand their CI efforts to encompass arm64 as well as 32-bit Arm builds. Tools like Shippable, Codefresh, Drone, Resin, and others abstract out the CI space into a simple configuration file that can be incorporated into the project repository to drive testing and builds. In addition, some newer source code management systems like Gitlab incorporate CI into their mainline product.

More than anything else, we look to CI/CD to drive growth in the Works on Arm cluster.

Conclusions

Projects approach the Works on Arm program from a variety of perspectives. We take on tasks that originate internal to Arm and Linaro and from a wide variety of community supported and commercially supported efforts. Project maturity in terms of CI and build infrastructure ranges widely, and some projects are much larger than others.

The 2017-2018 program year provided us primarily with two hardware platforms for development. A Cavium ThunderX based system has been our workhorse for most efforts, and a much smaller number of Hisilicon Hi1616 based systems have been popular for their 32-bit capabilities.

For 2018-2019, we look to expand capacity and provide it in both larger and smaller units. For efforts that don’t need a full machine 24×7 we look to expand out our hosted CI/CD and our virtual machine capacity through OpenStack resources. We also look to add to the diversity of the hardware provided by Works on Arm to additional vendor equipment, to better support diverse workloads, ensure portability of efforts, and take advantage of the latest fast gear.

The arm64 ecosystem is very rich, and inevitably some aspects of it that are important are missing from this overview. We continue to work on optimization, portability, and diversity and variety of our support of that ecosystem, and welcome your active engagement in the process.