[PATCH] base-files: flush kernel memory cache during sysupgrade
Sven Roederer
devel-sven at geroedel.de
Sat Dec 5 18:11:50 EST 2020
Am Dienstag, 24. November 2020, 07:39:48 CET schrieb Hannu Nyman:
> Flush kernel memory caches during sysupgrade in order
> to mitigate the impact from memory consumption spikes
> in low-RAM devices.
>
> This may help to prevent sysupgrade causing a reboot
> before the actual flashing starts.
>
> Signed-off-by: Hannu Nyman <hannu.nyman at iki.fi>
> ---
>
> I have noticed this to help in 64 MB WNDR3700v2, where sysupgrade
> typically has failed when the router has been running some time,
> but succeeded when sysupgrade is done right after a reboot.
>
On a 8/32MB device (NanoStation M) it took several attemts to get a sysupgrade
in place. With this change it mostly finished successfully on the 1st attempt.
> The cache flushing is non-destructive and as the router is going
> to sysupgrade, there aren't "long-term" performance issues.
>
As it seems to have no sideeffects I would like to see this merged.
Best Sven
> Reference to mailing list discussion in
> http://lists.openwrt.org/pipermail/openwrt-devel/2020-November/032266.html
>
> Kernel documentation:
> https://www.kernel.org/doc/Documentation/sysctl/vm.txt
>
>
> package/base-files/files/lib/upgrade/common.sh | 1 +
> package/base-files/files/lib/upgrade/stage2 | 1 +
> 2 files changed, 2 insertions(+)
>
> diff --git a/package/base-files/files/lib/upgrade/common.sh
> b/package/base-files/files/lib/upgrade/common.sh index
> a5c27dc2fb..b44a5998f4 100644
> --- a/package/base-files/files/lib/upgrade/common.sh
> +++ b/package/base-files/files/lib/upgrade/common.sh
> @@ -297,6 +297,7 @@ indicate_upgrade() {
> # $(2): (optional) pipe command to extract firmware, e.g. dd bs=n skip=m
> default_do_upgrade() {
> sync
> + echo 3 > /proc/sys/vm/drop_caches
> if [ -n "$UPGRADE_BACKUP" ]; then
> get_image "$1" "$2" | mtd $MTD_ARGS $MTD_CONFIG_ARGS -j
"$UPGRADE_BACKUP"
> write - "${PART_NAME:-image}" else
> diff --git a/package/base-files/files/lib/upgrade/stage2
> b/package/base-files/files/lib/upgrade/stage2 index c7629c383f..23d356a447
> 100755
> --- a/package/base-files/files/lib/upgrade/stage2
> +++ b/package/base-files/files/lib/upgrade/stage2
> @@ -123,6 +123,7 @@ kill_remaining KILL 1
>
> sleep 1
>
> +echo 3 > /proc/sys/vm/drop_caches
>
> if [ -n "$IMAGE" ] && type 'platform_pre_upgrade' >/dev/null 2>/dev/null;
> then platform_pre_upgrade "$IMAGE"
More information about the openwrt-devel
mailing list