RedHat Linux 6.2 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:
Mainboard | Intel Advanced/ZP (Zappa); Intel Triton 82430FX PCIset aka. 430FX |
---|---|
CPU | Intel Pentium 75 |
RAM | 72 MiB (128 MiB max.) |
Floppy | 3.5" 2.88MB |
Storage | IDE Controller Intel 82371FB aka. PIIX, ATA-2 16 MB/s |
IDE hard disk 2048 GB | |
ATAPI CD-ROM drive | |
Video | S3 Trio64 based VGA |
Network | 10Mb/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
- 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.
- 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.
- So back to PCem...
- Start/load the machine we created
- Use the "CD-ROM">"Image..." menu to insert the CD-ROM ISO
- 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.
- The RedHat Linux installer is pretty good, so just follow the prompts.
- The mouse is a "Mouse Systems - Mouse (serial)"
- For the monitor I used "Generic Multisync" and set X Windows not to start on boot
- Remember to "Empty" the CD-ROM drive when the installer reboots the system.
- Once logged in:
- 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
- if DNS lookups are not working, add your network DNS to /etc/resolv.conf as a nameserver
- 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:
Linux | tilia | PCem | |
---|---|---|---|
Distribution | Kernel | BogoMips | BogoMips |
Slackware Linux 3.0 | Linux 1.2.13 | 29.80 | 74.98 |
RedHat Linux 5.2 (Apollo) | Linux 2.0.36 | 29.80 | 74.75 |
RedHat Linux 6.2 (Zoot) | Linux 2.2.14 | 29.80 | 74.75 |
Mandrake Linux 7.2 (Odyssey) | Linux 2.2.17 | 148.68 | ? |
RedHat Linux 7.3 (Valhalla) | Linux 2.4.18 | 148.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:
OS | OpenSSL 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.77k | 0.2 | 11.2 |
Linux 2.2.14 RedHat Linux 6.2 x86 | 0.9.5a 1 Apr 2000 | 12,454.57k | 0.2 | 11.1 |
Linux 2.4.18 RedHat Linux 7.3 x86 | 0.9.6b [engine] 9 Jul 2001 | 6,075.73k | 0.1 | 4.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
- Pentium (original) - Wikipedia
- 242480-002_Pentium_Processor_Specification_Update_Mar95.pdf - Intel Pentium Processor Specification Update. Release Date: March, 1995
No comments:
Post a Comment