Saturday, 21 May 2022

Mandrake Linux 7.2 (Odyssey) on PCem Pentium 75

Mandrake Linux 7.2 KDE desktop

Mandrake Linux

Initially established back in 1998, MandrakeSoft (Wikipedia) was a commercial Linux vendor known for the Mandrake Linux distribution (Wikipedia), after a merger with the Brazilian Linux distribution Conectiva and a dispute over rights to the "Mandrake" name, the company and their Linux distribution changed name from Mandrake to Mandriva.

Mandrake Linux is notable for many improvements to desktop Linux distributions, including improvements to hardware detection and handing, and the use of a graphical installation process. Mandrake was also a pioneer in optimizing their Intel x86 distribution for Pentium or higher processors.

Mandrake Linux 7.2 was released in 2000, and so was a competitor with Red Hat Linux 6.2, and supported Pentium 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 PCI
Network10Mb/s ethernet ISA or 100Mb/s ethernet PCI

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 ("Mandrake Linux 7 i430fx Pentium 75")
  • the file name used for the hard disk image (Mandrake72-i430fx-P5.img)
  • the NE2000 ISA Ethernet card has been swapped for a Realtek RTL8092AS based NE2000 PCI Ethernet card
  • addition of a Sound Blaster PCI 128 card

Mandrake Linux 7.2 Installation

  1. Fetch the Mandrake Linux 7.2 CD-ROM image from Archive.org (e.g. https://archive.org/details/mandrake-7.2-i386)
  2. The Mandrake Linux 7.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 Mandrake 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 Monitor, 1280x1024 @ 76 Hz"
    3. Remember to "Empty" the CD-ROM drive when the installer reboots the system.
  5. Once logged in:
    1. To always boot to console rather than into X Windows, edit /etc/inittab and set the default 'runlevel' to '3'
Mandrake Linux 7.2 console login

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

Mandrake Linux 7.2 KDE startup

System Information - Mandrake Linux 7.2 (Odyssey)

So what does Mandrake Linux 7.2 (Odyssey) for x86 have to say about this system...

uname

Operating system release information:

$ uname -a
Linux p-mdk7.home 2.2.17-21mdk #1 Thu Oct 5 13:16:08 CEST 2000 i586 unknown

A "Linux" kernel, on a node named "p-mdk7.home", kernel release "2.2.17-21mdk", version "#1 Thu Oct 5 13:16:08 CEST 2000", on a "i586" machine, processor "unknown"

For details of the Linux distribution, there are the distribution release files:

$ cat /etc/redhat-release
Linux Mandrake release 7.2 (Odyssey) for i586
$ cat /etc/mandrake-release
Linux Mandrake release 7.2 (Odyssey) for i586

So the Mandrake Linux 7.2 (Odyssey) for i586 (i.e. Pentium class systems). Mandrake Linux was initially based on Red Hat, and so has the Red Hat release file.

/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.005
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	: 149.50

The CPUID information is consistent with this being a second generation Intel Pentium processor (P54C), which is expected. The BogoMips result is at roughly twice clock, as expected for Linux 2.2.14 and later.

/proc/meminfo

Memory information:

$ cat /proc/meminfo
        total:    used:    free:  shared: buffers:  cached:
Mem:  75071488 47771648 27299840        0  3031040 31739904
Swap: 227041280        0 227041280
MemTotal:     73312 kB
MemFree:      26660 kB
MemShared:        0 kB
Buffers:       2960 kB
Cached:       30996 kB
BigTotal:         0 kB
BigFree:          0 kB
SwapTotal:   221720 kB
SwapFree:    221720 kB

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

/proc/bus/pci/devices & /proc/pci

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	00000000	00000000	00000000	00000000	00000000	00000000	00000000
0070	10ec8029	9	0000ff81	00000000	00000000	00000000	00000000	00000000	00000000
0078	12741371	a	0000ff01	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.  
  Bus  0, device  14, function  0:
    Ethernet controller: Realtek 8029 (rev 0).
      Medium devsel.  IRQ 9.  
      I/O at 0xff80 [0xff81].
  Bus  0, device  15, function  0:
    Multimedia audio controller: Ensoniq ES1371 (rev 2).
      Fast devsel.  IRQ 10.  Master Capable.  No bursts.  Min Gnt=12.Max Lat=128.
      I/O at 0xff00 [0xff01].

In each case we get details of the same devices, but presented differently.

dmesg

System log:

$ dmesg
Linux version 2.2.17-21mdk (chmou@no.mandrakesoft.com) (gcc version 2.95.3 19991030 (prerelease)) #1 Thu Oct 5 13:16:08 CEST 2000
Detected 75005 kHz processor.
Console: colour VGA+ 80x25
Calibrating delay loop... 149.50 BogoMIPS
Memory: 70896k/73728k available (1136k kernel code, 416k reserved, 1152k data, 128k init, 0k bigmem)
Dentry hash table entries: 16384 (order 5, 128k)
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, last bus=0
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.13)
Real Time Clock Driver v1.09
RAM disk driver initialized:  16 RAM disks of 4096K size
Uniform Multi-Platform E-IDE driver Revision: 6.30
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
PIIX: IDE controller on PCI bus 00 dev 38
PIIX: chipset revision 0
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: chipset revision 0
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 52X CD-ROM drive, 0kB Cache
Uniform CD-ROM driver Revision: 3.11
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    :    64.389 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:hda: lost interrupt
 hda1 hda2 < hda5 hda6 >
autodetecting RAID arrays
autorun ...
... autorun DONE.
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 128k freed
Adding Swap: 221720k swap-space (priority -1)
ne2k-pci.c:vpre-1.00e 5/27/99 D. Becker/P. Gortmaker http://cesdis.gsfc.nasa.gov/linux/drivers/ne2k-pci.html
ne2k-pci.c: PCI NE2000 clone 'RealTek RTL-8029' at I/O 0xff80, IRQ 9.
eth0: RealTek RTL-8029 found at 0xff80, IRQ 9, AC:DE:48:88:BB:AA.
parport0: PC-style at 0x3bc [SPP]
parport_probe: failed
parport0: no IEEE-1284 device present.
lp0: using parport0 (polling).
isapnp: No Plug & Play device found
es1371: version v0.22 time 13:20:20 Oct  5 2000
es1371: found chip, vendor id 0x1274 device id 0x1371 revision 0x02
es1371: found es1371 rev 2 at io 0xff00 irq 10
es1371: features: joystick 0x0
PCI: Increasing latency timer of device 00:78 to 64
es1371: codec vendor     (0x000000) revision 0 (0x00)
es1371: codec features none
es1371: stereo enhancement: no 3D stereo enhancement
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.17, Mandrake Linux 7.2 (Odyssey) for x86:

Calibrating delay loop... 149.50 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.68149.50
RedHat Linux 7.3 (Valhalla)Linux 2.4.18148.68?

With the Linux 2.2.17 kernel used in Mandrake Linux 7.2 we see the change to BogoMips result scaling, due to a change in CPU cache states before the BogoMips calculation, that gives an approximately double the processor clock result for Pentium and later processors.

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/.

Mandrake Linux 7.2 (Odyssey) for x86, , with packaged OpenSSL 0.9.5a

$ openssl version
OpenSSL 0.9.5a 1 Apr 2000

Let's seen how MD5 and RSA do:

$ openssl speed md5 rsa
Doing md5 for 3s on 8 size blocks: 283971 md5's in 3.00s
Doing md5 for 3s on 64 size blocks: 200865 md5's in 3.00s
Doing md5 for 3s on 256 size blocks: 103511 md5's in 3.00s
Doing md5 for 3s on 1024 size blocks: 35330 md5's in 3.00s
Doing md5 for 3s on 8192 size blocks: 4942 md5's in 3.00s
Doing 512 bit private rsa's for 10s: 423 512 bit private RSA's in 10.00s
Doing 512 bit public rsa's for 10s: 4131 512 bit public RSA's in 10.00s
Doing 1024 bit private rsa's for 10s: 76 1024 bit private RSA's in 10.40s
Doing 1024 bit public rsa's for 10s: 1311 1024 bit public RSA's in 10.00s
Doing 2048 bit private rsa's for 10s: 12 2048 bit private RSA's in 10.80s
Doing 2048 bit public rsa's for 10s: 383 2048 bit public RSA's in 10.20s
Doing 4096 bit private rsa's for 10s: 2 4096 bit private RSA's in 11.60s
Doing 4096 bit public rsa's for 10s: 106 4096 bit public RSA's in 10.30s
OpenSSL 0.9.5a 1 Apr 2000
built on: Sun Oct  1 01:53:22 CEST 2000
options:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) idea(int) blowfish(idx) 
compiler: gcc -fPIC -DTHREADS -D_REENTRANT -fPIC -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -pipe -s -march=pentium -ffast-math -fexpensive-optimizations -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                757.26k     4285.12k     8832.94k    12059.31k    13494.95k
                  sign    verify    sign/s verify/s
rsa  512 bits   0.0236s   0.0024s     42.3    413.1
rsa 1024 bits   0.1321s   0.0076s      7.6    131.1
rsa 2048 bits   0.8400s   0.0262s      1.2     38.2
rsa 4096 bits   5.8000s   0.0946s      0.2     10.6

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

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

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.2.17
Mandrake Linux 7.2
x86
0.9.5a
1 Apr 2000
12,208.81k0.210.8
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. +10.5%), and slightly worse for RSA (approx. -1.8%), with OpenSSL 0.9.5a on Linux 2.2.17, compared to the physical hardware in tilia.

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.

Further Sources


Supplemental: OpenSSL 0.9.5a speed

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: Sun Oct  1 01:53:22 CEST 2000
options:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) idea(int) blowfish(idx) 
compiler: gcc -fPIC -DTHREADS -D_REENTRANT -fPIC -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -pipe -s -march=pentium -ffast-math -fexpensive-optimizations -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                 61.36k      171.67k      232.36k      255.66k      263.12k
mdc2               139.34k      145.17k      145.92k      146.09k      146.00k
md5                756.72k     4280.92k     8847.62k    12062.38k    13494.95k
hmac(md5)          289.67k     1999.17k     5565.61k    10043.39k    13126.31k
sha1               463.42k     2250.84k     4090.97k     5140.82k     5559.64k
rmd160             373.86k     1754.03k     3093.08k     3821.91k     4101.46k
rc4               5871.13k     8600.02k     9052.59k     9171.63k     9202.35k
des cbc           1409.06k     1570.65k     1590.44k     1595.39k     1597.44k
des ede3           535.73k      559.77k      562.35k      563.20k      563.37k
idea cbc           537.38k      584.92k      590.59k      591.19k      592.55k
rc2 cbc            523.79k      570.30k      575.74k      577.19k      578.90k
rc5-32/12 cbc     3471.27k     5019.82k     5218.05k     5268.82k     5286.57k
blowfish cbc      2614.39k     3202.22k     3281.66k     3301.38k     3309.57k
cast cbc          2284.33k     2720.90k     2779.05k     2793.47k     2796.20k
                  sign    verify    sign/s verify/s
rsa  512 bits   0.0237s   0.0024s     42.2    411.6
rsa 1024 bits   0.1322s   0.0076s      7.6    131.7
rsa 2048 bits   0.8400s   0.0261s      1.2     38.3
rsa 4096 bits   5.8000s   0.0944s      0.2     10.6
                  sign    verify    sign/s verify/s
dsa  512 bits   0.0240s   0.0290s     41.7     34.5
dsa 1024 bits   0.0716s   0.0877s     14.0     11.4
dsa 2048 bits   0.2433s   0.2947s      4.1      3.4


No comments: