On 12/7/22 18:31, Xiangyu Chen wrote:
On 11/7/22 10:18, Khem Raj wrote:
CAUTION: This email comes from a non Wind River email account!
Do not click links or open attachments unless you recognize the
sender and know the content is safe.
On Sun, Nov 6, 2022 at 5:21 PM Xiangyu Chen
<[email protected]> wrote:
On 11/1/22 09:48, Xiangyu Chen wrote:
With the default jitter options aarch64 CPU-based devices typically
experience continuous
high CPU utilisation for several minutes after rngd starts.
Accoring to the rng-tools issue #150[1] and comments[2],in order to
address this,
the following configuration changes have been made, those
configurations
also can be found on Alpine Linux[3]:
- reduce the number of threads used to 1 in total, rather than 1
per core.
- reduce the buffer size from 16535 to 4133 which reduces the time
taken
to fill the buffer (and so reduces the duration of CPU load).
[1] https://github.com/nhorman/rng-tools/issues/150
[2]
https://github.com/nhorman/rng-tools/issues/150#issuecomment-953079212
[3]
https://git.alpinelinux.org/aports/tree/main/rng-tools/rngd.confd-arm
Signed-off-by: Xiangyu Chen <[email protected]>
---
Changes in V2:
*put the aarch64 specific default file in
meta/recipes-support/rng-tools/rng-tools/aarch64
Friendly ping. Is there any more concern on this?
My concern is that will it be so for all aarch64 machines ?
Regarding the rng-tools high cpu usage still need to be discussed here.
Currently, on some platforms like ARM, there is not any good idea to
solve the rng-tools jitter module take full cpu load during the daemon
start. In fact, after kernel v5.6, the /dev/random doesn't block
anymore, so, perhaps we can use the parameter to limit rng-tools
resource during it start up, does anyone have any ideas to propose?
Thanks!
We have verified 2 boards on kernel 5.6 later, 1 board without rngd,
random number was also generated in perfectly speed, sshd also was
working well.
But in another board on kernel 5.2 without rngd, a testing random
progress was blocked due to no enough entropy.
From the log, on kernel 5.15, we can observe that crng init in early
stage before mounting the rootfs,but on kernel 5.2, crng init after
rootfs was mounted, and although crng inited, the entropy still low if
rngd not start, a dd test progress was blocked due to low entropy,
that's explain why openssh enabled the rngd/rng-tools .
So, from the test result we can see, for newly kernel, the rngd seems
not necessary any more.
Testing result as below:
Board 1: Marvell CN96xx CRB (Cortex A72, aarch64)
crng init stage:
oot@marvell-cn96xx:~# dmesg | grep -C 5 crng
[ 88.486463] bus: 'pci': __driver_probe_device: matched device
0000:03:00.1 with driver cavium_rng_vf
[ 88.486513] bus: 'pci': really_probe: probing driver cavium_rng_vf
with device 0000:03:00.1
[ 88.488911] cavium_rng_vf 0000:03:00.1: Adding to iommu group 73
[ 88.516290] cavium_rng_vf 0000:03:00.1: assign IRQ: got 0
[ 88.519205] driver: 'cavium_rng_vf': driver_bound: bound to device
'0000:03:00.1'
[ 88.519459] bus: 'pci': really_probe: bound device 0000:03:00.1 to
driver cavium_rng_vf
[ 88.519473] random: crng init done
[ 88.519723] driver: 'cavium_rng_pf': driver_bound: bound to device
'0000:03:00.0'
[ 88.523222] bus: 'pci': really_probe: bound device 0000:03:00.0 to
driver cavium_rng_pf
[ 88.523295] devices_kset: Moving 0000:01:01.4 to end of list
[ 88.523320] PM: Moving pci:0000:01:01.4 to end of list
Kernel version:
root@marvell-cn96xx:~# uname -a
Linux marvell-cn96xx 5.15.78-yocto-standard #1 SMP PREEMPT Wed Nov 23
04:17:58 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
Disabled rng-tools(rngd) and testing read random, we can observe almost
20.4 MB/s random number was generated from /dev/random with dd command,
rngtest also was working well:
root@marvell-cn96xx:~# systemctl stop rng-tools
root@marvell-cn96xx:~# ps -ef |grep rng
root 441 2 0 10:59 ? 00:00:00 [hwrng]
root 864 848 0 11:02 pts/0 00:00:00 grep rng
root@marvell-cn96xx:~# dd if=/dev/random of=/dev/null status=progress
1342177280 bytes (1.3 GB, 1.2 GiB) copied, 66 s, 20.4 MB/s
10+0 records in
10+0 records out
1342177280 bytes (1.3 GB, 1.2 GiB) copied, 65.7033 s, 20.4 MB/s
root@marvell-cn96xx:~# rngtest -c 1000 </dev/random
rngtest 6.15
Copyright (c) 2004 by Henrique de Moraes Holschuh
This is free software; see the source for copying conditions. There is
NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.rngtest: starting FIPS tests...
rngtest: bits received from input: 20000032
rngtest: FIPS 140-2 successes: 1000
rngtest: FIPS 140-2 failures: 0
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
rngtest: FIPS 140-2(2001-10-10) Poker: 0
rngtest: FIPS 140-2(2001-10-10) Runs: 0
rngtest: FIPS 140-2(2001-10-10) Long run: 0
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=4.340; avg=135.364; max=146.719)Mibits/s
rngtest: FIPS tests speed: (min=8.197; avg=69.020; max=72.800)Mibits/s
rngtest: Program run time: 418771 microseconds
root@marvell-cn96xx:~# echo $?
0
root@marvell-cn96xx:~#
Board 2: NXP i.mx6q(Cortex-A9 armb7l 32bit)
crng init stage:
root@nxp-imx6:~# journalctl -k
Apr 28 17:42:27 nxp-imx6 kernel: Booting Linux on physical CPU 0x0
Apr 28 17:42:27 nxp-imx6 kernel: Linux version 5.15.80-yocto-standard
(oe-user@oe-host) (arm-wrs-linux-gnueabi-gcc (GCC) 11.3.0, GNU ld (GNU
Binutils) 2.38.20220708) #1 SMP PREEMPT Mon Dec 5 17:32:29 UT>
Apr 28 17:42:27 nxp-imx6 kernel: CPU: ARMv7 Processor [412fc09a]
revision 10 (ARMv7), cr=10c5387d
Apr 28 17:42:27 nxp-imx6 kernel: CPU: PIPT / VIPT nonaliasing data
cache, VIPT aliasing instruction cache
Apr 28 17:42:27 nxp-imx6 kernel: OF: fdt: Machine model: Freescale i.MX6
Quad SABRE Smart Device Board
Apr 28 17:42:27 nxp-imx6 kernel: Memory policy: Data cache writealloc
Apr 28 17:42:27 nxp-imx6 kernel: Reserved memory: created CMA memory
pool at 0x2c000000, size 320 MiB
Apr 28 17:42:27 nxp-imx6 kernel: OF: reserved mem: initialized node
linux,cma, compatible id shared-dma-pool
Apr 28 17:42:27 nxp-imx6 kernel: Zone ranges:
......
Apr 28 17:42:27 nxp-imx6 kernel: mmcblk2: mmc2:ccbe SD02G 1.84 GiB
Apr 28 17:42:27 nxp-imx6 kernel: random: crng init done
Apr 28 17:42:27 nxp-imx6 kernel: mmcblk2: p1 p2
Kernel version:
root@nxp-imx6:~# uname -a
Linux nxp-imx6 5.15.80-yocto-standard #1 SMP PREEMPT Mon Dec 5 17:32:29
UTC 2022 armv7l armv7l armv7l GNU/Linux
Disabled rng-tools(rngd) and testing read random, we can observe almost
31.9 MB/s random number was generated from /dev/random with dd command,r
ngtest also was working well:
root@nxp-imx6:~# rngtest -c 1000 </dev/random
rngtest 6.15
Copyright (c) 2004 by Henrique de Moraes Holschuh
This is free software; see the source for copying conditions. There is
NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.rngtest: starting FIPS tests...
rngtest: bits received from input: 20000032
rngtest: FIPS 140-2 successes: 999
rngtest: FIPS 140-2 failures: 1
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
rngtest: FIPS 140-2(2001-10-10) Poker: 0
rngtest: FIPS 140-2(2001-10-10) Runs: 0
rngtest: FIPS 140-2(2001-10-10) Long run: 1
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=96.820; avg=326.769; max=340.598)Mibits/s
rngtest: FIPS tests speed: (min=15.090; avg=37.543; max=40.324)Mibits/s
rngtest: Program run time: 570229 microseconds
root@nxp-imx6:~#
root@nxp-imx6:~# dd if=/dev/random of=/dev/null status=progress
318916096 bytes (319 MB, 304 MiB) copied, 10 s, 31.9 MB/s^C
676517+0 records in
676516+0 records out
346376192 bytes (346 MB, 330 MiB) copied, 10.8611 s, 31.9 MB/s
Board 3: imx8q with kernel 5.2
crng init stage:
root@nxp-imx8:~# dmesg | grep -C 5 crng
[ 13.219541] [VPU Decoder] error: vpu_firmware_download() request fw
vpu/vpu_fw_imx8_dec.bin failed(-2)
[ 13.228465] [VPU Encoder] error: vpu_firmware_download fail
[ 13.236340] [VPU Decoder] error: vpu_firmware_download fail
[ 13.244367] [VPU Encoder] failed to create encoder ctx
[ 13.769137] fsl-audmix 59840000.audmix: Started TDM1 needed for
config propagation!
[ 14.967484] random: crng init done
[ 14.969603] random: 7 urandom warning(s) missed due to ratelimiting
[ 15.724775] fsl-audmix 59840000.audmix: Started TDM1 needed for
config propagation!
[ 39.911462] can-en: disabling
[ 39.913138] can-stby: disabling
Kernel version:
root@nxp-imx8:~# uname -a
Linux nxp-imx8 5.2.60-yocto-standard #1 SMP PREEMPT Mon Feb 28 13:28:52
UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
Disabled the rngd and reboot again, the system available entropy very low:
root@nxp-imx8:~# cat /proc/sys/kernel/random/entropy_avail
36
Using dd command to read random was blocked until break by manual:
root@nxp-imx8:~# dd if=/dev/random of=/dev/null status=progress
^C0+0 records in
0+0 records out
0 bytes copied, 3.96411 s, 0.0 kB/s
The rngtest util also was blocked until break by manual:
root@nxp-imx8:~# ps -ef |grep rng
root 459 448 0 13:42 pts/0 00:00:00 grep rng
root@nxp-imx8:~# rngtest -c 1000 </dev/random
rngtest 6.7
Copyright (c) 2004 by Henrique de Moraes Holschuh
This is free software; see the source for copying conditions. There is
NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.rngtest: starting FIPS tests...
^Crngtest: bits received from input: 48
rngtest: FIPS 140-2 successes: 0
rngtest: FIPS 140-2 failures: 0
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
rngtest: FIPS 140-2(2001-10-10) Poker: 0
rngtest: FIPS 140-2(2001-10-10) Runs: 0
rngtest: FIPS 140-2(2001-10-10) Long run: 0
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=0.000; avg=0.000; max=0.000)bits/s
rngtest: FIPS tests speed: (min=0.000; avg=0.000; max=0.000)bits/s
rngtest: Program run time: 91647889 microseconds
root@nxp-imx8:~#
Br,
Xiangyu
Thanks,
Xiangyu
---
.../rng-tools/rng-tools/aarch64/default | 11
+++++++++++
1 file changed, 11 insertions(+)
create mode 100644
meta/recipes-support/rng-tools/rng-tools/aarch64/default
diff --git
a/meta/recipes-support/rng-tools/rng-tools/aarch64/default
b/meta/recipes-support/rng-tools/rng-tools/aarch64/default
new file mode 100644
index 0000000000..5a2fbcc9ef
--- /dev/null
+++ b/meta/recipes-support/rng-tools/rng-tools/aarch64/default
@@ -0,0 +1,11 @@
+# With the default jitter options Arm CPU-based devices typically
experience
+# continuous high CPU utilisation for several minutes after rngd
starts.
+# See https://gitlab.alpinelinux.org/alpine/aports/-/issues/13035 and
+# https://github.com/nhorman/rng-tools/issues/150
+# In order to address this the following configuration changes
have been made:
+#
+# - reduce the number of threads used to 1 in total, rather than
1 per core.
+# - reduce the buffer size from 16535 to 4133 which reduces the
time taken
+# to fill the buffer (and so reduces the duration of CPU load).
+#
+EXTRA_ARGS="-r /dev/hwrng -O jitter:buffer_size:4133 -O
jitter:refill_thresh:4133 -O jitter:thread_count:1"
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#174433):
https://lists.openembedded.org/g/openembedded-core/message/174433
Mute This Topic: https://lists.openembedded.org/mt/94701000/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-