Monday 5 July 2021

Linux for PA-RISC (32-bit) on QEMU - System Information

HP PA-RISC

In the mid-1980s Hewlett-Packard (HP) introduced the first version of its Precision Architecture RISC processor (HP-PA or PA-RISC) (Wikipedia) in its mainframe and server product lines. In 1991 the HP 9000/700 series was introduced based on the improved PA-RISC 1.1 processors. In 1996 HP introduced its first systems using the 64-bit PA-RISC 2.0 processors, including the HP Visualize C160 and C180 workstations (both model 9000/780).

In the 1990s PA-RISC was one of the main RISC processors seen in UNIX workstations, along with AXP Alpha, PowerPC/POWER, SPARC and MIPS. The phasing out of the PA-RISC systems, in favor of Itanium (IA-64) based HP Integrity systems (Wikipedia) during the 2000s mean there is an interest in replacing ageing hardware with emulation options.

As well as the proprietary UNIX from HP (HP-UX), PA-RISC systems can also run the Linux, NetBSD and OpenBSD open source operating systems.

Linux on PA-RISC

The Linux on PA-RISC project added support for PA-RISC system starting with Linux 2.6, and the Debian and Gentoo Linux distributions have support for PA-RISC.

While official support for PA-RISC ended with Debian Linux 5 (lenny), the Debian for PA-RISC port does provide an un-official  network installation CD image for the current release. However the current Debian Linux for PA-RISC ports repository is for Debian Linux "unstable" (sid), which can cause problems with installation.

For the purposes of this exploration I'm going to use the Debian Linux 5 (lenny) distribution DVD, this means the results presented here will be easily reproducible. For those curious about PA-RISC Debian Linux 10, there is a pre-made disk image at Qemu - Linux PARISC Wiki that might help.

QEMU & HP-PA

The HP-PA architecture is supported by the QEMU system emulator with an emulation of a system based on the 32-bit PA-RISC, HP Visualize B160L workstation.

HP Visualize B160L Specification

Based on information from HP Visualize B132L, B160L, B180L PA-RISC Workstations - OpenPA.net

  • CPU: PA7300LC at 160 MHz
  • RAM: 32 MiB to 1.5 GiB
  • Buses: GSC, EISA, PCI
  • SCSI controllers:
    • NCR 53c710 fast narrow SCSI
    • NCR 53c720 fast wide SCSI
  • Network controller: Intel 82596CA 10 Mb/s Ethernet
  • Misc: 2 serial ports, 1 parallel port, 1 floppy controller

Additional hardware may be present as expansion cards.

QEMU 'hppa' System

The 'hppa' system emulated by QEMU has the default configuration:

  • Firmware: SeaBIOS PA-RISC Firmware
  • CPU: 1 or more PA-RISC PA7300LC at 250 MHz
  • RAM: 512 MiB default, up to 3 GiB
  • Graphics: Artist
  • Misc: serial port, parallel port
  • PCI devices:
    • SCSI controller: LSI 53c895a Ultra2 SCSI
    • Network controller: Digital DS21142/43 Tulip based 10/100 Mb/s ethernet

The PCI devices stand in for unimplemented mainboard devices, the missing devices are likely to be implemented at some point in the future.

Emulation Command

For the curious the QEMU command used is:

qemu-system-hppa \
    --machine hppa \
    -m size=1536M \
    -hda hda_DebianLinux5_hppa.qcow2 \
    -cdrom debian-5010-hppa-DVD-1.iso \
    -net nic \
    -net "user,guestfwd=:10.0.2.1:22-cmd:netcat 127.0.0.1 22,hostfwd=::2222-:22" \
    -vga none \
    -boot order=cd \
    -no-reboot \
    -name 'Debian Linux 5 (lenny) on HP B160L'

The port forwarding rules are to provide host/guest ssh routes while using user networking. and the graphics are disabled to force use of the serial console.

System Information

Let's try some commands to see what we have...

uname

Operating system information:

$ uname -a
Linux qhp-deb5 2.6.26-2-parisc #1 Sun Mar 4 17:37:14 UTC 2012 parisc GNU/Linux

So a "Linux" kernel, on a node named "qhp-deb5", kernel release "2.6.26-2-parisc", version "#1 Sun Mar 4 17:37:14 UTC 2012", on platform architecture "parisc", for operating system "GNU/Linux".

lsb_release

Operating system distribution information:

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 5.0.10 (lenny)
Release:	5.0.10
Codename:	lenny

As expected for a Debian Linux 5 (lenny) release.

Required explicit installation of the 'lsb-release' package.

/proc/cpuinfo

Processor information:

$ cat /proc/cpuinfo 
processor	: 0
cpu family	: PA-RISC 1.1e
cpu		: PA7300LC (PCX-L2)
cpu MHz		: 250.000000
model		: 9000/778/B160L
model name	: Merlin L2 160 (9000/778/B160L)
hversion	: 0x00005020
sversion	: 0x00000481
I-cache		: 0 KB
D-cache		: 0 KB (WB, 0-way associative)
ITLB entries	: 256
DTLB entries	: 256 - shared with ITLB
BTLB		: not supported
bogomips	: 976.89
software id	: 2006243326

