[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [debian-hppa] qemu-system-hppa and Debian HPPA



On 8/14/21 3:34 PM, Nelson H. F. Beebe wrote:
This is a report of failures, and ultimate success, in installing
Debian HPPA with the QEMU emulation of that CPU architecture.

I run a large farm of more than 500 physical and virtual machines that
we use for software testing and development.  The VMs include numerous
O/Ses and CPU types: AMD64 (x86_64), ARM32, ARM64, Alpha, M68K,
MIPS32, MIPS64, PowerPC, RISC-V64, S390x, SPARC, and x86.  Most of
those are emulated by QEMU running on CentOS 7 and Ubuntu 20.04 on
Intel Xeon hardware.

The major historical CPU family with IEEE 754 floating-point
arithmetic missing from that list is Hewlett-Packard's Precision
Architecture RISC, PA-RISC, also called HPPA.  In the 1990s, we had
several physical workstations and servers of that type, but all have
long since been retired and disposed of.

Neither of our other virtualization systems, OVirt and VirtualBox,
supports emulation of other CPU types.  With VirtManager and QEMU,
however, there are numerous CPU types available. Regrettably, for many
of them, it is necessary to discard the easy-to-use VirtManager GUI,
and resort to low-level qemu-system-xxx command lines, and that is the
case for Alpha, HPPA, M68K, and SPARC.

One of the projects that I work on is ensuring that the annual TeX
Live releases can be built on a wide range of platforms.  This year's
report is at

	http://www.math.utah.edu/pub/texlive-utah/

I had previously tried to install Debian 4, 5, 9, and 10 releases for
HPPA, but each time, I failed: either QEMU complained of missing
firmware, or the VM would not boot, or it would boot, but I could not
get a working network.

In June 2021, I retried with a .qcow2 disk image converted from

         -rw-rw-r-- 1 511504481 May  9  2018 debian-10-hdd-img.tar.bz2

I think this is the one I prepared once:
http://backup.parisc-linux.org/qemu/debian-10-hdd-img.tar.bz2


That disk image is far too small for my needs, but I was able to to
extend the partition size like this:

	qemu-img convert -O qcow2 debian-10-hdd.img debian-10-hdd.qcow2
	qemu-img resize debian-10-hdd.qcow2 +55G

That gets a bigger partition, but further work is needed after a boot
from an ISO image:

         fdisk /dev/sda
	[delete second partition, then recreate with maximum size]
	reboot

Unfortunately, the disk image it has no C/C++ compilers, and other
tools that I need, (e.g., starting with the build-essential one) but
we found that it is sufficiently old that it is impossible to run "apt
update" and "apt install" commands: there are far too many unresolved
dependencies.

debian-unstable for hppa is a moving target. And we had lots of fixes
since then. So, yes maybe updating is not easy.

It would be good to get that .img file replaced by a current one that
could be used directly, and that had important packages needed for
software development already installed,

Ok, I'll see if I do another one soon.

including build-essential,
gfortran, m4, and compilers for Go and Rust.

I don't think we have a Go-port yet, and for Rust only initial
porting was done by Adrian Glaubitz for gcc-rust:
https://www.mail-archive.com/gcc-rust@gcc.gnu.org/msg00028.html


This month, I tried an install from the more recent ISO image

	-r--r--r-- 1 263258112 Jun  8 16:14 debian-10.0.0-hppa-NETINST-1.iso

That's a newer debian install CD I think.

With the native version 4.2.0 qemu-system-hppa on Ubuntu 20.04 LTS,
the installer boot died with

	[   51.098263]  [<101e7684>] do_group_exit+0x54/0xf0
	[   51.098263]  [<101f76a4>] get_signal+0x1b0/0xac8
	[   51.098263]  [<101c5b34>] do_signal+0x4c/0x56c
	[   51.098263]  [<101c609c>] do_notify_resume+0x48/0xfc
	[   51.098263]  [<101b70a8>] intr_check_sig+0x34/0x38
	[   51.098263]
	[   51.098263] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000a ]---

I have built several later versions of QEMU from source, but with
them, the installer runs for some time, then dies with a terminal
screen that looks like this:

         [ (1*installer) 2 shell 3 shell 4- log ][ Aug 07 0:00 ]
         .... blank screen ...
         [ 1489.609145]       _______________________________
         [ 1489.609145]      < Your System ate a SPARC! Gah! >
         [ 1489.609145]       -------------------------------
         [ 1489.609145]              \   ^__^
         [ 1489.609145]                  (__)\       )\/\
         [ 1489.609145]                   U  ||----w |
         [ 1489.609145]                      ||     ||
         [ 1489.613720] ip (pid 2962): Illegal instruction (code 8)
         [ 1489.614573] CPU: 0 PID: 2962 Comm: ip Tainted: G            E     5.10.0-6-parisc #1 Debian 5.
         [ 1489.694519] ---[ end trace 49060643616260b7 ]---844cx2744   E     5.10.0-6-parisc #1 Debian 5.

