Monday 16 May 2022

RedHat Linux 6.2 (Zoot) on PCem Pentium 75

RedHat Linux 6.2 on PCem

X Windows desktop for Red Hat 6.2 (zoot) running on PCem

RedHat Linux

Initially established back in 1994, Red Hat (Wikipedia) is a commercial Linux vendor known for the RedHat Linux, Red Hat Enterprise Linux (RHEL) and Fedora Linux distributions.

RedHat Linux 6.2 was released in 2000, and supported i386 through early Pentium III systems (the Intel Pentium 4 didn't ship until November that year). So it is suitable for comparing our physical Intel Pentium system (tilia) and the PCem emulated equivalent.

PCem

The IBM PC and compatibles emulator PCem supports a range of PC systems, from the original Intel 8088 based IBM PC through to a early 2000s slot 1 based Pentium II system. This includes a couple of systems featuring the Intel 430fx chipset which makes them equivalent to our physical system.

Basing our desired system on tilia and the PCem devices, the target emulated hardware is:

MainboardIntel Advanced/ZP (Zappa); Intel Triton 82430FX PCIset aka. 430FX
CPUIntel Pentium 75
RAM72 MiB (128 MiB max.)
Floppy3.5" 2.88MB
StorageIDE Controller Intel 82371FB aka. PIIX, ATA-2 16 MB/s
IDE hard disk 2048 GB
ATAPI CD-ROM drive
VideoS3 Trio64 based VGA
Network10Mb/s ethernet ISA

PCem Installation & Configuration

Since we have the PCem installation from the Slackware 3.0 on PCem Pentium 75, where we looked at how an early Slackware behaved on similar configuration, refer to that post of details of the installation of PCem and the configuration of the emulated machine.

For this emulation the only differences are the name given to the configuration ("RedHat Linux 6 i430fx Pentium 75") and the file name used for the hard disk image (RedHat62-i430fx-P5.img).

RedHat Linux 6.2 Installation

  1. Fetch the RedHat Linux 6.2 CD-ROM image from the Red Hat Archive (https://archive.download.redhat.com/pub/redhat/linux/6.2/en/iso/i386/) or from Archive.org (e.g. https://archive.org/details/redhat-6.2_release), for installation we only need CD 1 ('zoot-i386.iso' or 'redhat-6.2-i386.iso'), the other CDs contains documentaion, sources and supplementary packages.
  2. Like the previous RedHat Linux 5.2 CD, the RedHat Linux 6.2 CD is bootable and will boot our machine if the option is enabled in the BIOS.
  3. So back to PCem...
    1. Start/load the machine we created
    2. Use the "CD-ROM">"Image..." menu to insert the CD-ROM ISO
    3. When first booted the machine will stop for the BIOS settings to be confirmed. Most of the settings will be fine, but the BIOS needs to be told about the floppy drive being 2.88MB and that we want the CD-ROM to be a boot device.
  4. The RedHat Linux installer is pretty good, so just follow the prompts.
    1. The mouse is a "Mouse Systems - Mouse (serial)"
    2. For the monitor I used "Generic Multisync" and set X Windows not to start on boot
    3. Remember to "Empty" the CD-ROM drive when the installer reboots the system.
  5. Once logged in:
    1. To get the NE2000 ISA network card to work:
      • as 'root' test that the 'ne' module finds the card with: # modprobe ne io=0x300 irq=10
      • if that worked (eth0: NE2000 found at 0x300, using IRQ 10), remove the loaded module with # rmmod ne
      • to set up automatic loading of the 'ne' module we need to configure /etc/modules.conf:
        • if /etc/modules.conf does not exist, but /etc/conf.modules does, rename the modules file: # mv /etc/conf.modules /etc/modules.conf
        • add the following to /etc/modules.conf:
          # NE2000 ISA ethernet adapter
          alias eth0 ne
          options eth0 io=0x300 irq=10
      • manually load the module with # modprobe eth0
      • now run the network configuration: # netconfig
      • for SLiRP networking select "Use dynamic IP configuration (BOOTP/DHCP)"
      • check the network configuration got an IP address with # /sbin/ifconfig -a
    2. if DNS lookups are not working, add your network DNS to /etc/resolv.conf as a nameserver
    3. the X server was configured during installation, if you need to reconfigure use Xconfigurator

With the installation complete and configured we can have a play... to start the desktop we can use the startx command.

System Information - RedHat Linux 6.2 (Zoot)

So what does RedHat Linux 6.2 (Zoot) for x86 have to say about this system...

uname

Operating system release information:

$ uname -a
Linux p-rh62 2.2.14-5.0 #1 Tue Mar 7 20:53:41 EST 2000 i586 unknown

A "Linux" kernel, on a node named "p-rh62", kernel release "2.2.14-5.0", version "#1 Tue Mar 7 20:53:41 EST 2000", on a "i586" machine, processor "unknown"

/proc/cpuinfo

Processor information:

$ cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 5
model		: 2
model name	: Pentium 75 - 200
stepping	: 4
cpu MHz		: 75.005420
fdiv_bug	: no
hlt_bug		: no
sep_bug		: no
f00f_bug	: yes
coma_bug	: no
fpu		: yes
fpu_exception	: no
cpuid level	: 1
wp		: yes
flags		: fpu vme pse tsc msr cx8
bogomips	: 74.75

The CPUID information is consistent with this being a second generation Intel Pentium processor (P54C), which is expected. But the BogoMips result looks too high. The configuration has the CPU at 75MHz, which normally gives a BogoMips result of around 30...

/proc/meminfo

Memory information:

$ cat /proc/meminfo 
        total:    used:    free:  shared: buffers:  cached:
Mem:  72888320 63299584  9588736  4435968 21774336 32739328
Swap: 70148096  2387968 67760128
MemTotal:     71180 kB
MemFree:       9364 kB
MemShared:     4332 kB
Buffers:      21264 kB
Cached:       31972 kB
BigTotal:         0 kB
BigFree:          0 kB
SwapTotal:    68504 kB
SwapFree:     66172 kB

So 72 MiB RAM, with about 36 MB of swap.

lspci, /proc/bus/pci/devices & /proc/pci

PCI device report:

$ /sbin/lspci
00:00.0 Host bridge: Intel Corporation 430FX - 82437FX TSC [Triton I]
00:07.0 ISA bridge: Intel Corporation 82371FB PIIX ISA [Triton I]
00:07.1 IDE interface: Intel Corporation 82371FB PIIX IDE [Triton I]
00:0d.0 VGA compatible controller: S3 Inc. 86c764/765 [Trio32/64/64V+]

The machine readable /proc/bus/pci/devices:

$ cat /proc/bus/pci/devices
0000	8086122d	0	00000000	00000000	00000000	00000000	00000000	00000000	00000000
0038	8086122e	0	00000000	00000000	00000000	00000000	00000000	00000000	00000000
0039	80861230	0	00000000	00000000	00000000	00000000	0000ffa1	00000000	00000000
0068	53338811	b	ff000000	00000000	00000000	00000000	00000000	00000000	00000000

And the obsolete /proc/pci, which was how to get PCI in older kernels:

$ cat /proc/pci
PCI devices found:
  Bus  0, device   0, function  0:
    Host bridge: Intel 82437 (rev 0).
      Medium devsel.  Master Capable.  Latency=66.  
  Bus  0, device   7, function  0:
    ISA bridge: Intel 82371FB PIIX ISA (rev 0).
      Medium devsel.  Fast back-to-back capable.  Master Capable.  No bursts.  
  Bus  0, device   7, function  1:
    IDE interface: Intel 82371FB PIIX IDE (rev 0).
      Medium devsel.  Fast back-to-back capable.  Master Capable.  Latency=66.  
      I/O at 0xffa0 [0xffa1].
  Bus  0, device  13, function  0:
    VGA compatible controller: S3 Inc. Trio32/Trio64 (rev 0).
      Medium devsel.  IRQ 11.  
      Non-prefetchable 32 bit memory at 0xff000000 [0xff000000].

In each case we get details of the same devices, but presented differently. Since the network card is on the ISA bus, we only see the mainboard chipset and the graphics card.

dmesg

System log:

$ dmesg
Linux version 2.2.14-5.0 (root@porky.devel.redhat.com) (gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)) #1 Tue Mar 7 20:53:41 EST 2000
Detected 75005420 Hz processor.
Console: colour VGA+ 80x25
Calibrating delay loop... 74.75 BogoMIPS
Memory: 71116k/73728k available (1084k kernel code, 416k reserved, 1048k data, 64k init, 0k bigmem)
Dentry hash table entries: 262144 (order 9, 2048k)
Buffer cache hash table entries: 131072 (order 7, 512k)
Page cache hash table entries: 32768 (order 5, 128k)
VFS: Diskquotas version dquot_6.4.0 initialized
CPU: Intel Pentium 75 - 200 stepping 04
Checking 386/387 coupling... OK, FPU using old IRQ 13 error reporting
Checking 'hlt' instruction... OK.
Intel Pentium with F0 0F bug - workaround enabled.
POSIX conformance testing by UNIFIX
PCI: PCI BIOS revision 2.10 entry at 0xfca21
PCI: Using configuration type 1
PCI: Probing PCI hardware
Linux NET4.0 for Linux 2.2
Based upon Swansea University Computer Society NET3.039
NET4: Unix domain sockets 1.0 for Linux NET4.0.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP
TCP: Hash tables configured (ehash 131072 bhash 65536)
Initializing RT netlink socket
Starting kswapd v 1.5 
Serial driver version 4.27 with MANY_PORTS MULTIPORT SHARE_IRQ enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A
ttyS01 at 0x02f8 (irq = 3) is a 16550A
pty: 256 Unix98 ptys configured
apm: BIOS version 1.1 Flags 0x03 (Driver version 1.9)
Real Time Clock Driver v1.09
RAM disk driver initialized:  16 RAM disks of 4096K size
PIIX: IDE controller on PCI bus 00 dev 38
PIIX: not 100% native mode: will probe irqs later
PIIX: neither IDE port enabled (BIOS)
PIIX: IDE controller on PCI bus 00 dev 39
PIIX: not 100% native mode: will probe irqs later
    ide0: BM-DMA at 0xffa0-0xffa7, BIOS settings: hda:pio, hdb:pio
    ide1: BM-DMA at 0xffa8-0xffaf, BIOS settings: hdc:pio, hdd:pio
hda: PCemHD, ATA DISK drive
hdc: PCemCD, ATAPI CDROM drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
ide1 at 0x170-0x177,0x376 on irq 15
hda: PCemHD, 2047MB w/256kB Cache, CHS=520/128/63
hdc: ATAPI 24X CD-ROM drive, 0kB Cache
Uniform CDROM driver Revision: 2.56
Floppy drive(s): fd0 is 2.88M
FDC 0 is a post-1991 82077
md driver 0.90.0 MAX_MD_DEVS=256, MAX_REAL=12
raid5: measuring checksumming speed
   8regs     :    82.296 MB/sec
   32regs    :    60.960 MB/sec
using fastest function: 8regs (82.296 MB/sec)
scsi : 0 hosts.
scsi : detected total.
md.c: sizeof(mdp_super_t) = 4096
Partition check:
 hda: hda1 hda2 < hda5 hda6 >
autodetecting RAID arrays
autorun ...
... autorun DONE.
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 64k freed
Adding Swap: 68504k swap-space (priority -1)
ne.c:v1.10 9/23/94 Donald Becker (becker@cesdis.gsfc.nasa.gov)
NE*000 ethercard probe at 0x300: ac de 48 88 bb aa
eth0: NE2000 found at 0x300, using IRQ 10.
cat uses obsolete /proc/pci interface

Here we see the results of hardware detection and initialization.

Benchmark

Since we have some information from an equivalent physical system (tilia), let's see how well the emulated system matches up let's run some benchmarks...

Note: the X Windows desktop has a fair amount of overhead, so benchmarking commands have been run from a text console.

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 and our BogoMips Results).

PCem system: Linux 2.2.14, RedHat Linux 6.2 (Zoot) for x86:

Calibrating delay loop... 74.75 BogoMIPS

Comparing our physical system and the emulated system:

LinuxtiliaPCem
DistributionKernelBogoMipsBogoMips
Slackware Linux 3.0Linux 1.2.1329.8074.98
RedHat Linux 5.2 (Apollo)Linux 2.0.3629.8074.75
RedHat Linux 6.2 (Zoot)Linux 2.2.1429.8074.75
Mandrake Linux 7.2 (Odyssey)Linux 2.2.17148.68?
RedHat Linux 7.3 (Valhalla)Linux 2.4.18148.68?

The PCem result looks to be close to the clock for the emulated processor, but for this kernel the BogoMips for an Intel Pentium should be about clock * 0.4. That is around 30.0, which matches the 29.80 results for tilia. The BogoMips result scale change in Linux 2.2.14 (which seems to have been patched out in the RedHat Linux 6.2 kernel), due to a change in CPU cache states before the BogoMips calculation, suggests a possible source of the difference. The close to clock result in PCem could be a side effect of how PCem implements processor caches.

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.

Note: old versions of OpenSSL are not recommended for actual use. If you want to run comparisons like this, and thus need to use an old release, see the OpenSSL site for back to 0.9.6, for even older releases back to 0.91 see http://ftp.mirrorservice.org/sites/ftp.wiretapped.net/pub/security/cryptography/libraries/ssl/openssl/.

