diff options
author | Hongxu Jia <hongxu.jia@windriver.com> | 2018-10-29 22:22:49 -0400 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-11-13 15:18:28 +0000 |
commit | 853644f82eb3205ef3efc1ea3959c7225dfacf61 (patch) | |
tree | 8e87c7460dbd83533c202a403f1380c32f1350eb /meta | |
parent | 078630b7bf8599ea2b3717ce33d2da0f7f26b0e2 (diff) | |
download | openembedded-core-contrib-853644f82eb3205ef3efc1ea3959c7225dfacf61.tar.gz |
machine/qemu*: fix kernel finish crng init more and more slowly
Just adding `-device virtio-rng-pci' to the QEMU invocation will
add the device with a default host backend. As of QEMU 1.3+,
the default backend is to use the host's /dev/random as a
source of entropy. [1]
When the entropy pool is empty, reads from /dev/random will
block until additional environmental noise is gathered. [2]
For Yocto, if call runqemu frequently, it will consume lots
of host's /dev/random, and kernel finish crng init in guest get
more and more slowly.
Here are 4 times runqemu boot test:
[ 3.464432] random: crng init done
[ 20.874030] random: crng init done
[ 23.583589] random: crng init done
[ 23.858945] random: crng init done
Modify entropy source to /dev/urandom device on the host which
returns random bytes using a pseudorandom number generator seeded
from the entropy pool. Reads from this device do not block and
kernel finish crng init in guest will not delay.
Of course, the side effect is obviously, we lost the quality of
randomness, but the modification is only on runqemu script
rather than real embedded device, and it benefits oeqa efficiency
in which many cases call runqemu especially multiple oeqa builds
on one host.
After apply the fix:
[ 3.364670] random: crng init done
[ 4.619061] random: crng init done
[ 3.403897] random: crng init done
[ 3.450717] random: crng init done
[1] https://wiki.qemu.org/Features/VirtIORNG
[2] http://man7.org/linux/man-pages/man4/random.4.html
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r-- | meta/conf/machine/include/qemuboot-mips.inc | 3 | ||||
-rw-r--r-- | meta/conf/machine/include/qemuboot-x86.inc | 3 | ||||
-rw-r--r-- | meta/conf/machine/qemuarm.conf | 3 | ||||
-rw-r--r-- | meta/conf/machine/qemuarm64.conf | 4 | ||||
-rw-r--r-- | meta/conf/machine/qemuppc.conf | 3 |
5 files changed, 11 insertions, 5 deletions
diff --git a/meta/conf/machine/include/qemuboot-mips.inc b/meta/conf/machine/include/qemuboot-mips.inc index 7d9fa52da65..75bb98861f8 100644 --- a/meta/conf/machine/include/qemuboot-mips.inc +++ b/meta/conf/machine/include/qemuboot-mips.inc @@ -3,6 +3,7 @@ IMAGE_CLASSES += "qemuboot" QB_MEM = "-m 256" QB_MACHINE = "-machine malta" QB_KERNEL_CMDLINE_APPEND = "console=ttyS0 console=tty" +QB_OPT_APPEND = "-vga cirrus -show-cursor -usb -device usb-tablet" # Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy -QB_OPT_APPEND = "-vga cirrus -show-cursor -usb -device usb-tablet -device virtio-rng-pci" +QB_OPT_APPEND += "-object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0" QB_SYSTEM_NAME = "qemu-system-${TUNE_ARCH}" diff --git a/meta/conf/machine/include/qemuboot-x86.inc b/meta/conf/machine/include/qemuboot-x86.inc index 1456bf7e8bc..5fdbe4df50e 100644 --- a/meta/conf/machine/include/qemuboot-x86.inc +++ b/meta/conf/machine/include/qemuboot-x86.inc @@ -11,7 +11,8 @@ QB_CPU_KVM_x86-64 = "-cpu core2duo" QB_AUDIO_DRV = "alsa" QB_AUDIO_OPT = "-soundhw ac97,es1370" QB_KERNEL_CMDLINE_APPEND = "vga=0 uvesafb.mode_option=${UVESA_MODE} oprofile.timer=1 uvesafb.task_timeout=-1" +QB_OPT_APPEND = "-vga vmware -show-cursor -usb -device usb-tablet" # Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy -QB_OPT_APPEND = "-vga vmware -show-cursor -usb -device usb-tablet -device virtio-rng-pci" +QB_OPT_APPEND += "-object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0" UVESA_MODE ?= "640x480-32" diff --git a/meta/conf/machine/qemuarm.conf b/meta/conf/machine/qemuarm.conf index d2f2c85c3fa..a5443126273 100644 --- a/meta/conf/machine/qemuarm.conf +++ b/meta/conf/machine/qemuarm.conf @@ -14,7 +14,8 @@ SERIAL_CONSOLES ?= "115200;ttyAMA0 115200;ttyAMA1" QB_SYSTEM_NAME = "qemu-system-arm" QB_MACHINE = "-machine versatilepb" QB_KERNEL_CMDLINE_APPEND = "console=ttyAMA0,115200 console=tty" +QB_OPT_APPEND = "-show-cursor -usb -device usb-tablet" # Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy -QB_OPT_APPEND = "-show-cursor -usb -device usb-tablet -device virtio-rng-pci" +QB_OPT_APPEND += "-object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0" PREFERRED_VERSION_linux-yocto ??= "4.18%" QB_DTB = "${@oe.utils.version_less_or_equal('PREFERRED_VERSION_linux-yocto', '4.7', '', 'zImage-versatile-pb.dtb', d)}" diff --git a/meta/conf/machine/qemuarm64.conf b/meta/conf/machine/qemuarm64.conf index 242889ac8a5..34fcd2aed0a 100644 --- a/meta/conf/machine/qemuarm64.conf +++ b/meta/conf/machine/qemuarm64.conf @@ -16,7 +16,9 @@ QB_MACHINE = "-machine virt" QB_CPU = "-cpu cortex-a57" QB_KERNEL_CMDLINE_APPEND = "console=ttyAMA0,38400" # Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy -QB_OPT_APPEND = "-show-cursor -device virtio-rng-pci -monitor null" +QB_OPT_APPEND = "-show-cursor -monitor null" +# Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy +QB_OPT_APPEND += "-object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0" QB_TAP_OPT = "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no" QB_NETWORK_DEVICE = "-device virtio-net-device,netdev=net0,mac=@MAC@" QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-device,drive=disk0" diff --git a/meta/conf/machine/qemuppc.conf b/meta/conf/machine/qemuppc.conf index 537b2f6774f..743d26170e7 100644 --- a/meta/conf/machine/qemuppc.conf +++ b/meta/conf/machine/qemuppc.conf @@ -16,6 +16,7 @@ QB_SYSTEM_NAME = "qemu-system-ppc" QB_MACHINE = "-machine mac99" QB_CPU = "-cpu G4" QB_KERNEL_CMDLINE_APPEND = "console=tty console=ttyS0" +QB_OPT_APPEND = "-show-cursor -usb -device usb-tablet" # Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy -QB_OPT_APPEND = "-show-cursor -usb -device usb-tablet -device virtio-rng-pci" +QB_OPT_APPEND += "-object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0" QB_TAP_OPT = "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no" |