Q1: I am having strange lockups with my new 6x86 GNU/Linux box. Any hints?
Q1a: While compiling large C sources with gcc (e.g. the Linux kernel), I keep getting this "signal 11" message and compilation stops. Is this caused by my 6x86 CPU?
A: Cyrix/IBM 6x86 CPUs will sometimes malfunction under GNU/Linux unless specific measures are taken for reliable operation:
Sometimes the SIG11 error message is a sign of an intermittent hardware failure and/or incorrect configuration of BIOS parameters. Check for adequate CPU cooling, DRAM timing parameters, and motherboard support for Cyrix 6x86 family CPUs. Avoid overclocking and use reliable SIMMs or DIMMs. Use a recent, quality motherboard and finally, check your power supply and motherboard CPU voltage settings.
Correctly setup set6x86 for your system, including the ARRs, and eventually apply my small Linux kernel patch.
Q2: How should I configure the Linux kernel for my 6x86 box? As a 486 or as a Pentium?
A: You should compile your kernel as Pentium.
Here is what the kernel documentation says:
This is the processor type of your CPU. It is used for optimizing purposes. In order to compile a kernel that can run on all CPU types (albeit not optimally fast), you can specify "386" here. If you specify "486" or "Pentium" or "PPro", then the kernel will run on 486 and Pentium (=586) and Pentium Pro (=686) CPUs. In rare cases, it can make sense to specify "Pentium" even if running a 486: the kernel will be smaller but slower. On the other hand, if you use a compiler before gcc 2.7 (say "gcc -v" to find out), then you have to say "386" or "486" here even if running on a Pentium or PPro machine. If you don't know what to do, say "386".
The kernel source code that gets compiled is almost identical for all x86 processors, but selecting the x86 processor type will send different flags to the gcc compiler, resulting in different optimization options, and as a consequence slightly different kernel sizes and execution speeds. The x86 assembler code used in the Linux kernel is (almost) the same whether one configures the kernel for 386, 486, Pentium or PPro processor types (the 386 is missing some bits in some registers used for paging, and there are some small differences in string handling and bit operations between the various x86 processors).
The info doc for gcc only describes -386 and -486 flags (there are no specific -Pentium or -PPro flags), so for the kernel config you may want to specify the Pentium option, and for all other programs use the same optimization options as those set by the Linux kernel compilation config routine(check the Makefile in /linux/arch/i386).
The optimization options that affect Pentium CPUs have to do with variable, loop and jump addresses alignment, and they affect 6x86 CPUs in a similar fashion, even though the Pentium and 6x86 have very different L1 cache implementations. Gcc does not use any special Pentium instructions, so 6x86 CPUs will execute any code compiled with gcc for the x86 family, no matter what compilation flags have been specified.
Conclusion: for all compilations on a Cyrix 6x86 CPU, use the -O2 option only. Don't use the -486 option, since it will cause excessive NOP padding on executables.
What the pros do: RedHat compiles its RPM packages with -O2 only. The modular kernel RPM packages as shipped are compiled with the CONFIG_M386 kernel configuration option; this is not optimal but will work on any x86 box, from a 386SX to a Pentium II.
Finally, I have seen some posts saying that for 6x86 chips one should compile the kernel as PPro rather than as a Pentium. It won't hurt, but I doubt it will make any difference, at least for kernel versions < 2.0.33.
Q3: I don't have the time to read the manuals, can you tell me how to quickly setup my Linux 6x86 box?
A: Install set6x86 and use the default settings in the file rc.cyrix. It will provide nearly optimal results.
The only extra thing to check is the video frame buffer address of your PCI video card and setup an ARR for it. This is easy to check, and there are two different ways to do it:
Now modify the last lines of rc.cyrix to match your video card's video ram address (see the 6x86 registers page), reboot and test.
Q4: I have a video card which specifies two (three, four, ...) different memory regions. How should I setup the ARRs?
A: Some video chipsets (e.g., Matrox Mystique) have memory-mapped I/O. Read the docs and try to determine exactly which memory address range is used for what, but don't setup an ARR for memory-mapped I/O. The linear video frame buffer is mapped as a single region, so you should setup a single ARR for your video card. Use Method 2 above to determine the LVFB address.
If you also happen to have a 3D accelerator with separate memory for textures, you should setup another ARR for the region specified.
Q5: How can I tell what kind of voltage regulator is on my motherboard (linear or switching)?
A: There are two ways: a) RTFM (Read The Fine Manual) or b) Open the CPU case and take a look at your motherboard: switching regulators use coils in their circuitry. If you see some copper coils near the CPU, your motherboard probably has a switching voltage regulator. Here is a photograph of an ASUS motherboard showing two coils next to the blue-anodized CPU heatsink, amid the small black-anodized switching transistor heatsinks:
Most older motherboards have linear voltage regulators. If you are going to buy a new Socket 7 motherboard, make sure it has a switching regulator.
Q6: I am planning to swap the motherboard/CPU in my Linux box. Should I go for a Cyrix/IBM 6x86, a Pentium MMX, an AMD K6 or a Pentium Pro?
A: It all depends on your budget and on what you want to do with your Linux box. These days you can't beat a Cyrix/IBM 6x86MX PR166 mounted on a good Intel HX or VIA VP-2 motherboard in the < $ 200 range, in terms of [price / Linux performance] ratio.
My next choice on the price scale (around $400) would be an AMD K6-233, again mounted on a quality HX or AMD-640 based motherboard. And above that a 566MHz Alpha 21164 (Microway is selling a complete high-quality Alpha box for $1.895, without monitor).
The new 0.25 micron K6 is also designed to consume much less power than the previous version, so overheating should not be a problem with this chip anymore. I have recently received a Linux Benchmarking Toolkit Report Form showing that the K6-233 is at least 20% faster than a 6x86MX-PR233.
TX-based motherboards are a good choice if you don't plan on installing > 64 MB of RAM in your Linux box (the TX chipset won't cache > 64 MB of RAM). A patch for Linux 2.1.55+ kernels has just appeared to enable the Ultra DMA EIDE interface on the TX chipset, which could speed things up if you have got an Ultra DMA compatible hard disk drive.
If you plan on doing heavy-duty floating-point work, nothing comes close to an Alpha box. On the other hand if you need SMP (Symmetric MultiProcessing) you'll have to go for a dual PPro or PII board. Top-notch performance, but it will cost you a small fortune in both cases. You may be lucky and find a dual PPro board + two PPros 256 Kb @ 180MHz for around $550, while these last (Intel is phasing out the PPro 180 MHz), but quite honestly in terms of price/performance ratio I would rather stick to a 6x86MX uniprocessor solution (which on uniprocessor machines, at 187.5MHz easily beats a 200MHz PPro on integer benchmarks). Also remember that Socket 8 and Slot 1 motherboards use proprietary technology.
Q7: My Cyrix/IBM 6x86 GNU/Linux box keeps crashing, but when I replace the CPU with an Intel Pentium chip, it works flawlessly. What should I do?
A: Improve cooling or get a newer, more stable motherboard.
I have setup an ISP with 4 Linux boxes, all of them with Cyrix 6x86 CPUs. I have three generations of 6x86 CPUs: a revision 3.7 Cyrix 6x86 PR166 with an original Cyrix fan, two IBM 6x86L PR200s with ball bearing fans, and an IBM 6x86MX PR200 also with a ball bearing fan. The office temperature got as high as 46 °C this summer, and it was never under 32 degrees for 90 continuous days. None of the machines crashed once, running Linux 2.0.29.
This suggests to me that the problems you are experiencing may be related either to the motherboard, or to the mechanical assembly of your CPU heatsink/fan. However, since you did not provide any details, I can't say anything more to guide you. I would need to know what chip revision and speed is on your machine (use f6x86 to check this out), motherboard brand, etc...
Things to check (details are important):
a) Enable the power down feature as described in this HOWTO.
b) Check that the fan is OK. Sleeve fans must be replaced every two years on average (those from Cyrix last longer, cheap ones may fail after one year).
c) Use a thin layer of silicon thermal compound between the CPU and heatsink. *Thin*, do not forget. Spread it over the CPU's golden metal surface, not on the grey ceramic part.
d) Use heatsinks/fans with a large metal clip fastened to the Socket 7. Those with small flimsy plastic fingers will not provide the necessary pressure for good thermal transfer and should *not* be used, even for Intel CPUs.
These are low cost solutions: a) is free, b) will cost you about $10 or 12 if you must replace the fan (I have recently paid $8 for an excellent Cooler Master ball-bearing fan, Part No. SB-TI5-5020C1), c) will cost you $2 for a tube of silicon thermal compound at any electronics retail shop, d) is like b). a) alone should go a long way towards solving these problems.
a) Do you know the brand of your motherboard ? Some brands are marginal, and will have problems handling 6x86 CPUs. I like ASUS motherboards (I use them for my two 6x86L PR200 boxes), but many other brands are good. The latest motherboards with TX chipsets and switching regulators can be found for around $ 120, not cheap, but not too expensive if you consider how neat those motherboards are. The new VIA VP-2 based motherboards can be found with up to 1Mb of cache, quite a neat feature for Linux, plus they support the Cyrix 6x86 linear burst mode. They cost about as much as the TX based ones, and so may be an even better deal considering their 1Mb of L2 cache.
b) Do not overclock the 6x86 chips. The only ones I found I could overclock without any problems are the 6x86L PR166s, overclocked to PR200s (i.e. from 2x66 MHz to 2x75 MHz), and this only on good motherboards. If you absolutely want to overclock these chips, go ahead but don't be surprised if you have to reboot periodically.
Q8: Is the 6x86MX really faster than the 6x86?
A: Yes, surprisingly it is up to 35% faster than the 6x86(L) running at the same core clock, on some Linux benchmarks.
You will find various benchmark results either on the News pages or on the 6x86MX page. Basically, the 6x86MX will do much better than the 6x86(L) on those benchmarks that use its 64Kb L1 cache most effectively (compared to the 6x86(L)'s 16Kb L1 cache). And of course the 6x86MX is available at higher clock rates than the 6x86(L).
Q9: ... Quake?
A: Quake's executable was hand-optimized for Pentiums, but even so you don't get decent performance without a good 3D accelerator.
Q10: What is the fastest, simplest way to determine my 6x86 processor revision?
A: A short command calling set6x86 will get the information we want. Type get6x86 0xFF. You will see something like Cyrix 6x86 config register, index 255 (=0xff) contains 34 (=0x22 =0b00100010). You can now check the table in the CPU id page for the corresponding DIR1 value, and determine your processor model and revision. Of course, I am assuming that you have set6x86 correctly compiled and installed.
If you are using set6x86 version 1.4, the 6x86_reg utility will identify your 6x86 family CPU and will also dump the relevant CPU configuration register settings.
Last updated on December 9, 1997.
Copyright 1997 Andrew D. Balsa