For the record, here is the emulator command:

         $QEMUDIR/qemu-system-hppa						\
		 -m 3G								\
		 -drive file=debian-10e-hdd.qcow2				\
		 -drive file=debian-10.0.0-hppa-NETINST-1.iso,media=cdrom	\
		 -boot order=d							\
		 -nographic							\
		 -serial mon:stdio

I ran an xterm log of those attempts, and found that the "Your System
ate a SPARC! Gah!" message appears just after the output

         Detecting network hardware

That suggested that changing from the default TULIP network device
might be worth trying.

The devices supported by qemu-system-hppa are

         e1000                               i82559c
         e1000-82544gc                       i82559er
         e1000-82545em                       i82562
         i82550                              i82801
         i82551                              ne2k_pci
         i82557a                             pcnet
         i82557b                             rtl8139
         i82557c                             tulip
         i82558a                             virtio-net-pci
         i82558b                             virtio-net-pci-non-transitional
         i82559a                             virtio-net-pci-transitional
         i82559b                             vmxnet3

Of those, the Intel e1000 is one that is commonly supported on most
operating systems.

I therefore changed the startup command to

	$QEMUDIR/qemu-system-hppa                                       \
	    -m 3G                                                       \
	    -drive file=debian-10e-hdd.qcow2                            \
	    -drive file=debian-10.0.0-hppa-NETINST-1.iso,media=cdrom    \
	    -boot order=d                                               \
	    -nographic                                                  \
	    -serial mon:stdio                                           \
	    -net nic,model=e1000,netdev=net0                            \
	    -netdev user,\
	id=net0,\
	net=192.168.123.0/24,\
	restrict=off,\
	ipv6=off,\
	hostfwd=tcp::12222-192.168.123.122:22

and that led to a successful boot of the installer, which ran to
completion, but took more than 10 hours to do so.

Newer versions of qemu have a tulip driver. This works best.

In my recent experiments, I have used QEMU versions 6.0.0, 6.1.0-rc0,
6.1.0-rc2, and 6.1.0-rc3.

Although the ISO image is labeled as Debian version 10, the actual
version reported in /etc/debian_version is 11.0.

It's a debian-unstable install CD, so 11.

I can now boot the .qcow2 image directly with a similar command

   	$QEMUDIR/qemu-system-hppa                                       \
	    -m 3G                                                       \
	    -smp cpus=4                                                 \
	    -drive file=debian-10e-hdd.qcow2                            \
	    -boot order=c                                               \
	    -nographic                                                  \
	    -serial mon:stdio                                           \
	    -net nic,model=e1000,netdev=net0                            \
	    -netdev user,\
	id=net0,\
	net=192.168.123.0/24,\
	restrict=off,\
	ipv6=off,\
	hostfwd=tcp::12222-192.168.123.122:22

where the -drive line for the ISO image is removed, and the boot
device is changed from d to c.

My local practice is that VMs reside on the private network
192.168.123.0/24, and the last octet for a particular VM prefixes the
standard secure shell port number, 22: thus, I have port 12222 when
the last octet is 122.

The network used by QEMU, and its DHCP range, is determined by this
block in /etc/libvirt/qemu/networks/default.xml:

	<network>
	  <name>default</name>
	  <uuid>740f7e29-7ab4-4130-9316-d2e216fa707b</uuid>
	  <forward mode='nat'/>
	  <bridge name='virbr0' stp='on' delay='0'/>
	  <mac address='52:54:00:7c:1e:ae'/>
	  <ip address='192.168.123.1' netmask='255.255.255.0'>
	    <dhcp>
	      <range start='192.168.123.241' end='192.168.123.254'/>
	    </dhcp>
	  </ip>
	</network>

I can now connect to the VM with

	ssh -p 12222 localhost

and have since been able to fully configure it with user accounts and
installations of scores of packages.  So far, it appears to run
stably.

There is, however, a serious performance issue that I will discuss in
a subsequent posting to this list.

The PA emulation isn't very fast, but not bad either.
On my not-so-fast x86 it's performing like a native j5600 machine.

If your emulation is slow, I'd suggest that you:

1. add "accel tcg,thread=multi" to the qemu line.
This enables that every emulated CPU runs in an own qemu thread, so
"-smp cpus=4" should run on 4 physical CPUs on your host.
You can check with "top" on the host if multiple CPUs are used.

2. Make sure you have debug code disabled when you compile qemu.
If enabled it generates very slow running qemu.

3. You used "nographic", so it's not relevant in your case, but if
you would enable graphics you should add "-display sdl".
It's a whole lot faster than the default setting.

Some additional info is here:
https://parisc.wiki.kernel.org/index.php/Qemu

Helge


Reply to: