We recently added support to NanoVMS Radar that allows customers access to real-time data for additional runtime protection. In the course of adding that we had to update our relatively naive http client that is used in the cloud_init klib. The cloud_init klib allows you to do certain things like check into a metadata server or download env information from a secret store.
We recently made some changes to allow more support for various TCP KEEP_ALIVE options and for NAPI ids. Let's chat TCP KEEP_ALIVE first. You probably know about HTTP KEEP_ALIVE which allows you to issue multiple http requests on the same connection without having to go through another handshake. There is a similar, albeit totally different capability, that operates at a lower layer of the stack on TCP called... wait for it... TCP KEEP_ALIVE.
Statx is a newer version of the stat syscall. It has a few improvements including the ability to request specific information rather than the whole kit & kaboodle making it faster in certain cases than stat and also has support for showing attributes like whether or not a file is compressed, encrypted or immutable.
Recently one of our customers noticed that one of their instances was failing to boot on a c6g.xlarge. We asked for some sample code as we were not able to confirm what they were seeing. (note: Sample reproducible code is always super helpful in this case). After some back and forth we realized they were having trouble booting on a c6g.8xlarge - not a c6g.xlarge. What's the difference? It's basically the same instance type - it's not like it's a different arch or a different instance class. The difference, amongst other differences like much larger amounts of ram, is that one has 4 vcpu and the other has 32.
There are multiple clocks on your machine. Primarily, you've got the RTC (real time clock) and the system clock. The RTC is on all the time even when the power is off - it uses a battery. The system clock on the other hand starts at boot. We've had NTP support for a long time now. We've even had PTP clock support for special AWS instance types that use it, however we never really exported this functionality for other programs to utilize it.
When making a package for opencloud I noticed that we were missing the extended attribute family of syscalls. OpenCloud is designed not to have to rely on a separate database and stores metdata directly into files with extended attributes, falling back on external metadata files if necessary.
One of our users had asked about running WildFly and while putting together the package for it I noticed a call to copy_file_range was failing. In many cases these types of functions are opportunistic - that is they fall back on other less performant ways of doing the same thing.
While looking at a sample grpc program the other day a user had mentioned that certain socket options were not being honored in nanos. This is not surprising and there are quite a few things like this nanos might not support today - you'd be surprised how much code works regardless.
Nanos is not linux but sometimes we stub certain syscalls so that applications written under the assumption they run on linux still work under Nanos. sched_setscheduler, sched_get_priority_max, sched_get_priority_min are all syscalls we recently stubbed.
Security does not have to be the nightmare it is. You've got better things to do than dealing with VM sprawl. Show everyone how you were responsible for halving the infrastructure budget. Be the winner!
Schedule a Demo