ath79: increase openmesh sysupgrade copy block size
authorSven Eckelmann <sven@narfation.org>
Mon, 28 Dec 2020 15:59:13 +0000 (16:59 +0100)
committerAdrian Schmutzler <freifunk@adrianschmutzler.de>
Mon, 28 Dec 2020 18:37:24 +0000 (19:37 +0100)
commitd0a9cf662ee0e5bbe49f6b443e1374e73b10a946
tree4f565c4aa0fcf25f1de7179600fdd38f52c87911
parent5b37b52e69884c6c843738cc45ed8a1deba0eba3
ath79: increase openmesh sysupgrade copy block size

The upgrade script for the openmesh sysupgrade procedure used always an 1
byte block size. This made it easier to seek the correct position in the CE
image and to make sure the right amount of data was copied. But this also
meant that the reading/writing of data required an excessive amount of
syscalls and copy operations.

A 5.4MB big sysupgrade image on an OM2P-HS v3 needed roughly 120s for the
write operation (170s in total) during the sysupgrade.

But it is possible to reduce this overhead slightly:

* index access to read the file size can be done in single 8 byte chunk
  (while doing the seek with byte granularity) because each size entry is
  example 8 bytes long
* the fwupgrade.cfg can be read as one block (while seeking to its position
  using its actual byte offset) because it should be rather small and fit
  into the RAM easily
* the kernel can be read in 1KB blocks (while seking to its positions using
  its actual byte offset) because the the size of the kernel is always a
  multiple of the NOR flash block size (64KB and 256KB)

This results in a sysupgrade write time of roughly 90s (140s in total).

This could be reduced even further when also using larger chunks for the
rootfs. But the squashfs rootfs image is at the moment always

  (256KB or 64KB) * block + 4 bytes

long. It would be expected that the time for the sysupgrade write could be
reduced to roughly 30s (80s in total) when busybox's dd would support
the iflag count_bytes.

Reported-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
target/linux/ath79/generic/base-files/lib/upgrade/openmesh.sh