Wednesday, 4 August 2021

BeOS - System Information

BeOS

The BeOS operating system (Wikipedia) is a multimedia operating system from the late 1990s...

BeOS 5 Pro in VirtualBox

Platform

BeOS Release 5.0 Professional supported two system architectures (see BeOS Ready Hardware List):

  1. PowerPC - BeBox and various pre-G3 Power Macintosh systems and compatibles
  2. x86 - various systems based on Intel Pentium, Pentium Pro, Pentium II, Pentium III & Celeron processors and compatibles (e.g. AMD K6, K6-2, K6-III & Athlon; Cyrix 686mx, 686GXm, & M II; IDT WinChip C6 & WinChip 2).

The hardware that can run BeOS is aging and can be difficult to obtain, so there is a need to consider emulation/virtualization options as alternatives to sourcing hardware.

Emulator and Virtual Machine

Examining the emulation and virtualization options for running BeOS...

PowerPC

For BeOS on the PowerPC platform options are limited, with BeOS supported systems typically not having emulation solutions available. Looking at Power Macintosh emulation options:

  • GXemul - provides a generic G4 system, which is unlikely to be supported by BeOS.
  • PearPC - provides a G3 or G4 Power Macintosh... which aren't supported by BeOS
  • SheepShaver - provides MacOS support for the right era, so maybe able to run BeOS? However it looks like the system level is generic and tailored to support MacOS, so no BeOS support.
  • QEMU - system emulation of the Beige G3 (g3beige) and Graphite G4 AGP (mac99), which are not supported by BeOS.

Since BeOS requires a pre-G3 Power Macintosh (although it does support G3 processor upgrades), these don't really help. 

Looking around for BeBox emulations finds preliminary support for the PowerPC BeBox in MAME, but this is marked as not working (see BeBox Dual603-66 - MAME machine and BeBox Dual603-133 - MAME machine). It also appears that there was some interest in emulating the BeBox prototype based on the AT&T Hobbit processor (Wikipedia) in MESS a while back (Hobbit BeBox - Forums).

Intel x86 and Compatibles

For the x86 platform support there is a much wider range of options:

The main restrictions being on finding emulated devices with driver support.

The Selection

Given that there are already details for setting up BeOS on VirtualBox, and I'm using VirtualBox for various other operating systems, my initial choice is to use VirtualBox. However VirtualBox uses a hypervisor model, which means BeOS can see some aspects of the host hardware... which confuses it a little.

So I'm also going to try getting BeOS to work on Bochs, since it emulates everything and provides devices choices which fit with BeOS hardware support. But that is for another day...

System Information

So let's see what the BeOS has to say about the VM system, and where appropriate a real Pentium MMX class PC system...

uname

Operating system name, version, revision and platform information.

$ uname -a
BeOS beos5-vm 5.0 1000009 BePC unknown

So a "BeOS" system called "beos5-vm", OS release "5.0", version "1000009", machine type "BePC", processor type "unknown".

Seems odd that the host processor type is not reported, this might be a mismatch between the supplied 'uname' (from GNU sh-utils) and the system information on BeOS.

iroster

Show the roster of input devices:

$ iroster
         name                  type         state
--------------------------------------------------
            AT Keyboard  B_KEYBOARD_DEVICE running
             PS/2 Mouse  B_POINTING_DEVICE running

For these machines we have the keyboard and mouse.

listdev

Show a list of devices...

For a real hardware system:

$ listdev
ISA bus, device #0: Memory Controller (RAM) [5|0|0]
Current configuration:
  mem range: min 0 max 0 align 0 len a0000
  mem range: min e0000 max e0000 align 0 len 20000
1 configurations

Possible configuration #0:
  mem range: min 0 max 0 align 0 len a0000
  mem range: min e0000 max e0000 align 0 len 20000

Bus-dependent information:
CSN 0 LDN 0

ISA bus, device #1: Generic System Peripheral (PIC) [8|0|1]
Current configuration: irq [2]
  io range:  min 20 max 20 align 0 len 2
  io range:  min a0 max a0 align 0 len 2
1 configurations