RedHat Linux 6.2 (Zoot) for x86, with default compile OpenSSL 0.9.5a

An OpenSSL release from early 2000 has been chosen as being contemporary with RedHat Linux 6.2, and would be representative of the time.

$ openssl version
OpenSSL 0.9.5a 1 Apr 2000

Let's seen how MD5 and RSA do:

$ /usr/local/ssl/bin/openssl speed md5 rsa
Doing md5 for 3s on 8 size blocks: 304053 md5's in 3.00s
Doing md5 for 3s on 64 size blocks: 213247 md5's in 3.00s
Doing md5 for 3s on 256 size blocks: 106086 md5's in 3.00s
Doing md5 for 3s on 1024 size blocks: 35725 md5's in 3.00s
Doing md5 for 3s on 8192 size blocks: 4950 md5's in 3.00s
Doing 512 bit private rsa's for 10s: 393 512 bit private RSA's in 10.10s
Doing 512 bit public rsa's for 10s: 3936 512 bit public RSA's in 10.00s
Doing 1024 bit private rsa's for 10s: 73 1024 bit private RSA's in 10.50s
Doing 1024 bit public rsa's for 10s: 1285 1024 bit public RSA's in 10.00s
Doing 2048 bit private rsa's for 10s: 12 2048 bit private RSA's in 10.31s
Doing 2048 bit public rsa's for 10s: 378 2048 bit public RSA's in 10.00s
Doing 4096 bit private rsa's for 10s: 2 4096 bit private RSA's in 11.72s
Doing 4096 bit public rsa's for 10s: 106 4096 bit public RSA's in 10.70s
OpenSSL 0.9.5a 1 Apr 2000
built on: Sat Apr 16 09:39:48 BST 2022
options:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) idea(int) blowfish(idx) 
compiler: gcc -DTHREADS -D_REENTRANT -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall -DSHA1_ASM -DMD5_ASM -DRMD160_ASM
The 'numbers' are in 1000s of bytes per second processed.
type              8 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5                810.81k     4549.27k     9052.67k    12194.13k    13516.80k
                  sign    verify    sign/s verify/s
rsa  512 bits   0.0255s   0.0025s     39.3    393.6
rsa 1024 bits   0.1377s   0.0078s      7.3    128.5
rsa 2048 bits   0.8592s   0.0265s      1.2     37.8
rsa 4096 bits   5.8600s   0.0950s      0.2     10.5

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

  • OpenSSL speed MD5 8,192 bytes: 13,516.80k
  • OpenSSL speed RSA 4,096 bytes sign/s: 0.2
  • OpenSSL speed RSA 4,096 bytes verify/s: 10.5

So how does this compare to tilia?

OpenSSL results from tilia:

OSOpenSSL
Version
MD5
8,192 bytes
RSA
4,096 bytes
sign/s
RSA
4,096 bytes
verify/s
Linux 2.0.36
RedHat Linux 5.2
x86
0.9.2b
22 Mar 1999
12,391.77k0.211.2
Linux 2.2.14
RedHat Linux 6.2
x86
0.9.5a
1 Apr 2000
12,454.57k0.211.1
Linux 2.4.18
RedHat Linux 7.3
x86
0.9.6b [engine]
9 Jul 2001
6,075.73k0.14.5

From these results it seems the PCem system has slightly better performance for MD5 (approx. +8%), and slightly worse for RSA (approx. -5.5%), with OpenSSL 0.9.5a on Linux 2.2.14, compared to the physical hardware in tilia.

For reference a full run of all the methods provided by OpenSSL 0.9.5a on this PCem system gives results (openssl speed):

OpenSSL 0.9.5a 1 Apr 2000
built on: Sat Apr 16 09:39:48 BST 2022
options:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) idea(int) blowfish(idx) 
compiler: gcc -DTHREADS -D_REENTRANT -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall -DSHA1_ASM -DMD5_ASM -DRMD160_ASM
The 'numbers' are in 1000s of bytes per second processed.
type              8 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md2                 31.84k       87.10k      117.42k      128.34k      132.04k
mdc2               150.17k      155.03k      155.65k      155.65k      155.65k
md5                808.99k     4541.44k     9118.04k    12187.31k    13516.80k
hmac(md5)          307.84k     2122.67k     5800.62k    10231.81k    13167.27k
sha1               478.69k     2313.22k     4137.98k     5161.98k     5562.37k
rmd160             386.27k     1798.44k     3126.70k     3830.78k     4106.92k
rc4               6048.31k     8648.28k     9066.41k     9176.41k     9202.35k
des cbc           1405.45k     1570.33k     1590.36k     1595.39k     1597.44k
des ede3           532.08k      559.38k      562.43k      563.20k      563.37k
idea cbc           514.02k      555.69k      560.21k      561.83k      562.52k
rc2 cbc            488.25k      528.47k      533.25k      533.85k      535.21k
rc5-32/12 cbc     3457.66k     5018.30k     5220.44k     5273.26k     5286.57k
blowfish cbc      2602.71k     3200.49k     3281.32k     3302.06k     3309.57k
cast cbc          2273.69k     2720.64k     2778.79k     2793.13k     2798.93k
                  sign    verify    sign/s verify/s
rsa  512 bits   0.0255s   0.0025s     39.2    393.6
rsa 1024 bits   0.1377s   0.0078s      7.3    127.7
rsa 2048 bits   0.8600s   0.0264s      1.2     37.8
rsa 4096 bits   5.8600s   0.0951s      0.2     10.5
                  sign    verify    sign/s verify/s
dsa  512 bits   0.0248s   0.0302s     40.3     33.2
dsa 1024 bits   0.0734s   0.0896s     13.6     11.2
dsa 2048 bits   0.2454s   0.3015s      4.1      3.3

Thoughts

PCem works well for getting a reasonably close match to old hardware, the slight difference in performance is not going to be an issue in most cases.

The large difference in the BogoMips result (tilia: 29.80; PCem: 74.75) could be due to differences in processor state. In particular the effects of cache states are not handled in most emulators, and the BogoMips busy-doing-nothing method could have interactions with the dynamic recompiler used in PCem and the host CPU's instruction processing. The result coming out close to the emulated processor clock looks connected.

Further Sources


No comments: