Sunday, 27 June 2021

HP Tru64 UNIX on AlphaVM-Free - System Information

AlphaVM-Free

A commercial Alpha AXP system emulator from EmuVM, the AlphaVM family of system emulators provide a means to emulate members of the Tsunami family of Alpha based systems from Compaq and HP. Mainly targeted at providing a migration option for existing Alpha systems running OpenVMS or Tru64 UNIX, allowing existing applications to be moved to newer, and potentially more efficient, hardware. A free version of AlphaVM (AlphaVM-Free) was offered as an evaluation and hobbyist product complementing the supported commercial offering (AlphaVM-Pro). Apparently due to licence abuse (see The sad state of Alpha emulators (for OpenVMS) - Raymii.org) the free version has been since replaced with a low cost option (AlphaVM-Basic).

To have a look at the emulator's capabilities and how well it manages to run HP Tru64 UNIX, I've setup a legacy AlphaVM-Free system in a Debian Linux 10 (buster) virtual machine and installed HP Tru64 UNIX 5.1B. Since all versions of AlphaVM are related the other versions will show similar behavior, although there is some additional flexibility with tuning the emulation available in the commercial product.

Note that AlphaVM requires the CMPXCHG16B instruction to be available on the host. In my case this meant I had to update the VirtualBox configuration for the Debian Linux 10 host virtual machine to allow access to this instruction (see virtualbox.org: View topic - hot to enable CMPXCHG16B instruction).

Emulated System

AlphaVM-Free emulates a range of systems in the Tsunami family of systems, which were based on the 21272 (Tsunami) and 21274 (Typhoon) chipsets:

  • Extreme Performance (XP) workstations:
    • Compaq XP900
    • Compaq XP1000
  • Departmental Server (DS):
    • Compaq DS10, DS10L
    • Compaq DS20, DS20E, DS20L
  • Enterprise Server (ES):
    • Compaq ES40

The DS and ES lines were available in server (AlphaServer) and workstation (AlphaStation) enclosures, the XP line only had a workstation. The the Tsunami/Typhoon chipsets were also used in the AlphaPC 264DP board and its derivatives (e.g. API UP2000 and UP2000+), but an AlphaVM system profile is not provided for those systems. The high-end Global Server (GS) series of the same period utilized custom chipsets, and are part of the TurboLaser and Wildfire families, rather than the Tsunami family.

For this exploration I've selected a DS10 system with an EV67. For comparison the equivalent physical system configuration (as sold by Compaq) would be:

Compaq AlphaServer DS10 67/600:

  • CPU: Alpha 21264A (EV67) at 616 MHz
  • RAM: 256 MiB to 2 GiB
  • Network: 2 10/100 ethernet - Tulip 21143 (DE500)
  • Disk controller:
    • built-in dual IDE (provided by Acer Labs 1543C)
    • SCSI option: Ultra2 (KZPCA-AA; NCR53c895), Ultra3 (KZPEA-DB; AIC-7899)
  • Misc.: Acer Labs 1543C providing: dual IDE, Floppy, USB, 2 serial, 1 parallel, keyboard & mouse (PS/2)

AlphaVM uses substitutions for some of the standard configuration hardware, and I want to see how some of the alternative device options turn out, so the emulated system looks more like:

  • CPU: Alpha 21264A (EV67) at 616 MHz
  • RAM: 1 GiB
  • Network interfaces:
    • DE500 10/100 Mb/s ethernet (Tulip 21143)
    • DE435 10 Mb/s ethernet (Tulip 21040)
  • Disk controller:
    • SCSI: QLogic ISP 1020 SCSI controller with 22 GB, 2 GB and CD-ROM drives
  • Misc.: 2 serial, 1 parallel

The AlphaVM documentation doesn't say much about the additional built-in devices, so I'm assuming they are absent.

Emulator Command

AlphaVM uses a configuration file for the emulated system specification, and this is simply referenced in the command-line:

$ alphavm_free config.emu

The config.emu file I'm using is:

system {
    type = ds10_616;
    reported_type = default;
    num_cpus = 1;
    ssn = 'EmuVM-00-000-001';
    interval_clock_freq = 1000;
    memory {
        size = 1024;
    }
    cpu {
    	server = basic;
	jit {
            async = yes;
        }
    }
    serial com1 {
        server = socket;
        port = 3000;
    }
    scsi_controller qla0 {
        scsi_id = 7;
    }
    scsi_disk dka0 {
        scsi_bus = 0;
        scsi_id = 0;
        scsi_lun = 0;
        file = 'disk01.dd';
        caching = no;
        write_through = yes;
    }
    scsi_disk dka1 {
        scsi_bus = 0;
        scsi_id = 2;
        scsi_lun = 0;
        file = 'disk02.dd';
        caching = no;
        write_through = yes;
    }
    scsi_cdrom iso {
        scsi_id = 4;
        file = 'ISO/tru64-cd1.iso';
    }
    ether eth0 {
        type = dec21143;
        server = dummy;
        mac_address = 0x08002B000001;
    }
    ether eth1 {
        type = dec21040;
        server = dummy;
        mac_address = 0x08002B000002;
    }
}

Note: this system profile (ds10_616) always provides two ethernet interfaces, which by default are dummy devices. Here this default is overridden to give us one each of the two supported types of adapter (DE500 & DE435) with distinct MAC addresses.

Unlike a real DS10, where the supplied CD-ROM drive is on an IDE bus, the only option here is to configure the CD-ROM drive as a SCSI device, in this case mapped to an ISO image of CD 1 of the Tru64 installation disk set.

HP Tru64 UNIX

The main UNIX for Alpha based systems, Tru64 UNIX (Wikipedia), was derived from OSF/1 (Wikipedia) and had a number of name changes thoughout its life-time:

  • DEC OSF/1 AXP
  • Digital UNIX
  • Compaq Tru64 UNIX

When Compaq merged with HP, documentation and marketing materials were updated to use HP Tru64 as the name, but the operating system retained mentions of the Compaq name in order to promote compatibility.

System Information

So lets see what the firmware and operating system have to say about emulated platform.

SRM Firmware

The AlphaVM-Free version of the SRM firmware doesn't provide the full capabilities of the SRM console on a real DS10, however it does provide the core "show devices" command for reporting potential boot devices:

>>> show devices
pka		SCSI Controller
dka0		SCSI 0 14 0 0 0 0 0
dka200		SCSI 0 14 0 0 200 0 0
dka400		SCSI 0 14 0 0 400 0 0
ewa		MOP 0 9 0 0 0 3 0 (08:00:2b:00:00:01)
ewb		MOP 0 11 0 0 0 3 0 (08:00:2b:00:00:02)

Here we see the SCSI controllers (pka & pkb), their disks (dka0 & dka200) and the SCSI CD-ROM drive (dka400), and the network interfaces (ewa & ewb). The reported device names (see SRM Device Naming) match the expected names of the devices configured for the system.

uname

System version and architecture information:

# uname -a
OSF1 alvm-tru64 V5.1 2650 alpha

Breaking this down: OSF1 is the operating system name for Tru64 and its predecessors, the release is V5.1, and the version 2650, which is the 'B' update (and its subsequent patches), running on an Alpha.

sizer

Reports on the system and/or kernel. In this case we use:

  • -v to get the operating system version string
  • -c to get the CPU type
  • -implver to get the processor family name

So lets see what we have...

# sizer -v
Compaq Tru64 UNIX V5.1B (Rev. 2650); Wed Jun 16 14:14:34 BST 2021
# sizer -c
cpu             "DEC6600"
# sizer -implver
EV6

The operating system version string confirms this is Tru64 5.1B, with a recently built kernel.

The CPU module is a "DEC6600", this identifier is associated with the DS10, DS20 and ES40 systems.

The processor family is EV6 which is correct for the Alpha 21264 chip and its derivatives (Wikipedia). Although the specified DS10 model should have the improved EV67 rather than a plain EV6.

psrinfo

Report processor information:

# psrinfo -v
Status of processor 0 as of: 06/16/21 14:44:35
  Processor has been on-line since 06/16/2021 14:15:24
  The alpha EV6.7 (21264A) processor operates at 617 MHz,
  has a cache size of 1048576 bytes,
  and has an alpha internal floating point processor.

For our emulated DS10 model we expect one Alpha EV67 running at 616 MHz, and that is what the system reports.

hwmgr

Report hardware information:

# hwmgr view devices
 HWID: Device Name          Mfg      Model            Location
 ------------------------------------------------------------------------------
    3: /dev/dmapi/dmapi                               
    4: /dev/scp_scsi                                  
    5: /dev/kevm                                      
   26: /dev/disk/dsk0c      EmuVM    HD image         bus-0-targ-0-lun-0
   27: /dev/disk/dsk1c      EmuVM    HD image         bus-0-targ-2-lun-0
   28: /dev/disk/cdrom0c    EmuVM    CDROM ISO image  bus-0-targ-4-lun-0
   29: /dev/random                                    
   30: /dev/urandom                                   
# hwmgr view hierarchy
HWID:   hardware hierarchy
-------------------------------------------------------------------------------
   1:   platform AlphaServer DS10 616 MHz
   2:     cpu CPU0
   6:     bus pci0
   7:       connection pci0slot7
  15:         bus isa0
  16:           connection isa0slot1
  17:             serial_port tty00
  18:           connection isa0slot2
  19:             serial_port tty01
  20:           connection isa0slot3
  21:             parallel_port lp0
   9:       connection pci0slot9
  22:         network tu0
  11:       connection pci0slot11
  23:         network tu1
  13:       connection pci0slot14
  24:         scsi_adapter isp0
  25:           scsi_bus scsi0
  26:             disk bus-0-targ-0-lun-0 dsk0
  27:             disk bus-0-targ-2-lun-0 dsk1
  28:             disk bus-0-targ-4-lun-0 cdrom0

Here we see the emulated disks give a fingerprint for the emulator with the "EmuVM" manufacturer string.

So the system is identified as an AlphaServer DS10, as expected, with one CPU, two SCSI hard disks and a CD-ROM, 2 serial ports, 1 parallel port and a two Tulip based network interfaces. As expected for the emulated system configuration.

On a real DS10 system we would also expect to see the other built-in devices: keyboard, mouse, floppy disk controller, IDE controller and USB. However since we can't configure these for use with AlphaVM it is unsurprising they are not implemented in the emulated system.

vmstat

Virtual memory information with some additional physical memory information:

# vmstat -P
Total Physical Memory =  1024.00 M
                      =   131072 pages
Physical Memory Clusters:
start_pfn     end_pfn        type  size_pages / size_bytes
         0         256         pal         256 /    2.00M
       256      131072          os      130816 / 1022.00M
Physical Memory Use:
 start_pfn     end_pfn        type  size_pages / size_bytes
       256         289    scavenge          33 /  264.00k
       289        1070        text         781 /    6.10M
      1070        1213        data         143 /    1.12M
      1213        1441         bss         228 /    1.78M
      1441        1637      kdebug         196 /    1.53M
      1637        1644     cfgmgmt           7 /   56.00k
      1644        1645       locks           1 /    8.00k
      1645        1659        pmap          14 /  112.00k
      1659        2265   unixtable         606 /    4.73M
      2265        2289        logs          24 /  192.00k
      2289        5302    vmtables        3013 /   23.54M
      5302      131072     managed      125770 /  982.58M
                             ============================
         Total Physical Memory Use:     130816 / 1022.00M
Managed Pages Break Down:
       free pages = 109057
     active pages = 4320
   inactive pages = 0
      wired pages = 7284
        ubc pages = 5142
        ==================
            Total = 125803
WIRED Pages Break Down:
   vm wired pages = 1044
  ubc wired pages = 0
  meta data pages = 3882
     malloc pages = 1131
     contig pages = 695
    user ptepages = 393
  kernel ptepages = 132
    free ptepages = 7
        ==================
            Total = 7284

This reports the expected 1 GiB memory from the emulator configuration.

System Boot Record

Kernel messages from the boot process:

# uerf -R -r 300
                                                  uerf version 4.2-011 (122)

