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
- HP 9000 - Wikipedia
- HP Visualize B132L, B160L, B180L
- HP Computer Museum
- Qemu - Linux PARISC Wiki
- Running HP-UX 11.11 on qemu-system-hppa | Astr0baby's not so random thoughts _____ rand() % 100;
No comments:
Post a Comment