On Sat, Jul 17, 2010 at 10:50:59AM +0100, Richard W.M. Jones wrote: > I'm trying to speed up the process of loading kernel and initrd. > > I found that the main loop which loads these into qemu memory does it > via executing in the guest: > > rep insb (%dx),%es:(%edi) > > In other words, reading it byte-at-a-time from an emulated IO port. > This is very slow[1] when your initrd is > 100MB like mine is. > > Questions: > > Is fw_cfg a purely qemu concept? Does this BIOS firmware port > 0x510-0x511 exist in real hardware? > It is purely qemu concept.
> I understand from the git logs that fw_cfg was added because the old > way was to load kernel & initrd into RAM directly, but this didn't > work because SeaBIOS would clear the RAM, clobbering kernel & initrd. > Could we change to loading these directly into RAM, and instead > provide some indication to SeaBIOS so it doesn't clobber the RAM? I'm > quite prepared to do the work, just wondering if there's something > else I'm not getting about this. > > Rich. > > [1] Several seconds of wallclock time, and according to gprof, the > function 'fw_cfg_io_readb' accounts for > 50% of the time taken in > qemu between qemu starting and us entering the Linux kernel. > Several seconds is not too bad for 100M. Have you tested how much insl improves this? -- Gleb.