********************************* ENTRY     1. *********************************
----- EVENT INFORMATION -----
EVENT CLASS                             OPERATIONAL EVENT 
OS EVENT TYPE                  300.     SYSTEM STARTUP 
SEQUENCE NUMBER                  1.
OPERATING SYSTEM                        DEC OSF/1 
OCCURRED/LOGGED ON                      Wed Jun 16 15:28:06 2021
OCCURRED ON SYSTEM                      alvm-tru64 
SYSTEM ID                 x000B0022
SYSTYPE                   x00000000
MESSAGE                                 Alpha boot: available memory from 
                                         _0x296c000 to 0x40000000 
                                        Compaq Tru64 UNIX V5.1B (Rev. 2650); 
                                         _Wed Jun 16 14:14:34 BST 2021 
                                        physical memory = 1024.00 megabytes. 
                                        available memory = 982.57 megabytes. 
                                        using 3882 buffers containing 30.32 
                                         _megabytes of memory 
                                        Firmware revision: 13.0-0 
                                        PALcode: UNIX version 1.62-1 
                                        AlphaServer DS10 616 MHz 
                                        config_cpus: Could not find config 
                                         _tree entry for CPU0 
                                        pci0 (primary bus:0) at nexus 
                                        isa0 at pci0 
                                        ace0 at isa0 
                                        ace1 at isa0 
                                        lp0 at isa0 
                                        tu0: DECchip 21143: Revision: 3.0 
                                        tu0: auto negotiation capable device 
                                        tu0: no SROM info for selected media 
                                        tu0 at pci0 slot 9 
                                        tu0: DEC TULIP (10/100) Ethernet 
                                         _Interface, hardware address: 
                                         _08-00-2B-00-00-01 
                                        tu0: auto negotiation off: selecting 
                                         _100BaseTX (UTP) port: full duplex 
                                        tu1: DECchip 21040: Revision: 2.0 
                                        tu1 at pci0 slot 11 
                                        tu1: DEC TULIP (10Mbps) Ethernet 
                                         _Interface, hardware address: 
                                         _08-00-2B-00-00-02 
                                        tu1: console mode: selecting 10BaseT 
                                         _(UTP) port: full duplex 
                                        isp0 at pci0 slot 14 
                                        isp0: QLOGIC ISP1020B - Differential 
                                         _Mode 
                                        isp0: Firmware revision 7.63 (loaded 
                                         _by console) 
                                        scsi0 at isp0 slot 0 rad 0 
                                        Created FRU table binary error log 
                                         _packet 
                                        kernel console: ace0 
                                        dli: configured 
                                        NetRAIN configured. 
                                        Random number generator configured. 
                                        ATM Subsystem configured with 1 
                                         _restart threads 
                                        ATMUNI: configured 
                                        ATMSIG: 3.x (module=uni3x) configured 
                                        ILMI: 3.x (module=ilmi) configured 
                                        ATM IP: configured 
                                        ATM LANE: configured. 
                                        ATM IFMP: configured 

While not the prettiest format, this does cover what happened during boot. There is a lot of information in here, some of which is redundant with earlier information, so I'll only comment on some highlights.

The two network adapters are identified here showing the "tu0: DECchip 21143" (DE500) and "tu1: DECchip 21040" (DE435). As is the SCSI controller "isp0: QLOGIC ISP1020B"

Benchmark

Since this is an emulated machine an obvious question is, how well does it perform compared to the real thing? To find out we're going to need a benchmark.

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). This is helpful in this case since the performance of processors of this era typically scaled with clock speed. So let's get some results using the standalone BogoMips 1.3 program and see what it says:

> ./bogo.sh 
Calibrating delay loop.. ok - 74.00 BogoMips
Calibrating delay loop.. ok - 76.00 BogoMips
Calibrating delay loop.. ok - 78.00 BogoMips
Calibrating delay loop.. ok - 76.00 BogoMips
Calibrating delay loop.. ok - 76.00 BogoMips

On an Alpha 21264 (EV6) the Linux BogoMips result is approximately equal to twice the processor clock speed, which would suggest the emulated machine is very slow (Mhz = BogoMips / 1.99 => 80 / 1.99 = 40.2 MHz) compared to the real hardware.

OpenSSL

One of the provided benchmarks for AlphaVM (Benchmarks - EmuVM) uses OpenSSL to get a performance measure. So lets see how that compares:

> openssl speed md5
Doing md5 for 3s on 8 size blocks: 157920 md5's in 2.83s
Doing md5 for 3s on 64 size blocks: 86312 md5's in 2.85s
Doing md5 for 3s on 256 size blocks: 37151 md5's in 2.82s
Doing md5 for 3s on 1024 size blocks: 11254 md5's in 2.85s
Doing md5 for 3s on 8192 size blocks: 1506 md5's in 2.85s
OpenSSL 0.9.6g [engine] 9 Aug 2002
built on: Thu Aug 15 02:59:23 EDT 2002
options:bn(64,64) md2(int) rc4(ptr,int) des(idx,cisc,4,long) blowfish(idx) 
compiler: cc -DTHREADS -DDSO_DLFCN -DHAVE_DLFCN_H -DNO_ASM -DNO_IDEA -DNO_RC5 -DNO_HW_KEYCLIENT -pthread -std1 -O4 -readonly_strings
The 'numbers' are in 1000s of bytes per second processed.
type              8 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5                445.89k     1938.23k     3376.56k     4043.54k     4328.83k
> openssl speed rsa
Doing 512 bit private rsa's for 10s: 598 512 bit private RSA's in 9.48s
Doing 512 bit public rsa's for 10s: 8019 512 bit public RSA's in 9.50s
Doing 1024 bit private rsa's for 10s: 135 1024 bit private RSA's in 9.50s
Doing 1024 bit public rsa's for 10s: 2633 1024 bit public RSA's in 9.50s
Doing 2048 bit private rsa's for 10s: 23 2048 bit private RSA's in 9.73s
Doing 2048 bit public rsa's for 10s: 776 2048 bit public RSA's in 9.43s
Doing 4096 bit private rsa's for 10s: 4 4096 bit private RSA's in 11.30s
Doing 4096 bit public rsa's for 10s: 216 4096 bit public RSA's in 9.50s
OpenSSL 0.9.6g [engine] 9 Aug 2002
built on: Thu Aug 15 02:59:23 EDT 2002
options:bn(64,64) md2(int) rc4(ptr,int) des(idx,cisc,4,long) blowfish(idx) 
compiler: cc -DTHREADS -DDSO_DLFCN -DHAVE_DLFCN_H -DNO_ASM -DNO_IDEA -DNO_RC5 -DNO_HW_KEYCLIENT -pthread -std1 -O4 -readonly_strings
                  sign    verify    sign/s verify/s
rsa  512 bits   0.0159s   0.0012s     63.1    844.1
rsa 1024 bits   0.0704s   0.0036s     14.2    277.2
rsa 2048 bits   0.4232s   0.0122s      2.4     82.3
rsa 4096 bits   2.8250s   0.0440s      0.4     22.7

The relevant figures are for comparison with the published results are:

  • OpenSSL speed MD5 8,192 bytes: 4,328.83k
  • OpenSSL speed RSA 4,096 bytes sign/s: 0.4
  • OpenSSL speed RSA 4,096 bytes verify/s: 22.7

These figures are much lower than the published results, however this is using AlphaVM-Free, which doesn't have access to the higher performance CPU emulations in AlphaVM-Pro, which was used for the published benchmark. Comparing with the real DS10 system in the benchmark result it would appear that this emulated machine is around 1/10 of the performance.

Thoughts

AlphaVM-Free runs HP Tru64 UNIX very well, and although the performance is a bit less than expected it should be adequate for most hobbyist purposes. However since it is no longer available, the replacement AlphaVM-Basic option is worth a look for these roles. For the types of workloads expected for system migrations, it is evident that the AlphaVM-Pro product would be a much better option for commercial applications.

The estimated 1/10 of a real DS10 gives us something to work with regarding comparisons with other Alpha systems and emulations. Certainly the performance seen here for Tru64 UNIX is comparable with the FreeAXP system emulator from Migration Specialties International, Inc. (see HP Tru64 on FreeAXP - System Information). But the availability of more memory and more hardware configuration options placed AlphaVM-Free ahead in the free Alpha emulation stakes.

Further Sources

More information can be found at:


No comments: