[OE-core] [PATCH V2] machine/qemu*: fix kernel finish crng init more and more slowly

richard.purdie at linuxfoundation.org richard.purdie at linuxfoundation.org
Wed Nov 7 09:25:42 UTC 2018


On Wed, 2018-11-07 at 09:45 +0800, Hongxu Jia wrote:
> On 2018/10/30 上午10:22, Hongxu Jia wrote:
> > 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 at windriver.com>
> > ---
> >   meta/conf/machine/include/qemuboot-mips.inc | 3 ++-
> >   meta/conf/machine/include/qemuboot-x86.inc  | 3 ++-
> >   meta/conf/machine/qemuarm.conf              | 3 ++-
> >   meta/conf/machine/qemuarm64.conf            | 4 +++-
> >   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 7d9fa52..75bb988 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 1456bf7..5fdbe4d 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"
> 
> Hi Ross,
> 
> I am afraid the patch you merged to master-next is V1 which caused
> runqemu
> 
> failure on qemux86/qemux86-64, we should use V2
> 
> [v1 snip]

Thanks, I picked this up out of mut thinking it was the V2 and meant to
check but forgot. I've the right version in -next now, thanks!

Cheers,

Richard




More information about the Openembedded-core mailing list