System update bandwidth usage

I’m new to Mender and I had a question about the system update feature, to which the answer I couldn’t really find in the docs.

I’m working with Raspberry Pi OS. When using the Mender image each partition needs about 4.1GB. If we do a system update with a new image, I was wondering if we also need to download 4.1GB for a system update? My devices have very constrained bandwidth, so this would not be an option. I guess this also depends on the delta of the new image, but I wondered about the details.

If anyone has experience doing system updates with Raspberry Pi OS on Raspberry Pi 3 and knows about this data usage, I’d be very interested to know.

the mender-artifact (.mender file) is usually compressed if you have configured them to be compressed.
So they are usually a lot smaller to download than a full uncompressed partition image

as an example i have one project based upon ubuntu with 9GB partitions and my resulting mender update file compressed with lzma results is 420MB.

By comparison a yocto project of mine that has 1.5GB partitions results in a 68MB mender file

You can usually get the size down my removing unnecessary content from your golden image before mender-converting it

Thanks for the reply! I figured some compression might happen but it’s nice to have some numbers attached to it. So I guess from a rough estimate, working with partitions of 4GB, the update might be a few 100 MBs. Depending of course on the changes.

But smaller partitions might help… I’ll look into configuring Yocto and baking the image. 68 MB is way better in my scenario, but unfortunately it might still be too much. I’ll investigate.

if your partitions are mostly zeros then they will generally compress down pretty small, so i’m not sure partition size can be directly correlated with the final mender artifact size.

It really depends on, what software your bundling in your image, if they are small native binaries then its should compress well, however if you are bundling larger runtimes like Python, Java etc then less so.

You can definitely get smaller than 68MB as i’m bundling some large runtimes in that image update.

With yocto you only get the minimum if you start with a minimal image config as its historically designed for space constrained embedded devices, but requires more work to setup as basically you are the distro maintainer as you are making your own distro.

The are further discussions on this forum on the type of things to remove when working on non-yocto projects to get the compressed image size smaller.

more numbers relating to compression can be found here when we looked into it further:

https://tracker.mender.io/browse/MEN-761

More discussion here on what to remove for non-yocto projects

Yes that’s what I’ve experienced working with Yocto, it gets increasingly more complex and difficult as soon as you develop your own layers, modules, config, etc.

In general we’ll use Go binaries but for system update we might update other libraries so it might increase. We’ll do our own investigations as well but this is already very helpful, thank you.