Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 Nov 2022 23:05:16 -0800
From:      Mark Millard <marklmi@yahoo.com>
To:        bob prohaska <fbsd@www.zefox.net>
Cc:        Mike Karels <mike@karels.net>, freebsd-arm@freebsd.org
Subject:   Re: adding swap when expanding root filesystem
Message-ID:  <9BF0BEB8-6074-4607-BA1B-B3462C5CEA66@yahoo.com>
In-Reply-To: <20221108043817.GA55121@www.zefox.net>
References:  <202211071610.2A7GAcHl090048@mail.karels.net> <20221107175206.GA49113@www.zefox.net> <78C2FBC4-D2CE-44B0-9535-02C0EDECD10A@karels.net> <20221107205150.GA53784@www.zefox.net> <09E80B35-0325-44E6-8191-55DCC79A51F1@yahoo.com> <20221108043817.GA55121@www.zefox.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Nov 7, 2022, at 20:38, bob prohaska <fbsd@www.zefox.net> wrote:

> On Mon, Nov 07, 2022 at 04:07:08PM -0800, Mark Millard wrote:
>> On Nov 7, 2022, at 12:51, bob prohaska <fbsd@www.zefox.net> wrote:
>>=20
>>> . . .
>=20
>> Also the amount of space
>> U-Boot and the like takes varies. The Rock64 images
>> use a 16 MiByte space for its U-Boot and the like,
>> which are stored outside any file system.=20
>=20
> I'm not sure how anything can be stored "outside any
> filesystem". Might it be better to say "in a private filesystem",
> as in not known to the running kernel?

Here are the instructions for putting U-Boot (and such)
on a Rick64:

# more /usr/local/share/u-boot/u-boot-rock64/README=20
U-Boot loader and related files for the Pine64 Rock64.

To install this bootloader on an sdcard just do:
dd if=3D/usr/local/share/u-boot/u-boot-rock64/idbloader.img =
of=3D/path/to/sdcarddevice seek=3D64 bs=3D512 conv=3Dsync
dd if=3D/usr/local/share/u-boot/u-boot-rock64/u-boot.itb =
of=3D/path/to/sdcarddevice seek=3D16384 bs=3D512 conv=3Dsync

idbloader.img and u-boot.itb are not file systems.
They are found by the exact position that they must
be put at, thus the seek=3D and bs=3D usage in the dd
commands above.

# file /usr/local/share/u-boot/u-boot-rock64/u-boot.itb
/usr/local/share/u-boot/u-boot-rock64/u-boot.itb: Device Tree Blob =
version 17, size=3D1184, boot CPU=3D0, string block size=3D131, DT =
structure block size=3D992

# file /usr/local/share/u-boot/u-boot-rock64/idbloader.img
/usr/local/share/u-boot/u-boot-rock64/idbloader.img: data

The content in those files are not representations of
file systems.

Here is what a gpart show -p indicates for an example
Rock64 media with idblooader and U-Boot on it via those
dd commands:

=3D>       63  244277185    da4  MBR  (116G)
         63      32705         - free -  (16M)
      32768     102312  da4s1  fat32lba  [active]  (50M)
     135080      28760         - free -  (14M)
     163840  241172480  da4s2  freebsd  (115G)
  241336320    2940928         - free -  (1.4G)

=3D>        0  241172480   da4s2  BSD  (115G)
          0  230686720  da4s2a  freebsd-ufs  (110G)
  230686720   10485760          - free -  (5.0G)

Note the:

         63      32705         - free -  (16M)

The 2 dd commands above put the content of idbloader.img
and of u-boot.itb into the so-called "free" space
indicated, at very particular positions.

> Is there any basic problem with automatically establishing a=20
> swap partition during a microSD card setup?  A trio of self-
> hosted armv7 Pi2's with swap on microSD have been running=20
> happily for over two years as name, mail and webservers on=20
> 64 GB cards. Admittely, aarch64 is a lot more swap-intensive,=20
> but a Pi3 ran for about a year on a 128 GB card before things=20
> started going wrong. That Pi3 was running buildworld
> most of the time.

Are you asking for someone to give such support
to each of the following contexts (ignoring
u-boot-master and u-boot-tools and the like
that also show up in the list)?

# ls -dC1 /usr/ports/sysutils/u-boot-*
/usr/ports/sysutils/u-boot-a13-olinuxino
/usr/ports/sysutils/u-boot-a64-olinuxino
/usr/ports/sysutils/u-boot-bananapi
/usr/ports/sysutils/u-boot-bananapim2
/usr/ports/sysutils/u-boot-beaglebone
/usr/ports/sysutils/u-boot-chip
/usr/ports/sysutils/u-boot-clearfog
/usr/ports/sysutils/u-boot-cubieboard
/usr/ports/sysutils/u-boot-cubieboard2
/usr/ports/sysutils/u-boot-cubox-hummingboard
/usr/ports/sysutils/u-boot-firefly-rk3399
/usr/ports/sysutils/u-boot-imx-serial-loader
/usr/ports/sysutils/u-boot-master
/usr/ports/sysutils/u-boot-nanopi-a64
/usr/ports/sysutils/u-boot-nanopi-m1plus
/usr/ports/sysutils/u-boot-nanopi-neo
/usr/ports/sysutils/u-boot-nanopi-neo-air
/usr/ports/sysutils/u-boot-nanopi-neo2
/usr/ports/sysutils/u-boot-nanopi-r4s
/usr/ports/sysutils/u-boot-olimex-a20-som-evb
/usr/ports/sysutils/u-boot-olinuxino-lime
/usr/ports/sysutils/u-boot-olinuxino-lime2
/usr/ports/sysutils/u-boot-olinuxino-lime2-emmc
/usr/ports/sysutils/u-boot-orangepi-one
/usr/ports/sysutils/u-boot-orangepi-pc
/usr/ports/sysutils/u-boot-orangepi-pc-plus
/usr/ports/sysutils/u-boot-orangepi-pc2
/usr/ports/sysutils/u-boot-orangepi-plus-2e
/usr/ports/sysutils/u-boot-orangepi-r1
/usr/ports/sysutils/u-boot-orangepi-zero
/usr/ports/sysutils/u-boot-orangepi-zero-plus
/usr/ports/sysutils/u-boot-pandaboard
/usr/ports/sysutils/u-boot-pcduino3
/usr/ports/sysutils/u-boot-pine-h64
/usr/ports/sysutils/u-boot-pine64
/usr/ports/sysutils/u-boot-pine64-lts
/usr/ports/sysutils/u-boot-pinebook
/usr/ports/sysutils/u-boot-pinebookpro
/usr/ports/sysutils/u-boot-qemu-arm
/usr/ports/sysutils/u-boot-qemu-arm64
/usr/ports/sysutils/u-boot-qemu-riscv64
/usr/ports/sysutils/u-boot-riotboard
/usr/ports/sysutils/u-boot-rock-pi-4
/usr/ports/sysutils/u-boot-rock64
/usr/ports/sysutils/u-boot-rockpro64
/usr/ports/sysutils/u-boot-rpi
/usr/ports/sysutils/u-boot-rpi-0-w
/usr/ports/sysutils/u-boot-rpi-arm64
/usr/ports/sysutils/u-boot-rpi2
/usr/ports/sysutils/u-boot-rpi3
/usr/ports/sysutils/u-boot-rpi3-32
/usr/ports/sysutils/u-boot-rpi4
/usr/ports/sysutils/u-boot-sifive-fu540
/usr/ports/sysutils/u-boot-sifive-fu740
/usr/ports/sysutils/u-boot-sinovoip-bpi-m3
/usr/ports/sysutils/u-boot-sopine
/usr/ports/sysutils/u-boot-sopine-spi
/usr/ports/sysutils/u-boot-tools
/usr/ports/sysutils/u-boot-utilite
/usr/ports/sysutils/u-boot-wandboard

Just all those that happen to have snapshots made these
days?:

13.1+ and 14.0:
armv6 RPI-B
armv7 GENERICSD
aarch64 GENERIC
aarch64 RPI
aarch64 PINE64
aarch64 PINE64-LTS
aarch64 PINEBOOK
aarch64 ROCK64
aarch64 ROCKPRO64
riscv64 GENERIC
riscv64 GENERICSD

12.4 (in process) :
armv6 RPI-B
armv7 BANANAPI
armv7 CUBIEBOARD
armv7 CUBIEBOARD2
armv7 CUBOX-HUMMINGBOARD
armv7 RPI2
armv7 WANDBOARD
armv7 GENERICSD
aarch64 GENERIC
aarch64 PINE64
aarch64 PINE64-LTS

A subset of those?

What fraction of what size user base actually does large
port builds and buildworld buildkernel or the like on
each of these [or otherwise needs swap space in order to
have enough memory space (not just RAM)]. If the
volunteer(s) that provide this context have no interest
in doing such activities on such hardware, how likely is
it that they are going to provide the more involved setup?

> . . .
>=20
> Configuring swap manually on a RPi microSD system is a very
> considerable amount of work.

That might contribute to what the volunteer(s) choose to do
or not do.

> Having it happen by default=20
> wastes at most a few percent of the card capacity.

Presuming large enough capacities. 3.5 GiBytes would be
more than 10% of 32 GiBytes, for example. What is the
distribution of media sizes for folks that do not do
large port builds or buildworld buildkernel on such
systems --but do use such systems in some way? What
fraction of the overall use of such systems is that
set of folks?

> At this
> point I can't see any reason to say it's a bad idea and
> have some personal experience to suggest it's a good idea.

Getting someone else to be interested in doing what
you would find useful can be a challenge. Nothing
about that requires that the idea be a bad idea.
There are far too many good ideas for various context(s)
to implement them all for all the spanned contexts.

> [bsdinstall limitations snipped]
>=20
> It might be worth mentioning the /boot/loader.conf and=20
> /etc/sysctl.conf additions you've mentioned in other threads,
> as adjuncts to having autoconfigured swap on microSD. They've
> all been helpful in my experiments on RPi2 and RPi3. I think
> they'd be constructive additions to the RPi images and perhaps
> others..=20
>=20

Mostly, these things go back to what we learned from markj
primarily (vm.pageout_oom_seq) and kib primarily
(vm.pfault_oom_attempts and vm.pfault_oom_wait), presuming
that I remember which-for-what accurately. Using
vm.swap_enabled and vm.swap_idle_enabled to avoid a form
of losing communication with the system(s) when they are
using the swap/paging space is more recent.

=3D=3D=3D
Mark Millard
marklmi at yahoo.com




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9BF0BEB8-6074-4607-BA1B-B3462C5CEA66>