Possible configuration #0: irq [2]
  io range:  min 20 max 20 align 0 len 2
  io range:  min a0 max a0 align 0 len 2

Bus-dependent information:
CSN 1 LDN 0

ISA bus, device #2: Generic System Peripheral (DMA) [8|1|1]
Current configuration: dma [4]
  io range:  min 0 max 0 align 0 len 10
  io range:  min 80 max 80 align 0 len 11
  io range:  min 94 max 94 align 0 len c
  io range:  min c0 max c0 align 0 len 1f
1 configurations

Possible configuration #0: dma [4]
  io range:  min 0 max 0 align 0 len 10
  io range:  min 80 max 80 align 0 len 11
  io range:  min 94 max 94 align 0 len c
  io range:  min c0 max c0 align 0 len 1f

Bus-dependent information:
CSN 2 LDN 0

ISA bus, device #3: Generic System Peripheral (Timer) [8|2|1]
Current configuration: irq [0]
  io range:  min 40 max 40 align 0 len 4
1 configurations

Possible configuration #0: irq [0]
  io range:  min 40 max 40 align 0 len 4

Bus-dependent information:
CSN 3 LDN 0

ISA bus, device #4: Generic System Peripheral (RTC) [8|3|1]
Current configuration: irq [8]
  io range:  min 70 max 70 align 0 len 2
1 configurations

Possible configuration #0: irq [8]
  io range:  min 70 max 70 align 0 len 2

Bus-dependent information:
CSN 4 LDN 0

ISA bus, device #5: Input Device (Keyboard) [9|0|0]
Current configuration: irq [1]
  io range:  min 60 max 60 align 0 len 1
  io range:  min 64 max 64 align 0 len 1
1 configurations

Possible configuration #0: irq [1]
  io range:  min 60 max 60 align 0 len 1
  io range:  min 64 max 64 align 0 len 1

Bus-dependent information:
CSN 5 LDN 0

ISA bus, device #6: Generic System Peripheral (Other) [8|80|0]
Current configuration:
  io range:  min 61 max 61 align 0 len 1
1 configurations

Possible configuration #0:
  io range:  min 61 max 61 align 0 len 1

Bus-dependent information:
CSN 6 LDN 0

ISA bus, device #7: Generic System Peripheral (Other) [8|80|0]
Current configuration: irq [13]
  io range:  min f0 max f0 align 0 len 10
1 configurations

Possible configuration #0: irq [13]
  io range:  min f0 max f0 align 0 len 10

Bus-dependent information:
CSN 7 LDN 0

ISA bus, device #8: Input Device (Mouse) [9|2|0]
Current configuration: irq [12]
1 configurations

Possible configuration #0: irq [12]

Bus-dependent information:
CSN 8 LDN 0

ISA bus, device #9: Bridge Device (PCI-PCI) [6|4|0]
Current configuration:
0 configurations

Bus-dependent information:
CSN 9 LDN 0

ISA bus, device #10: Mass Storage Controller (Floppy) [1|2|0]
Current configuration: irq [6] dma [2]
  io range:  min 3f0 max 3f0 align 4 len 6
1 configurations

Possible configuration #0: irq [6] dma [2]
  io range:  min 3f0 max 3f0 align 4 len 6

Bus-dependent information:
CSN a LDN 0

ISA bus, device #11: Generic System Peripheral (Other) [8|80|0]
Current configuration:
  io range:  min 4d0 max 4d0 align 4 len 2
  io range:  min cf8 max cf8 align 8 len 8
  io range:  min 3f7 max 3f7 align 1 len 1
  mem range: min fffe0000 max fffe0000 align 0 len 20000
  mem range: min 100000 max 100000 align 0 len ff00000
1 configurations

Possible configuration #0:
  io range:  min 4d0 max 4d0 align 4 len 2
  io range:  min cf8 max cf8 align 8 len 8
  io range:  min 3f7 max 3f7 align 1 len 1
  mem range: min fffe0000 max fffe0000 align 0 len 20000
  mem range: min 100000 max 100000 align 0 len ff00000

Bus-dependent information:
CSN b LDN 0

ISA bus, device #12: Legacy (non-VGA) [0|0|0]
Current configuration: irq [3]
  io range:  min 200 max 200 align 0 len 20
  mem range: min c0000 max c0000 align 0 len 4000
1 configurations

Possible configuration #0: irq [2,3,4,5,10,11,12,15]
  io range:  min 200 max 3e0 align 20 len 20
  mem range: min c0000 max dc000 align 40000000 len 4000

Bus-dependent information:
CSN 1 LDN 0 Plug & Play Ethernet Card

PCI bus, device #0: Bridge Device (Host) [6|0|0]
Current configuration:
1 configurations

Possible configuration #0:

Bus-dependent information:
vendor id: 10b9, device id: 1531

PCI bus, device #1: Bridge Device (ISA) [6|1|0]
Current configuration:
1 configurations

Possible configuration #0:

Bus-dependent information:
vendor id: 10b9, device id: 1533

PCI bus, device #2: Display Controller (VGA/8514) [3|0|0]
Current configuration:
  io range:  min ec80 max ec80 align 0 len 80
  mem range: min ef800000 max ef800000 align 0 len 800000
  mem range: min ffaf0000 max ffaf0000 align 0 len 10000
1 configurations

Possible configuration #0:
  io range:  min ec80 max ec80 align 0 len 80
  mem range: min ef800000 max ef800000 align 0 len 800000
  mem range: min ffaf0000 max ffaf0000 align 0 len 10000

Bus-dependent information:
vendor id: 1039, device id: 6326

PCI bus, device #3: Multimedia Device (Audio) [4|1|0]
Current configuration: irq [9]
  io range:  min ee80 max ee80 align 0 len 40
1 configurations

Possible configuration #0: irq [9]
  io range:  min ee80 max ee80 align 0 len 40

Bus-dependent information:
vendor id: 1274, device id: 5880

PCI bus, device #4: NIC (Ethernet) [2|0|0]
Current configuration: irq [10]
  io range:  min ec00 max ec00 align 0 len 80
  mem range: min ffadff80 max ffadff80 align 0 len 80
1 configurations

Possible configuration #0: irq [10]
  io range:  min ec00 max ec00 align 0 len 80
  mem range: min ffadff80 max ffadff80 align 0 len 80

Bus-dependent information:
vendor id: 1011, device id: 19

PCI bus, device #5: Mass Storage Controller (IDE) [1|1|fa]
Current configuration: irqs [14][15]
  io range:  min 1f0 max 1f0 align 0 len 8
  io range:  min 3f4 max 3f4 align 0 len 4
  io range:  min 170 max 170 align 0 len 8
  io range:  min 374 max 374 align 0 len 4
  io range:  min ffa0 max ffa0 align 0 len 10
1 configurations

Possible configuration #0: irqs [14][15]
  io range:  min 1f0 max 1f0 align 0 len 8
  io range:  min 3f4 max 3f4 align 0 len 4
  io range:  min 170 max 170 align 0 len 8
  io range:  min 374 max 374 align 0 len 4
  io range:  min ffa0 max ffa0 align 0 len 10

Bus-dependent information:
vendor id: 10b9, device id: 5229

PCI bus, device #6: Serial Bus Controller (USB) [c|3|10]
Current configuration: irq [11]
  mem range: min ffad7000 max ffad7000 align 0 len 1000
1 configurations

Possible configuration #0: irq [11]
  mem range: min ffad7000 max ffad7000 align 0 len 1000

Bus-dependent information:
vendor id: 10b9, device id: 5237

Lots of hardware information here, but not particularly designed to be human readable, and doesn't really mention which drivers handle the devices. Something that would be helpful for identifying devices that are not configured correctly. In this particular case there is a ISA Plug & Play NE2000 ethernet adapter which is configured, but not bound to a driver, and the USB controller also seems to be configured and not bound. Investigation shows the NE2000 issue to be a Plug&Play allocation to an I/O address which is not available to the driver.

For the VirtualBox BeOS VM things are similar, but some of the detail is a bit different:

$ listdev
ISA bus, device #0: Generic System Peripheral (PIC) [8|0|1]
Current configuration: irq [2]
  io range:  min 20 max 20 align 0 len 2
  io range:  min a0 max a0 align 0 len 2
1 configurations

Possible configuration #0: irq [2]
  io range:  min 20 max 20 align 0 len 2
  io range:  min a0 max a0 align 0 len 2

Bus-dependent information:
CSN 0 LDN 0 PIC

ISA bus, device #1: Generic System Peripheral (DMA) [8|1|1]
Current configuration: dma [4]
  io range:  min 0 max 0 align 0 len 10
  io range:  min 80 max 80 align 0 len 11
  io range:  min 94 max 94 align 0 len c
  io range:  min c0 max c0 align 0 len 1f
1 configurations

Possible configuration #0: dma [4]
  io range:  min 0 max 0 align 0 len 10
  io range:  min 80 max 80 align 0 len 11
  io range:  min 94 max 94 align 0 len c
  io range:  min c0 max c0 align 0 len 1f

Bus-dependent information:
CSN 1 LDN 0 DMA

ISA bus, device #2: Generic System Peripheral (Timer) [8|2|1]
Current configuration: irq [0]
  io range:  min 40 max 40 align 0 len 4
1 configurations

Possible configuration #0: irq [0]
  io range:  min 40 max 40 align 0 len 4

Bus-dependent information:
CSN 2 LDN 0 Timer

ISA bus, device #3: Generic System Peripheral (RTC) [8|3|1]
Current configuration: irq [8]
  io range:  min 70 max 70 align 0 len 2
1 configurations

Possible configuration #0: irq [8]
  io range:  min 70 max 70 align 0 len 2

Bus-dependent information:
CSN 3 LDN 0 RTC

ISA bus, device #4: Input Device (Keyboard) [9|0|0]
Current configuration: irq [1]
  io range:  min 60 max 60 align 0 len 1
  io range:  min 64 max 64 align 0 len 1
1 configurations

Possible configuration #0: irq [1]
  io range:  min 60 max 60 align 0 len 1
  io range:  min 64 max 64 align 0 len 1

Bus-dependent information:
CSN 4 LDN 0 Keyboard

ISA bus, device #5: Generic System Peripheral (Other) [8|80|0]
Current configuration: irq [13]
  io range:  min f0 max f0 align 0 len 10
1 configurations

Possible configuration #0: irq [13]
  io range:  min f0 max f0 align 0 len 10

Bus-dependent information:
CSN 5 LDN 0 Math Coprocessor

ISA bus, device #6: Communication Device (Serial) [7|0|2]
Current configuration: irq [4]
  io range:  min 3f8 max 3f8 align 0 len 8
1 configurations

Possible configuration #0: irq [4]
  io range:  min 3f8 max 3f8 align 0 len 8

Bus-dependent information:
CSN 6 LDN 0 Serial 1

ISA bus, device #7: Communication Device (Serial) [7|0|2]
Current configuration: irq [3]
  io range:  min 2f8 max 2f8 align 0 len 8
1 configurations

Possible configuration #0: irq [3]
  io range:  min 2f8 max 2f8 align 0 len 8

Bus-dependent information:
CSN 7 LDN 0 Serial 2

ISA bus, device #8: Communication Device (Parallel) [7|1|2]
Current configuration: irq [7]
  io range:  min 378 max 378 align 0 len 4
1 configurations

Possible configuration #0: irq [7]
  io range:  min 378 max 378 align 0 len 4

Bus-dependent information:
CSN 8 LDN 0 Parallel 1

ISA bus, device #9: Mass Storage Controller (Floppy) [1|2|0]
Current configuration: irq [6] dma [2]
  io range:  min 3f0 max 3f0 align 0 len 6
1 configurations

Possible configuration #0: irq [6] dma [2]
  io range:  min 3f0 max 3f0 align 0 len 6

Bus-dependent information:
CSN 9 LDN 0 Floppy

ISA bus, device #10: Input Device (Mouse) [9|2|0]
Current configuration: irq [12]
1 configurations

Possible configuration #0: irq [12]

Bus-dependent information:
CSN a LDN 0 PS/2 Mouse

ISA bus, device #11: Memory Controller (RAM) [5|0|0]
Current configuration:
  mem range: min 0 max 0 align 0 len 20000000
1 configurations

Possible configuration #0:
  mem range: min 0 max 0 align 0 len 20000000

Bus-dependent information:
CSN b LDN 0 RAM

PCI bus, device #0: Bridge Device (Host) [6|0|0]
Current configuration:
1 configurations

Possible configuration #0:

Bus-dependent information:
vendor id: 8086, device id: 1237

PCI bus, device #1: Bridge Device (ISA) [6|1|0]
Current configuration:
1 configurations

Possible configuration #0:

Bus-dependent information:
vendor id: 8086, device id: 7000

PCI bus, device #2: Mass Storage Controller (IDE) [1|1|8a]
Current configuration: irqs [14][15]
  io range:  min 1f0 max 1f0 align 0 len 8
  io range:  min 3f4 max 3f4 align 0 len 4
  io range:  min 170 max 170 align 0 len 8
  io range:  min 374 max 374 align 0 len 4
  io range:  min d000 max d000 align 0 len 10
1 configurations

Possible configuration #0: irqs [14][15]
  io range:  min 1f0 max 1f0 align 0 len 8
  io range:  min 3f4 max 3f4 align 0 len 4
  io range:  min 170 max 170 align 0 len 8
  io range:  min 374 max 374 align 0 len 4
  io range:  min d000 max d000 align 0 len 10

Bus-dependent information:
vendor id: 8086, device id: 7010

PCI bus, device #3: Display Controller (VGA/8514) [3|0|0]
Current configuration: irq [10]
  mem range: min 30387000 max 30387000 align 0 len 8000000
1 configurations

Possible configuration #0: irq [10]
  mem range: min 30387000 max 30387000 align 0 len 8000000

Bus-dependent information:
vendor id: 80ee, device id: beef

PCI bus, device #4: NIC (Ethernet) [2|0|0]
Current configuration: irq [9]
  io range:  min d010 max d010 align 0 len 8
  mem range: min f0000000 max f0000000 align 0 len 20000
1 configurations

Possible configuration #0: irq [9]
  io range:  min d010 max d010 align 0 len 8
  mem range: min f0000000 max f0000000 align 0 len 20000

Bus-dependent information:
vendor id: 8086, device id: 1004

PCI bus, device #5: Generic System Peripheral (Other) [8|80|0]
Current configuration: irq [11]
  io range:  min d020 max d020 align 0 len 20
  mem range: min f0400000 max f0400000 align 0 len 400000
  mem range: min f0800000 max f0800000 align 0 len 4000
1 configurations

Possible configuration #0: irq [11]
  io range:  min d020 max d020 align 0 len 20
  mem range: min f0400000 max f0400000 align 0 len 400000
  mem range: min f0800000 max f0800000 align 0 len 4000

Bus-dependent information:
vendor id: 80ee, device id: cafe

PCI bus, device #6: Bridge Device (Other) [6|80|0]
Current configuration: irq [9]
1 configurations

Possible configuration #0: irq [9]

Bus-dependent information:
vendor id: 8086, device id: 7113

Use of PCI and USB device databases helps identify some of the hardware, but there is stuff here that is harder to identify. Fortunately since this is a VM we know what some of the hardware should be.

sysinfo

System information...

For the real hardware we get:

$ sysinfo
Kernel name: kernel_intel built on: May 26 2000 12:27:12 version 0xf4249
1 WinChip C6 revision 0541 running at 200MHz (ID: 0x00000000 0x00000000)
CPU #0: CentaurHauls
        type 0, family 5, model 4, stepping 1, features 0x008000b5

197693440 bytes free      (used/max 70742016 / 268435456)
   13189 semaphores free (used/max     3195 /    16384)
    3978 threads free    (used/max      118 /     4096)
     999 teams free      (used/max       25 /     1024)

So some information about the processor (an IDT WinChip C6 200MHz), and the system memory (256 MiB).

For the VM things are a little less clear:

$ sysinfo
Kernel name: kernel_intel built on: May 26 2000 12:27:12 version 0xf4249
1 (unknown) revision 06e5 running at 1714MHz (ID: 0x00000000 0x00000000)
CPU #0: GenuineIntel
        type 0, family 6, model 14, stepping 5, features 0x178bfbbf
        Unknown cache descriptor 0x5a
        Data TLB: 4k-Byte Pages, 4-way set associative, 64 entries
        Unknown cache descriptor 0x55
        Unknown cache descriptor 0xe4
        Unknown cache descriptor 0xb2
        Unknown cache descriptor 0xf0
        Unknown cache descriptor 0x2c
        Unknown cache descriptor 0x21
        Unknown cache descriptor 0xca
        Unknown cache descriptor 0x09
        Serial number: 0001-06E5-0000-0000-0000-0000

470630400 bytes free      (used/max 66240512 / 536870912)
   13971 semaphores free (used/max     2413 /    16384)
    3999 threads free    (used/max       97 /     4096)
    1004 teams free      (used/max       20 /     1024)

The processor information is a bit messed up, but the memory information looks right (512 MiB).

Since BeOS 5 is from 2000, it is not surprising that it has difficulty with the CPUID (Wikipedia) information from the 2009 Intel i7-860 (Intel Core i7860 Processor 8M Cache 2.80 GHz Product Specifications). While a CPUID fix from 2005 is installed, it does not appear to expose the extended CPUID information used by this processor. This explains how the expected CPUID information of: family 6 (0x006), model 30 (0x1E), and stepping 5 (0x5), is reported as: family 6 (0x6), model 14 (0xE), stepping 5 (0x5).

Benchmark

For the 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.

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.

Real hardware: IDT WinChip C6 200 MHz

$ openssl speed md5
Doing md5 for 3s on 16 size blocks: 107168 md5's in 2846.20s
Doing md5 for 3s on 64 size blocks: 95346 md5's in 2808.50s
Doing md5 for 3s on 256 size blocks: 71313 md5's in 2795.40s
Doing md5 for 3s on 1024 size blocks: 36096 md5's in 2820.29s
Doing md5 for 3s on 8192 size blocks: 6310 md5's in 2791.43s
OpenSSL 0.9.7j 04 May 2006
built on: Sun May 14 16:17:08 CEST 2006
options:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) aes(partial) idea(int) blowfish(idx)
compiler: gcc -DOPENSSL_SYSNAME_BEOS -fPIC -DPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_BEOS -DOPENSSL_NO_KRB5 -DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall -DSHA1_ASM -DMD5_ASM -DRMD160_ASM
available timing options: TIMES TIMEB HZ=1000 [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                602.45      2172.74      6530.77        13.11k       18.52k
$ openssl speed rsa
Doing 512 bit private rsa's for 10s: 562 512 bit private RSA's in 9328.29s
Doing 512 bit public rsa's for 10s: 6445 512 bit public RSA's in 9345.04s
Doing 1024 bit private rsa's for 10s: 113 1024 bit private RSA's in 9346.39s
Doing 1024 bit public rsa's for 10s: 2241 1024 bit public RSA's in 9344.92s
Doing 2048 bit private rsa's for 10s: 20 2048 bit private RSA's in 9845.24s
Doing 2048 bit public rsa's for 10s: 681 2048 bit public RSA's in 9378.28s
Doing 4096 bit private rsa's for 10s: 3 4096 bit private RSA's in 9751.98s
Doing 4096 bit public rsa's for 10s: 193 4096 bit public RSA's in 9380.68s
OpenSSL 0.9.7j 04 May 2006
built on: Sun May 14 16:17:08 CEST 2006
options:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) aes(partial) idea(int) blowfish(idx)
compiler: gcc -DOPENSSL_SYSNAME_BEOS -fPIC -DPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_BEOS -DOPENSSL_NO_KRB5 -DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall -DSHA1_ASM -DMD5_ASM -DRMD160_ASM
available timing options: TIMES TIMEB HZ=1000 [sysconf value]
timing function used: times
                  sign    verify    sign/s verify/s
rsa  512 bits 16.598374s 1.449967s      0.1      0.7
rsa 1024 bits 82.711442s 4.169977s      0.0      0.2
rsa 2048 bits 492.261950s 13.771335s      0.0      0.1
rsa 4096 bits 3250.659000s 48.604560s      0.0      0.0

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

  • OpenSSL speed MD5 8,192 bytes: 18.52k
  • OpenSSL speed RSA 4,096 bytes sign/s: 0.0
  • OpenSSL speed RSA 4,096 bytes verify/s: 0.0

Hmmm... this looks a bit on the slow side... what about in the VM.

VirtualBox VM on an Intel i7 860 2.80 GHz

$ openssl speed md5
Doing md5 for 3s on 16 size blocks: 4579176 md5's in 2824.00s
Doing md5 for 3s on 64 size blocks: 3988617 md5's in 2839.21s
Doing md5 for 3s on 256 size blocks: 2814488 md5's in 2826.80s
Doing md5 for 3s on 1024 size blocks: 1311622 md5's in 2838.56s
Doing md5 for 3s on 8192 size blocks: 216074 md5's in 2837.72s
OpenSSL 0.9.7j 04 May 2006
built on: Sun May 14 16:17:08 CEST 2006
options:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) aes(partial) idea(int) blowfish(idx)
compiler: gcc -DOPENSSL_SYSNAME_BEOS -fPIC -DPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_BEOS -DOPENSSL_NO_KRB5 -DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall -DSHA1_ASM -DMD5_ASM -DRMD160_ASM
available timing options: TIMES TIMEB HZ=1000 [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                 25.94k       89.91k      254.88k      473.16k      623.77k
$ openssl speed rsa
Doing 512 bit private rsa's for 10s: 26442 512 bit private RSA's in 9425.71s
Doing 512 bit public rsa's for 10s: 312877 512 bit public RSA's in 9435.73s
Doing 1024 bit private rsa's for 10s: 5444 1024 bit private RSA's in 9435.00s
Doing 1024 bit public rsa's for 10s: 108652 1024 bit public RSA's in 9430.70s
Doing 2048 bit private rsa's for 10s: 918 2048 bit private RSA's in 9434.73s
Doing 2048 bit public rsa's for 10s: 32469 2048 bit public RSA's in 9449.11s
Doing 4096 bit private rsa's for 10s: 138 4096 bit private RSA's in 9455.03s
Doing 4096 bit public rsa's for 10s: 9261 4096 bit public RSA's in 9465.28s
OpenSSL 0.9.7j 04 May 2006
built on: Sun May 14 16:17:08 CEST 2006
options:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) aes(partial) idea(int) blowfish(idx)
compiler: gcc -DOPENSSL_SYSNAME_BEOS -fPIC -DPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_BEOS -DOPENSSL_NO_KRB5 -DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall -DSHA1_ASM -DMD5_ASM -DRMD160_ASM
available timing options: TIMES TIMEB HZ=1000 [sysconf value]
timing function used: times
                  sign    verify    sign/s verify/s
rsa  512 bits 0.356467s 0.030158s      2.8     33.2
rsa 1024 bits 1.733101s 0.086797s      0.6     11.5
rsa 2048 bits 10.277485s 0.291019s      0.1      3.4
rsa 4096 bits 68.514710s 1.022058s      0.0      1.0

Extracting the relevant figures:

  • OpenSSL speed MD5 8,192 bytes: 623.77k
  • OpenSSL speed RSA 4,096 bytes sign/s: 0.0
  • OpenSSL speed RSA 4,096 bytes verify/s: 1.0

As expected the i7 is faster, but the performance is still lower than expected.

Checking with other figures, both of the sample platforms are reporting about 1/1,000 of the expected values. This could be an implementation issue in BeOS or the version of OpenSSL, or it might be due to issues in the OpenSSL port to BeOS.

Thoughts

While BeOS is relatively dated it runs in a VM quite well, and offers an interesting option to play with alternative operating systems. For more serious work, the BeOS descendant Haiku would be a more appropriate option.

Further Sources

More information can be found at:


No comments: