Hello!
We’re trying to see how suitable ClearLinux is for HFT; it shows a lot of promise, with the optimisations and how far less bloated it is compared with other distributions.
A quick introduction follows for the benefit of those who are not familiar with the HFT domain.
The most important software component of an HFT system generally runs a tight loop receiving multicast packets (from the exchange computer systems), decoding financial instruments prices from them, taking some decisions based on these prices, and potentially sending orders via one or more TCP connections to the exchange.
Key to achieving low latencies in the network processing part is using high performance, kernel-bypass enabled network cards, such as those from SolarFlare and Mellanox.
The software package for SolarFlare cards is called onload, and it builds some kernel modules, some user-space libs, and some tools.
Being a new user I’m restricted to 2 links per post, so the urls below need some intervention.
It can be obtained from this page: https:/support-nic.xilinx.c[om]/wp/onload
where clicking on the OpenOnload category and selecting the first package called OpenOnload Release Package
it downloads to a zip file, which contains some text files and onload-7.1.1.75.tgz which contains the actual code to be built.
Note that the above package builds, installs and runs fine on RHEL/CentOS 8.3 with kernel 4.18.0-240.22.1.el8_3.x86_64 (which is heavily patched, as they do).
Having failed to build against the org.clearlinux.native.5.12.3-*
kernels, which are not supported by onload, I have tried onload-7.1.1.75 with the 2018 LTS kernel.
After unpacking onload-7.1.1.75.tgz, running
sudo scripts/onload_install
results in it picking up the correct kernel:
Build tree made for linux as x86_64_linux-4.19.190-203.lts2018
and building some of the kernel related components, as far as I can tell, but failing when building some user-space components, reproduced below:
../../../../../src/include/onload/declare_syscalls.h.tmpl:138:28: error: ‘__fxstat’ undeclared here (not in a function); did you mean ‘fstat’?
138 | CI_MK_DECL(int , __fxstat , (int, int, struct stat *));
| ^~~~~~~~
../../../../../src/lib/transport/ip/syscall.c:28:63: note: in definition of macro ‘CI_MK_DECL’
28 | # define CI_MK_DECL(ret, fn, args) ret (*ci_sys_##fn) args = fn
| ^~
../../../../../src/include/onload/declare_syscalls.h.tmpl:143:28: error: ‘__fxstat64’ undeclared here (not in a function); did you mean ‘fstat64’?
143 | CI_MK_DECL(int , __fxstat64 , (int, int, struct stat64 *));
| ^~~~~~~~~~
../../../../../src/lib/transport/ip/syscall.c:28:63: note: in definition of macro ‘CI_MK_DECL’
28 | # define CI_MK_DECL(ret, fn, args) ret (*ci_sys_##fn) args = fn
| ^~
make[3]: *** [../../../../../mk/after.mk:173: ci_ip_syscall.o] Error 1
Does this __fxstat64
issue seem familiar to anyone? I’ve not been able to find anything similar on this forum, or in the wild.
Has anyone been able to build onload after all, on any kernel on ClearLinux?
Any help would be very much appreciated. I’d attach the full build log, if I saw a way to do it.