As expected the machine is identified as a B160L, and the processor claims to be a PA7300LC at 250 MHz, the original B160L ran the processor at 160 MHz, but this may be an adjustment to handle differences in emulation performance. The BogoMips figure looks high... but we'll come back to this when looking a performance.

lspci

Devices on the PCI bus:

$ lspci -v
00:00.0 SCSI storage controller: LSI Logic / Symbios Logic 53c895a
	Flags: bus master, fast devsel, latency 255, IRQ 19
	I/O ports at 0100 [size=256]
	Memory at f0802000 (32-bit, non-prefetchable) [size=1K]
	Memory at f0800000 (32-bit, non-prefetchable) [size=8K]
	Kernel driver in use: sym53c8xx
	Kernel modules: sym53c8xx

00:01.0 Ethernet controller: Digital Equipment Corporation DECchip 21142/43
	Subsystem: Hewlett-Packard Company Device 104f
	Flags: bus master, fast devsel, latency 0, IRQ 20
	I/O ports at 0080 [size=128]
	Memory at f0803000 (32-bit, non-prefetchable) [size=128]
	Kernel driver in use: tulip
	Kernel modules: tulip

The system's emulated mainboard devices don't currently provide the SCSI controllers and ethernet adapter present on the B160L, so emulated PCI cards are used to provide the same functionality.

report-hw

A hardware report based on various commands:

$ report-hw 
umame -a: Linux qhp-deb5 2.6.26-2-parisc #1 Sun Mar 4 17:37:14 UTC 2012 parisc GNU/Linux
lspci -knn: 00:00.0 SCSI storage controller [0100]: LSI Logic / Symbios Logic 53c895a [1000:0012]
lspci -knn: 	Kernel driver in use: sym53c8xx
lspci -knn: 	Kernel modules: sym53c8xx
lspci -knn: 00:01.0 Ethernet controller [0200]: Digital Equipment Corporation DECchip 21142/43 [1011:0019]
lspci -knn: 	Kernel driver in use: tulip
lspci -knn: 	Kernel modules: tulip
lsmod: Module                  Size  Used by
lsmod: ipv6                  324752  10 
lsmod: isofs                  37072  0 
lsmod: udf                   103892  0 
lsmod: nls_base                7560  2 isofs,udf
lsmod: crc_itu_t               2024  1 udf
lsmod: loop                   15860  0 
lsmod: lasi_82596             24968  0 
lsmod: ext3                  154544  1 
lsmod: jbd                    52028  1 ext3
lsmod: sg                     36600  0 
lsmod: sr_mod                 18988  0 
lsmod: cdrom                  41728  1 sr_mod
lsmod: sd_mod                 31096  4 
lsmod: tulip                  58212  0 
lsmod: sym53c8xx              84284  3 
lsmod: zalon7xx               33108  0 
lsmod: lasi700                 2568  0 
lsmod: 53c700                 32688  1 lasi700
lsmod: scsi_transport_spi     28808  3 sym53c8xx,zalon7xx,53c700
lsmod: scsi_mod              169740  8 sg,sr_mod,sd_mod,sym53c8xx,zalon7xx,lasi700,53c700,scsi_transport_spi
lsmod: hilkbd                  4120  0 
df: Filesystem           1K-blocks      Used Available Use% Mounted on
df: /dev/sda5              3755460    484452   3080240  14% /
df: tmpfs                   776364         0    776364   0% /lib/init/rw
df: udev                     10240       500      9740   5% /dev
df: tmpfs                   776364         0    776364   0% /dev/shm
df: /dev/sda2               120443     11922    102095  11% /boot
free:              total       used       free     shared    buffers     cached
free: Mem:       1552728      94720    1458008          0       7716      63400
free: -/+ buffers/cache:      23604    1529124
free: Swap:       216836          0     216836
/proc/cmdline: root=/dev/sda5 HOME=/ console=ttyS0 TERM=vt102 palo_kernel=2/vmlinux
/proc/cpuinfo: processor	: 0
/proc/cpuinfo: cpu family	: PA-RISC 1.1e
/proc/cpuinfo: cpu		: PA7300LC (PCX-L2)
/proc/cpuinfo: cpu MHz		: 250.000000
/proc/cpuinfo: model		: 9000/778/B160L
/proc/cpuinfo: model name	: Merlin L2 160 (9000/778/B160L)
/proc/cpuinfo: hversion	: 0x00005020
/proc/cpuinfo: sversion	: 0x00000481
/proc/cpuinfo: I-cache		: 0 KB
/proc/cpuinfo: D-cache		: 0 KB (WB, 0-way associative)
/proc/cpuinfo: ITLB entries	: 256
/proc/cpuinfo: DTLB entries	: 256 - shared with ITLB
/proc/cpuinfo: BTLB		: not supported
/proc/cpuinfo: bogomips	: 976.89
/proc/cpuinfo: software id	: 2006243326
/proc/cpuinfo: 
/proc/ioports: 00000000-0000ffff : Dino I/O Port
/proc/ioports:   00000080-000000ff : 0000:00:01.0
/proc/ioports:     00000080-000000ff : tulip
/proc/ioports:   00000100-000001ff : 0000:00:00.0
/proc/ioports:     00000100-000001ff : sym53c8xx
/proc/iomem: 00000000-5fffffff : System RAM
/proc/iomem:   00000000-000009ff : PDC data (Page Zero)
/proc/iomem:   00100000-0035cfff : Kernel code
/proc/iomem:   0035d000-00447fff : Kernel data
/proc/iomem: f0800000-ff7fffff : Dino LMMIO 0
/proc/iomem:   f0800000-f0801fff : 0000:00:00.0
/proc/iomem:     f0800000-f0801fff : sym53c8xx
/proc/iomem:   f0802000-f08023ff : 0000:00:00.0
/proc/iomem:     f0802000-f08023ff : sym53c8xx
/proc/iomem:   f0803000-f080307f : 0000:00:01.0
/proc/iomem:     f0803000-f080307f : tulip
/proc/iomem: ffc00000-ffc00fff : 8
/proc/iomem: ffd00000-ffd00fff : 8:16
/proc/iomem: ffd02000-ffd02fff : 8:16:0
/proc/iomem: ffd05000-ffd05fff : 8:16:4
/proc/iomem: ffd0c000-ffd0c000 : led_data
/proc/iomem: fff80000-fffaffff : Central Bus
/proc/iomem:   fff80000-fff80fff : 8:0
/proc/iomem:     fff80000-fff80fff : Dino
/proc/iomem:   fff83000-fff83fff : 8:0:63
/proc/iomem:     fff83800-fff83807 : serial
/proc/iomem: fffb0000-fffdffff : Local Broadcast
/proc/iomem:   fffb0000-fffb0fff : 48
/proc/iomem:   fffbf000-fffbffff : 63
/proc/iomem: fffe0000-ffffffff : Global Broadcast
/proc/interrupts:            CPU0
/proc/interrupts:  18:       1295         GSC-PCI  serial
/proc/interrupts:  19:      11207         GSC-PCI  sym53c8xx
/proc/interrupts:  20:         36         GSC-PCI  eth0
/proc/interrupts:  64:     286056             CPU  timer
/proc/interrupts:  65:          0             CPU  lasi
/proc/interrupts:  66:      13526             CPU  Dino
/proc/meminfo: MemTotal:      1552728 kB
/proc/meminfo: MemFree:       1458132 kB
/proc/meminfo: Buffers:          7716 kB
/proc/meminfo: Cached:          63400 kB
/proc/meminfo: SwapCached:          0 kB
/proc/meminfo: Active:          42528 kB
/proc/meminfo: Inactive:        39524 kB
/proc/meminfo: SwapTotal:      216836 kB
/proc/meminfo: SwapFree:       216836 kB
/proc/meminfo: Dirty:              60 kB
/proc/meminfo: Writeback:           0 kB
/proc/meminfo: AnonPages:       10988 kB
/proc/meminfo: Mapped:           8392 kB
/proc/meminfo: Slab:             6072 kB
/proc/meminfo: SReclaimable:     3820 kB
/proc/meminfo: SUnreclaim:       2252 kB
/proc/meminfo: PageTables:       1180 kB
/proc/meminfo: NFS_Unstable:        0 kB
/proc/meminfo: Bounce:              0 kB
/proc/meminfo: WritebackTmp:        0 kB
/proc/meminfo: CommitLimit:    993200 kB
/proc/meminfo: Committed_AS:   105292 kB
/proc/meminfo: VmallocTotal:   237504 kB
/proc/meminfo: VmallocUsed:      1624 kB
/proc/meminfo: VmallocChunk:   235208 kB

Some glimpses of the core chipsets here and their devices. Also see the 1.5 GiB memory configured from the QEMU command-line.

lshw

A hardware report showing device relationships:

# lshw
system: 3f                
start of directory: 83611648
length of directory: 72583168
lif version: 4f
tracks per surface: 808416877
number of surfaces: 1818848885
blocks per track: 2015390062
ipl addr: 77778944
ipl length: 36864
ipl entry point: 0
qhp-deb5           
    description: Merlin L2 160 (9000/778/B160L)
    product: 9000/778/B160L
    serial: 2006243326
    width: 32 bits
  *-core
       description: Motherboard
       physical id: 0
     *-cpu
          description: Processor
          product: PA7300LC (PCX-L2)
          physical id: 48
          bus info: cpu@0
          version: 1.1e
          size: 250MHz
          configuration: driver=CPU
     *-memory
          description: Memory
          physical id: 63
          bus info: parisc@63
          size: 1536MiB
     *-busconverter
          description: Bus converter port
          physical id: 8
          bus info: parisc@8
        *-pci
             description: PCI Bridge
             physical id: 0
             bus info: parisc@8/0
             version: 3
             configuration: driver=dino
           *-serial
                description: RS-232 Serial Interface
                physical id: 63
                bus info: parisc@8/0/63
                configuration: driver=serial
        *-core
             description: Core Bus
             physical id: 16
             bus info: parisc@8/16
             configuration: driver=lasi
           *-printer UNCLAIMED
                description: Core Centronics Parallel interface
                physical id: 0
                bus info: parisc@8/16/0
           *-serial
                description: RS-232 Serial Interface
                physical id: 4
                bus info: parisc@8/16/4
                configuration: driver=serial_1
     *-scsi
          description: SCSI storage controller
          product: 53c895a
          vendor: LSI Logic / Symbios Logic
          physical id: 0
          bus info: pci@0000:00:00.0
          logical name: scsi0
          version: 00
          width: 32 bits
          clock: 33MHz
          capabilities: scsi bus_master scsi-host
          configuration: driver=sym53c8xx latency=255 module=sym53c8xx
        *-disk
             description: SCSI Disk
             physical id: 0.0.0
             bus info: scsi@0:0.0.0
             logical name: /dev/sda
             size: 4GiB (4294MB)
             capabilities: partitioned partitioned:dos
             configuration: signature=d91a0500
           *-volume:0
                description: Linux/PA-RISC boot partition
                physical id: 1
                bus info: scsi@0:0.0.0,1
                logical name: /dev/sda1
                capacity: 31MiB
                capabilities: primary boot
           *-volume:1
                description: Linux filesystem partition
                vendor: Linux
                physical id: 2
                bus info: scsi@0:0.0.0,2
                logical name: /dev/sda2
                logical name: /boot
                version: 1.0
                serial: 79a0cd68-010a-41dc-8704-bc2554308a99
                size: 125MiB
                capacity: 125MiB
                capabilities: primary large_files huge_files recover ext2 initialized
                configuration: filesystem=ext2 modified=2021-06-28 14:28:59 mount.fstype=ext2 mount.options=rw,errors=continue mounted=2021-06-28 14:28:59 state=mounted
           *-volume:2
                description: Extended partition
                physical id: 3
                bus info: scsi@0:0.0.0,3
                logical name: /dev/sda3
                size: 3937MiB
                capacity: 3937MiB
                capabilities: primary extended partitioned partitioned:extended
              *-logicalvolume:0
                   description: Linux filesystem partition
                   physical id: 5
                   logical name: /dev/sda5
                   logical name: /
                   capacity: 3725MiB
                   capabilities: bootable
                   configuration: mount.fstype=ext3 mount.options=rw,errors=remount-ro,data=ordered state=mounted
              *-logicalvolume:1
                   description: Linux swap / Solaris partition
                   physical id: 6
                   logical name: /dev/sda6
                   capacity: 211MiB
                   capabilities: nofs
        *-cdrom
             description: DVD reader
             physical id: 0.2.0
             bus info: scsi@0:0.2.0
             logical name: /dev/cdrom
             logical name: /dev/dvd
             logical name: /dev/scd0
             logical name: /dev/sr0
             capabilities: audio dvd bootable partitioned partitioned:lif
             configuration: status=ready
     *-network
          description: Ethernet interface
          product: DECchip 21142/43
          vendor: Digital Equipment Corporation
          physical id: 1
          bus info: pci@0000:00:01.0
          logical name: eth0
          version: 00
          serial: 52:54:00:12:34:56
          width: 32 bits
          clock: 33MHz
          capabilities: bus_master ethernet physical
          configuration: broadcast=yes driver=tulip driverversion=1.1.15-NAPI ip=10.0.2.15 latency=0 module=tulip multicast=yes

The tree helps with seeing the GSC and PCI devices, although it looks like the emulated devices don't appear on the expected connections. For example the SCSI controller and ethernet adapter appear on the main "core" bus (presumably GSC+), rather than under the PCI bridge.

dmesg

System log messages:

$ dmesg
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 2.6.26-2-parisc (Debian 2.6.26-29) (dannf@debian.org) (gcc version 4.1.3 20080704 (prerelease) (Debian 4.1.2-25)) #1 Sun Mar 4 17:37:14 UTC 2012
[    0.000000] FP[0] enabled: Rev 1 Model 19
[    0.000000] The 32-bit Kernel has started...
[    0.000000] console [ttyB0] enabled
[    0.000000] Initialized PDC Console for debugging.
[    0.000000] Determining PDC firmware type: System Map.
[    0.000000] model 00005020 00000481 00000000 02020202 7794d7fe 100000f0 00000004 000000ba 000000ba
[    0.000000] vers  00000023
[    0.000000] CPUID vers 15 rev 8 (0x000001e8)
[    0.000000] capabilities 0x2
[    0.000000] model 9000/778/B160L
[    0.000000] Total Memory: 1536 MB
[    0.000000] initrd: 4f919000-4ffee54e
[    0.000000] initrd: reserving 3f919000-3ffee54e (mem_max 60000000)
[    0.000000] On node 0 totalpages: 393216
[    0.000000]   Normal zone: 3072 pages used for memmap
[    0.000000]   Normal zone: 0 pages reserved
[    0.000000]   Normal zone: 390144 pages, LIFO batch:31
[    0.000000]   Movable zone: 0 pages used for memmap
[    0.000000] PDC reported no LCD or LED.
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 390144
[    0.000000] Kernel command line: root=/dev/sda5 HOME=/ console=ttyS0 TERM=vt102 palo_kernel=2/vmlinux
[    0.000000] PID hash table entries: 4096 (order: 12, 16384 bytes)
[17179569.184000] Console: colour dummy device 160x64
[17179569.196000] Dentry cache hash table entries: 262144 (order: 8, 1048576 bytes)
[17179569.204000] Inode-cache hash table entries: 131072 (order: 7, 524288 bytes)
[17179569.376000] Memory: 1545216k/1572864k available (1964k kernel code, 27360k reserved, 883k data, 224k init)
[17179569.380000] virtual kernel memory layout:
[17179569.380000]     vmalloc : 0x00810000 - 0x0f000000   ( 231 MB)
[17179569.380000]     memory  : 0x10000000 - 0x70000000   (1536 MB)
[17179569.380000]       .init : 0x10410000 - 0x10448000   ( 224 kB)
[17179569.380000]       .data : 0x102eb0b0 - 0x103c8000   ( 883 kB)
[17179569.380000]       .text : 0x10100000 - 0x102eb0b0   (1964 kB)
[17179569.384000] Calibrating delay loop... 976.89 BogoMIPS (lpj=1953792)
[17179569.468000] Security Framework initialized
[17179569.472000] SELinux:  Disabled at boot.
[17179569.472000] Capability LSM initialized
[17179569.472000] Mount-cache hash table entries: 512
[17179569.484000] Initializing cgroup subsys ns
[17179569.484000] Initializing cgroup subsys cpuacct
[17179569.484000] Initializing cgroup subsys devices
[17179569.512000] net_namespace: 648 bytes
[17179569.516000] NET: Registered protocol family 16
[17179569.532000] EISA bus registered
[17179569.532000] Searching for devices...
[17179569.552000] Found devices:
[17179569.552000] 1. Phantom PseudoBC GSC+ Port at 0xffc00000 [8] { 7, 0x0, 0x504, 0x00000 }
[17179569.552000] 2. Dino PCI Bridge at 0xfff80000 [8/0] { 13, 0x3, 0x680, 0x0000a }
[17179569.552000] 3. Merlin+ 132 Dino RS-232 at 0xfff83000 [8/0/63] { 10, 0x0, 0x022, 0x0008c }
[17179569.552000] 4. Merlin 160 Core BA at 0xffd00000 [8/16] { 11, 0x0, 0x03d, 0x00081 }, additional addresses: 0xffd0c000 0xffc00000 
[17179569.552000] 5. Merlin 160 Core RS-232 at 0xffd05000 [8/16/4] { 10, 0x0, 0x03d, 0x0008c }
[17179569.556000] 6. Merlin 160 Core Centronics at 0xffd02000 [8/16/0] { 10, 0x0, 0x03d, 0x00074 }, additional addresses: 0xffd01000 0xffd03000 
[17179569.556000] 7. Merlin L2 160 (9000/778/B160L) at 0xfffb0000 [48] { 0, 0x0, 0x502, 0x00004 }
[17179569.556000] 8. Memory at 0xfffbf000 [63] { 1, 0x0, 0x067, 0x00009 }
[17179569.556000] Enabling regular chassis codes support v0.05
[17179569.560000] CPU(s): 1 x PA7300LC (PCX-L2) at 250.000000 MHz
[17179569.560000] Whole cache flush 7271 cycles, flushing 3440640 bytes 8746 cycles
[17179569.560000] Setting cache flush threshold to 0 (1 CPUs online)
[17179569.564000] Lasi version 0 at 0xffd00000 found.
[17179569.564000] LED display at ffd0c000 registered
[17179569.572000] Dino version 3.1 found at 0xfff80000
[17179569.592000] powersw: Soft power switch at 0xf07ffff0 enabled.
[17179569.656000] NET: Registered protocol family 2
[17179569.696000] IP route cache hash table entries: 65536 (order: 6, 262144 bytes)
[17179569.708000] TCP established hash table entries: 262144 (order: 9, 2097152 bytes)
[17179569.724000] TCP bind hash table entries: 65536 (order: 6, 262144 bytes)
[17179569.724000] TCP: Hash tables configured (established 262144 bind 65536)
[17179569.728000] TCP reno registered
[17179569.740000] NET: Registered protocol family 1
[17179569.752000] checking if image is initramfs... it is
[17179572.464000] Freeing initrd memory: 6997k freed
[17179572.468000] Enabling PDC chassis warnings support v0.05
[17179572.468000] unwind_init: start = 0x1035ee40, end = 0x10386210, entries = 10045
[17179572.468000] WARNING: Out of order unwind entry! 10360830 and 10360840
[17179572.468000] WARNING: Out of order unwind entry! 10360840 and 10360850
[17179572.476000] audit: initializing netlink socket (disabled)
[17179572.480000] type=2000 audit(1624886875.296:1): initialized
[17179572.492000] VFS: Disk quotas dquot_6.5.1
[17179572.492000] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[17179572.500000] msgmni has been set to 3032
[17179572.508000] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
[17179572.512000] io scheduler noop registered
[17179572.512000] io scheduler anticipatory registered
[17179572.512000] io scheduler deadline registered
[17179572.512000] io scheduler cfq registered (default)
[17179572.516000] PDC Stable Storage facility v0.30
[17179572.524000] STI GSC/PCI core graphics driver Version 0.9a
[17179572.600000] Generic RTC Driver v1.07
[17179572.600000] Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled
[17179572.624000] 8:0:63: ttyS0 at MMIO 0xfff83800 (irq = 18) is a 16550A
[17179572.624000] console handover: boot [ttyB0] -> real [ttyS0]
[17179572.688000] brd: module loaded
[17179572.696000] mice: PS/2 mouse device common for all mice
[17179572.704000] TCP cubic registered
[17179572.704000] NET: Registered protocol family 17
[17179572.712000] registered taskstats version 1
[17179572.716000] Freeing unused kernel memory: 224k freed
[17179575.668000] SCSI subsystem initialized
[17179584.684000] sym53c8xx 0000:00:00.0: enabling SERR and PARITY (0107 -> 0147)
[17179584.688000] sym0: <895a> rev 0x0 at pci 0000:00:00.0 irq 19
[17179584.756000] Linux Tulip driver version 1.1.15-NAPI (Feb 27, 2007)
[17179584.796000] sym0: PA-RISC Firmware, ID 7, Fast-40, LVD, parity checking
[17179584.800000] sym0: SCSI BUS has been reset.
[17179584.812000] scsi0 : sym-2.2.3
[17179584.880000] tulip 0000:00:01.0: enabling SERR and PARITY (0103 -> 0143)
[17179584.884000] tulip0:  EEPROM default media type Autosense.
[17179584.884000] tulip0:  Index #0 - Media MII (#11) described by a 21142 MII PHY (3) block.
[17179584.888000] tulip0:  MII transceiver #1 config 3100 status 702c advertising 0501.
[17179584.888000] tulip0:  Advertising 01e1 on PHY 1, previously advertising 0501.
[17179584.896000] eth0: Digital DS21142/43 Tulip rev 0 at MMIO 0xf0803000, 52:54:00:12:34:56, IRQ 20.
[17179585.272000] scsi: waiting for bus probes to complete ...
[17179587.820000] scsi 0:0:0:0: Direct-Access     QEMU     QEMU HARDDISK    2.5+ PQ: 0 ANSI: 5
[17179587.824000]  target0:0:0: tagged command queuing enabled, command queue depth 16.
[17179587.824000]  target0:0:0: Beginning Domain Validation
[17179587.828000]  target0:0:0: Domain Validation skipping write tests
[17179587.828000]  target0:0:0: Ending Domain Validation
[17179587.836000] scsi 0:0:2:0: CD-ROM            QEMU     QEMU CD-ROM      2.5+ PQ: 0 ANSI: 5
[17179587.836000]  target0:0:2: tagged command queuing enabled, command queue depth 16.
[17179587.836000]  target0:0:2: Beginning Domain Validation
[17179587.840000]  target0:0:2: Domain Validation skipping write tests
[17179587.840000]  target0:0:2: Ending Domain Validation
[17179588.648000] Driver 'sd' needs updating - please use bus_type methods
[17179588.652000] sd 0:0:0:0: [sda] 8388608 512-byte hardware sectors (4295 MB)
[17179588.656000] sd 0:0:0:0: [sda] Write Protect is off
[17179588.656000] sd 0:0:0:0: [sda] Mode Sense: 63 00 00 08
[17179588.656000] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[17179588.664000] sd 0:0:0:0: [sda] 8388608 512-byte hardware sectors (4295 MB)
[17179588.664000] sd 0:0:0:0: [sda] Write Protect is off
[17179588.664000] sd 0:0:0:0: [sda] Mode Sense: 63 00 00 08
[17179588.664000] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[17179588.664000]  sda: sda1 sda2 sda3 < sda5 sda6 >
[17179588.808000] sd 0:0:0:0: [sda] Attached SCSI disk
[17179589.092000] Driver 'sr' needs updating - please use bus_type methods
[17179589.096000] sr0: scsi3-mmc drive: 16x/50x cd/rw xa/form2 cdda tray
[17179589.096000] Uniform CD-ROM driver Revision: 3.20
[17179589.100000] sr 0:0:2:0: Attached scsi CD-ROM sr0
[17179590.424000] sd 0:0:0:0: Attached scsi generic sg0 type 0
[17179590.428000] sr 0:0:2:0: Attached scsi generic sg1 type 5
[17179593.728000] kjournald starting.  Commit interval 5 seconds
[17179593.728000] EXT3-fs: mounted filesystem with ordered data mode.
[17179602.668000] udevd version 125 started
[17179624.188000] Adding 216836k swap on /dev/sda6.  Priority:-1 extents:1 across:216836k
[17179625.616000] EXT3 FS on sda5, internal journal
[17179632.184000] LASI 82596 driver - Revision: 1.30
[17179632.544000] loop: module loaded
[17179647.108000] eth0: Setting full-duplex based on MII#1 link partner capability of 4181.

