mirror of
https://git.FreeBSD.org/ports.git
synced 2024-12-24 04:33:24 +00:00
4d1b69274a
- Bump PORTREVISION.
182 lines
8.9 KiB
Plaintext
182 lines
8.9 KiB
Plaintext
FreeBSD host notes
|
|
==================
|
|
|
|
- Needs to run as root in order to use /dev/tap* networking (why?) (actually
|
|
RELENG_6 and above now has a sysctl net.link.tap.user_open to allow users to
|
|
use it too. Don't forget to adjust device node permissions in
|
|
/etc/devfs.rules.)
|
|
|
|
- slirp (usermode networking) is fixed now in cvs, on FreeSBIE 1.0 guests you
|
|
still have to manually do: echo nameserver 10.0.2.3 >/etc/resolv.conf but
|
|
i've been told that that's normal. (fixed on FreeSBIE 1.1.) And you have
|
|
to wait a bit for dhclient to do its thing; traffic to address 10.0.2.2 is
|
|
routed to 127.1 on the host.
|
|
|
|
- Expect timer problems when guest kernel HZ is > hosts, for example time
|
|
sleep 1 takes 49 seconds and booting sleeps for minutes at the acd0 probe
|
|
with a FreeSBIE 1.0 guest, thats because its kernel is built with HZ=5000,
|
|
and FreeBSD's default is 100... (no longer a problem with FreeSBIE 1.1.)
|
|
The linux 2.6 kernel uses 1000 by default btw. (changed to 250 later, and
|
|
recent linux kernels now no longer have a fixed HZ, aka `tickless
|
|
kernel'...) Enabling /dev/rtc doesn't seem to help either (not included
|
|
since it needs a patch to emulators/rtc.)
|
|
|
|
- Update: the above problem has gotten worse with FreeBSD guests
|
|
somewhere before 8.0, mainly since the kernel now usually wants
|
|
double or even quadruple number of timer irqs compared to HZ if
|
|
it detects an apic (and at least early versions of FreeBSD 8 had
|
|
a bug that essentially halved qemu's clock rate too); the only
|
|
reason you usually don't see symptoms of this with FreeBSD 8
|
|
guests is they automatically reduce their HZ to 100 when running
|
|
in a VM while the default for the host kernel is still HZ=1000.
|
|
Workaround: you can disable the apic clock in the guest by setting
|
|
|
|
hint.apic.0.clock="0"
|
|
|
|
in loader.conf(5) (or manually at the loader prompt), if that
|
|
doesn't work the only things you can do is either reduce the
|
|
guest's HZ to, say, 100 by setting e.g.
|
|
|
|
kern.hz="100"
|
|
|
|
from the loader as above (which usually is a good idea in a VM
|
|
anyway and FreeBSD 8 now does by itself as mentioned), or otherwise
|
|
increase the host's HZ to 2000 or even 4000 from the loader in
|
|
the same way.
|
|
|
|
- The -smb option (smb-export local dir to guest using the default
|
|
slirp networking) needs the net/samba34 port/package installed
|
|
in addition to qemu.
|
|
|
|
- If you want to use usb devices connected to the host in the guest
|
|
(usb_add host:... monitor command; this doesn't work on FreeBSD 8 and
|
|
-current atm because of the new usb stack - help updating the usb-bsd.c code
|
|
is more than welcome here!) you need to make sure the host isn't claiming
|
|
them, e.g. for umass devices (like memory sticks or external harddrives)
|
|
make sure umass isn't in the kernel (you can then still load it as a kld
|
|
when needed), also unless you are running qemu as root you then need to fix
|
|
permissions for /dev/ugen* device nodes: if you are on 5.x or later (devfs)
|
|
put a rule in /etc/devfs.rules, activate it in /etc/rc.conf and run
|
|
/etc/rc.d/devfs restart. Example devfs.rules:
|
|
|
|
[ugen_ruleset=20]
|
|
add path 'ugen*' mode 660 group operator
|
|
|
|
corresponding rc.conf line:
|
|
|
|
devfs_system_ruleset="ugen_ruleset"
|
|
|
|
- Still usb: since the hub is no longer attached to the uchi controller and
|
|
the wakeup mechanism, resume interrupt is not implemented yet linux guests
|
|
will suspend the bus, i.e. they wont see devices usb_add'ed after its
|
|
(linux') uhci module got loaded. Workaround: either add devices before
|
|
linux loads the module or rmmod and modprobe it afterwards.
|
|
|
|
- To avoid panics or non-working re(4) nics with FreeBSD guests if you use
|
|
qemu -net nic,model=rtl8139 -net user or tap ... enable the emulated rtl8139
|
|
timer by building the port with RTL8139_TIMER enabled. (The rtl8139c+ that
|
|
model=rtl8139 emulates needs less cpu than qemu's default ne2k nic which is
|
|
driven by ed(4), it has not been made default only because it may not work
|
|
with all guests yet. Btw qemu now also can emulate a few intel eepro100 and
|
|
e1000 nics which seem to be a tad more efficient even, and at least i82557b
|
|
and e1000 work without tweaks for FreeBSD guests - driven by fxp(4) and
|
|
em(4) repectively - and Linux guests too.)
|
|
|
|
- If you get repeated `atapi_poll called!' console messages with FreeBSD
|
|
guests or other weird cdrom problems then thats probably because the guest
|
|
has atapicam loaded, which for reasons still to be determined has problems
|
|
with qemu's now by default enabled cdrom dma. You can build the port with
|
|
CDROM_DMA disabled to disable it. [Looks like this is fixed in recent
|
|
FreeBSD guest versions.]
|
|
|
|
- If you build qemu wihout SDL and then get crashes running it try passing it
|
|
-nographic. This should probably be default in that case...
|
|
|
|
- If you use kqemu make sure your kqemu.ko is always in sync with your kernel
|
|
(like with any kld installed outside of base), i.e. rebuild its port
|
|
whenever you update the kernel - especially if you are switching branches or
|
|
are following a -stable or even -current branch!
|
|
|
|
- You can enable autoloading of kqemu at boot by adding a line
|
|
|
|
kqemu_enable=YES
|
|
|
|
to /etc/rc.conf
|
|
|
|
- qemu's network boot roms (-boot n) have a bug when bootfiles sizes are a
|
|
multiple of blksize, if this affects you (like with FreeBSD's /boot/pxeboot)
|
|
you can do like
|
|
|
|
cp /boot/pxeboot pxeboot-qemu && chmod +w pxeboot-qemu && echo >>pxeboot-qemu
|
|
|
|
and then use pxeboot-qemu. Actually you need recent btx code
|
|
(from after 7.0 was released) because of the real mode boot
|
|
problem, so use at least pxeboot from there. And I just did that
|
|
for the pxeboot extracted out of
|
|
|
|
ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/200805/7.0-STABLE-200805-i386-bootonly.iso
|
|
|
|
and placed it here:
|
|
|
|
http://people.freebsd.org/~nox/qemu/pxeboot-qemu
|
|
|
|
- If you use slirp (usernet, the default) and want to mount nfs into the guest
|
|
and you are not running qemu as root, then mountd(8) on the exporting box
|
|
needs to be run with -n in order to accept requests from ports >= 1024.
|
|
|
|
- Unfortunately there can still be guests that don't run correctly with kqemu
|
|
and -kernel-kqemu especially on amd64 - not much you can do about that other
|
|
than help debugging (k)qemu... (well or falling back to unaccellerated
|
|
qemu/using only -enable-kqemu if its that what's causing the problems. note
|
|
however that kqemu now can also be used with the 32 bit qemu even on amd64
|
|
hosts as of the 20080620 update.)
|
|
|
|
- kqemu passes the host tsc to the guest as-is so depending on your cpu and
|
|
guest you _may_ need to tell the guest to avoid relying on the tsc (notsc
|
|
kernel parameter with linux), or if that doesn't work force qemu onto a
|
|
single cpu by doing e.g. `cpuset -l 0 qemu ..' (see the cpuset(1) manpage
|
|
for details; cpuset isn't avalable before 7.1. This can only be a problem
|
|
on smp hosts.)
|
|
|
|
- (not FreeBSD-specific:) There have been reports of qcow2 corruption with (at
|
|
least) win2k guests on recent kvm (which uses similar qcow2 code than qemu
|
|
now, see this thread:
|
|
|
|
http://lists.gnu.org/archive/html/qemu-devel/2009-02/msg00713.html -
|
|
|
|
the consensus on that thread seems to be that qcow(2) code has always been
|
|
experimental and you should use raw images if you want reliability; raw is
|
|
also usually faster.) You should be able to migrate existing images to raw
|
|
using qemu-img(1)'s convert function; raw doesn't support advanced features
|
|
like snapshots tho. [a few important qcow2 bugfixed have been committed in
|
|
the meantime so this _might_ be less of an issue now.]
|
|
|
|
- (also not FreeBSD-specific:) It is recommended to pass raw images using the
|
|
new -drive syntax, specifying format=raw explicitly in order to avoid
|
|
malicious guests being able to exploit the format autodetection thats
|
|
otherwise getting used. (Not that you should run malicious guests anyway,
|
|
but this eleminates at least a known attack vector.)
|
|
|
|
- qemu now has improved physical cdrom support, but still there still is at
|
|
least one known problem: you need to have the guest eject the disc if you
|
|
want to change it/take it out, or otherwise the guest may continue using
|
|
state (like size) of the old disc. (You can also do like `change ide1-cd0
|
|
/dev/acd0' in the monitor after taking out the disc if a guest cannot eject
|
|
it itself.)
|
|
|
|
- The default configuration location (qemu-ifup script etc.) has been changed
|
|
from /etc to PREFIX/etc (usually /usr/local/etc). Move your files
|
|
accordingly.
|
|
|
|
- The pcap code (-net nic... -net pcap,ifname=...) should work properly now,
|
|
with only one exception: Advanced features like TSO used on the host
|
|
interface can cause oversize packets which now do get truncated to avoid
|
|
confusing/panicing guests but of course still will cause retransmissions.
|
|
So if you see slow throughput and `pcap_send: packet size > ..., truncating'
|
|
messages on qemu's tty try disabling TSO etc on the host interface at least
|
|
while using pcap.
|
|
|
|
- kqemu still works in the 0.11 branch, but is disabled by default now so
|
|
you'll have to pass -enable-kqemu (or -kernel-kqemu as with the previous
|
|
versions) if you want to use it.
|