The various mainboard chipsets are shown here with their names and devices.

A web search turns up an example of part of a dmesg output from a Linux 2.4 kernel (dmesg自慢スレ), which shows the core devices on a B160L:

Searching for devices...
Found devices:
1. Phantom PseudoBC GSC+ Port (7) at 0xffc00000, versions 0x504, 0x0, 0x0, 0x0, 0x0
2. Merlin 160 Core FW-SCSI (4) at 0xfff8c000, versions 0x3d, 0x0, 0x89, 0x0, 0x80
3. Merlin L2 160 (9000/778/B160L) (0) at 0xfffbe000, versions 0x502, 0x0, 0x4, 0x0, 0x81
4. Merlin 160/ThunderHawk Memory (1) at 0xfffbf000, versions 0x67, 0x0, 0x9, 0x0, 0x0
5. Merlin 160 Core BA (11) at 0xffd00000, versions 0x3d, 0x0, 0x81, 0x0, 0x0, additional addresses: 0xffd0c000 0xffc00000
6. Merlin 160 Core RS-232 (10) at 0xffd05000, versions 0x3d, 0x0, 0x8c, 0x0, 0x0
7. Merlin 160 Core SCSI (10) at 0xffd06000, versions 0x3d, 0x0, 0x82, 0x0, 0x0
8. Merlin 160 Core LAN (802.3) (10) at 0xffd07000, versions 0x3d, 0x0, 0x8a, 0x0, 0x0
9. Merlin 160 Core Centronics (10) at 0xffd02000, versions 0x3d, 0x0, 0x74, 0x0, 0x0, additional addresses: 0xffd01000 0xffd03000
10. Merlin 160 Core Audio (10) at 0xffd04000, versions 0x3d, 0x4, 0x7b, 0x0, 0x0
11. Merlin 160 Core PS/2 Port (10) at 0xffd08000, versions 0x3d, 0x0, 0x84, 0x0, 0x0
12. Merlin 160 Core PS/2 Port (10) at 0xffd08100, versions 0x3d, 0x0, 0x84, 0x0, 0x0
13. Merlin 160 Wax BA (11) at 0xffe00000, versions 0x41, 0x0, 0x8e, 0x0, 0x0
14. Merlin 160 Wax EISA BA (11) at 0xfc000000, versions 0x41, 0x0, 0x90, 0x0, 0x0, additional addresses: 0xf0184000
15. Merlin 160 Wax HIL (10) at 0xffe01000, versions 0x41, 0x0, 0x73, 0x0, 0x0
16. Merlin 160 Wax RS-232 (10) at 0xffe02000, versions 0x41, 0x0, 0x8c, 0x0, 0x0
17. Gecko GSC Core Graphics (10) at 0xf8000000, versions 0x16, 0x0, 0x85, 0x0, 0x0, additional addresses: 0xf0011000
18. Dino PCI Bridge (13) at 0xfff80000, versions 0x680, 0x1, 0xa, 0x0, 0x0
19. Merlin+ 132 Dino PS/2 Port (10) at 0xfff81000, versions 0x22, 0x0, 0x96, 0x0, 0x0

Wow, that is quite a bit more that we see on the QEMU machine:

  • Two SCSI devices - functionality provided by a PCI SCSI card
  • LAN device - functionality provided by a PCI ethernet card
  • Graphics device - removed in our emulation to force serial console
  • Wax chip - provides the EISA bridge, doesn't appear to be emulated
  • Audio device - not emulated
  • Three PS/2 devices - not sure why three appear... but the emulated system seems to handle these differently

As noted in the "TODO" section on the QEMU wiki (Features/HPPA - QEMU) there are more devices to be emulated.

Benchmarks

So how does this machine perform?

BogoMips

The BogoMips (Wikipedia) pseudo-benchmark has a behavior where the score is related to the processor clock speed, and has an easily available collection of results from a range of systems (see BogoMips mini-Howto). Based on recorded results found online, the PA7300LC used in the B160L typically gives BogoMips results that are about equal to the processor clock speed (in MHz). So on a real HP Visualize B160L, which has a PA7300LC running at 160 Mhz, the expected BogoMips is around 160. In QEMU the processor is claimed to be running at 250 MHz, which means we would expect a BogoMips result of around 250.

Calibrating delay loop... 976.89 BogoMIPS (lpj=1953792)

But the observed BogoMips result is 976.89, which suggests a processor clock of about 980 Mhz, which is quite a bit faster than the original hardware. But since this calibration of is based on a busy-wait-loop, that doesn't actually do anything, the emulation may optimize the particular instructions involved more than a workload that does something.

OpenSSL

The OpenSSL library of cryptographic methods provides a means to test the performance of the methods. Using this we can get a feel for the computational performance of a system, and comparisons with real hardware and other emulations can show how well a particular emulation performs. Since we are mainly interested in old hardware, we'll test using two of the older methods: MD5 and RSA.

First Message Digest 5 (MD5) (Wikipedia):

$ openssl speed md5
Doing md5 for 3s on 16 size blocks: 130061 md5's in 2.96s
Doing md5 for 3s on 64 size blocks: 123503 md5's in 2.96s
Doing md5 for 3s on 256 size blocks: 112761 md5's in 2.96s
Doing md5 for 3s on 1024 size blocks: 92664 md5's in 3.00s
Doing md5 for 3s on 8192 size blocks: 3551 md5's in 2.97s
OpenSSL 0.9.8g 19 Oct 2007
built on: Wed Jan 18 22:21:53 UTC 2012
options:bn(64,32) md2(char) rc4(idx,int) des(idx,cisc,4,long) aes(partial) blowfish(idx) 
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DB_ENDIAN -DTERMIO -O2 -Wa,--noexecstack -g -Wall
available timing options: TIMES TIMEB HZ=100 [sysconf value]
timing function used: times
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5                703.03k     2670.34k     9752.30k    31629.31k     9794.54k

And then RSA (Rivest–Shamir–Adleman) (Wikipedia):

$ openssl speed rsa
Doing 512 bit private rsa's for 10s: 482 512 bit private RSA's in 9.80s
Doing 512 bit public rsa's for 10s: 6359 512 bit public RSA's in 9.93s
Doing 1024 bit private rsa's for 10s: 109 1024 bit private RSA's in 9.94s
Doing 1024 bit public rsa's for 10s: 2619 1024 bit public RSA's in 9.95s
Doing 2048 bit private rsa's for 10s: 23 2048 bit private RSA's in 10.27s
Doing 2048 bit public rsa's for 10s: 953 2048 bit public RSA's in 9.84s
Doing 4096 bit private rsa's for 10s: 4 4096 bit private RSA's in 10.06s
Doing 4096 bit public rsa's for 10s: 305 4096 bit public RSA's in 9.79s
OpenSSL 0.9.8g 19 Oct 2007
built on: Wed Jan 18 22:21:53 UTC 2012
options:bn(64,32) md2(char) rc4(idx,int) des(idx,cisc,4,long) aes(partial) blowfish(idx) 
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DB_ENDIAN -DTERMIO -O2 -Wa,--noexecstack -g -Wall
available timing options: TIMES TIMEB HZ=100 [sysconf value]
timing function used: times
                  sign    verify    sign/s verify/s
rsa  512 bits 0.020332s 0.001562s     49.2    640.4
rsa 1024 bits 0.091193s 0.003799s     11.0    263.2
rsa 2048 bits 0.446522s 0.010325s      2.2     96.8
rsa 4096 bits 2.515000s 0.032098s      0.4     31.2

Extracting the relevant figures for comparisons (see OpenSSL Speed Results):

  • OpenSSL speed MD5 8,192 bytes: 9,794.54k
  • OpenSSL speed RSA 4,096 bytes sign/s: 0.4
  • OpenSSL speed RSA 4,096 bytes verify/s: 31.2

These provide a rough idea of computational workload performance for this particular machine. These look a bit low compared to the BogoMips result, but this is a different workload so the emulator will behave differently. I haven't seen any OpenSSL results for the B160L, so it is difficult to compare, but inferring from the results I have found these figures could be consistent with the real hardware.

Thoughts

The QEMU PA-RISC emulation runs Linux well, and appears very suitable for hobbyist usage. Single processor performance seems to be a little on the low side, but the emulated system supports the use of multiple processors which helps with multi-process or multi-threaded workloads.

There appear to be issues with the current device placements and bus assignments. This looks like a workaround for the currently unimplemented hardware, so future QEMU versions will likely address this.

Further Sources


No comments: