www.fabiankeil.de/blog-surrogat/2006/03/22/freebsd-auf-pentium-90.html
FreeBSD 6.1-PRERELEASE auf Pentium 90
   ![Casablanca [Foto: 14-Zoll-Monitor angeschlossen an beiges Rechnergehäuse aus der 486er-Generation]](p90-mit-freebsd-6.1-400x623.jpg) Vor drei oder vier Jahren habe ich einen alten Pentium-Rechner geschenkt bekommen. Anfangs wurde
   er kurz zum CD-Testen mit WSES genutzt, anschließend staubte
   er als Bücherständer vor sich hin.
 
   Vor drei oder vier Jahren habe ich einen alten Pentium-Rechner geschenkt bekommen. Anfangs wurde
   er kurz zum CD-Testen mit WSES genutzt, anschließend staubte
   er als Bücherständer vor sich hin.
  
Die Bücher stehen inzwischen im Regal, der Ausfall des File-Servers bot Gelegenheit den P90 als Ersatz zu testen.
Die Installation von CD fiel flach, das BIOS bootet nur von Festplatte oder Diskette, der Installationskernel scheint außerdem mit den 16 Megabyte Arbeitsspeicher nicht auszukommen: nach dem Einlesen der dritten Boot-Diskette gibt es einen Neustart ohne Fehlermeldung.
Als nächstes setze ich die Boot-Festplatte des Samba-Server ein, der Bootvorgang scheiterte jedoch an der I686-Optimierung: den Kernel hatte ich ohne Unterstützung für Prozessoren unterhalb des Celerons kompiliert.
Um die FreeBSD-Installation auf dem P90 startfähig zu machen wurde die Festplatte in Africanqueen eingebaut und vom über NFS eingebundenen, deutlich schnelleren, ThinkPad neu bespielt.
   
 und make buildworld
 wurde auf dem ThinkPad erledigt, Africanqueen war für
   make buildkernel KERNCONF=CASABLANCA
    MODULES_OVERRIDE=
,
   mergemaster -D /mnt/samba-platte
 und make installworld DESTDIR=/mnt/samba-platte
 zuständig.
  make installkernel
    KERNCONF=CASABLANCA DESTDIR=/mnt/samba-platte MODULES_OVERRIDE=
Aufgrund des mageren Arbeitsspeichers wurde auf Module verzichtet und der Kernel etwas zusammengestutzt. Momentan ist er 2,9 Megabyte groß, etwa die Hälfte des Standardkernels (ohne Module).
Als dauerhafter File-Server wäre Casablanca dann doch etwas lahm, selbst das Hochladen einer Datei über FTP lastet den Prozessor aus, was auch daran liegen dürfte, dass die Festplatte nur über PIO angesprochen werden kann.
ftp> put anonymos-shmoo.iso local: anonymos-shmoo.iso remote: anonymos-shmoo.iso 229 Entering Extended Passive Mode (|||61941|) 150 Opening BINARY mode data connection for 'anonymos-shmoo.iso'. 100% |*************************************| 549 MB 785.47 KB/s 00:00 ETA 226 Transfer complete. 575774720 bytes sent in 11:56 (785.25 KB/s)
   Die eingebaute Gigabit-Netzwerkkarte könnte problemlos durch eine kleinere
   Version ersetzt werden, auch netperf wird vom Prozessor limitiert.
   Dass sich TCP-Prüfsummen nicht selbst
   überprüfen wird ebenfalls deutlich:
  
fk@TP51 ~ $/usr/local/netperf/netperf -H 192.168.5.40 TCP STREAM TEST to 192.168.5.40 Recv Send Send Socket Socket Message Elapsed Size Size Size Time Throughput bytes bytes bytes secs. 10^6bits/sec 65536 32768 32768 10.01 25.03 fk@TP51 ~ $/usr/local/netperf/netperf -H 192.168.5.40 -t UDP_STREAM UDP UNIDIRECTIONAL SEND TEST to 192.168.5.40 Socket Message Elapsed Messages Size Size Time Okay Errors Throughput bytes bytes secs # # 10^6bits/sec 9216 9216 10.01 75925 900366 559.48 41600 10.01 36 0.27
   Der Versuch den ThinkPad von Casablanca aus über mount_nfs
   einzubinden führte reproduzierbar zu einer Panik:
  
   
Fatal trap 18: integer divide fault while in kernel mode
instruction pointer     = 0x20:0xc0579391
stack pointer           = 0x28:0xc31a68c4
frame pointer           = 0x28:0xc31a6964
code segment            = base 0x0, limit 0xfffff, type 0x1b
                        = DPL 0, pres 1, def32 1, gran 1
processor eflags        = interrupt enabled, resume, IOPL = 0
current process         = 478 (mount_nfs)
panic: from debugger
Uptime: 3m23s
Dumping 15 MB (2 chunks)
  chunk 0: 1MB (159 pages) ... ok
  chunk 1: 15MB (3840 pages)
#0  doadump () at pcpu.h:165
165     pcpu.h: No such file or directory.
        in pcpu.h
(kgdb) bt
#0  doadump () at pcpu.h:165
#1  0xc04d3011 in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:402
#2  0xc04d32d8 in panic (fmt=0xc0620fe8 "from debugger") at /usr/src/sys/kern/kern_shutdown.c:558
#3  0xc04510c1 in db_panic (addr=-1068002415, have_addr=0, count=-1, modif=0xc31a6718 "")
    at /usr/src/sys/ddb/db_command.c:438
#4  0xc0451058 in db_command (last_cmdp=0xc066f244, cmd_table=0x0, aux_cmd_tablep=0xc063e2b8, aux_cmd_tablep_end=0xc063e2bc)
    at /usr/src/sys/ddb/db_command.c:350
#5  0xc0451120 in db_command_loop () at /usr/src/sys/ddb/db_command.c:458
#6  0xc0452d2d in db_trap (type=18, code=0) at /usr/src/sys/ddb/db_main.c:221
#7  0xc04ebabf in kdb_trap (type=18, code=0, tf=0xc31a6884) at /usr/src/sys/kern/subr_kdb.c:473
#8  0xc060be64 in trap_fatal (frame=0xc31a6884, eva=0) at /usr/src/sys/i386/i386/trap.c:827
#9  0xc060b990 in trap (frame=
      {tf_fs = 8, tf_es = 40, tf_ds = 40, tf_edi = -1057177600, tf_esi = -1058837120, tf_ebp = -1021679260, tf_isp = -1021679 
440, tf_ebx = -1055928320, tf_edx = 0, tf_ecx = 0, tf_eax = 2113536, tf_trapno = 18, tf_err = 0, tf_eip = -1068002415, tf_cs  
= 32, tf_eflags = 66118, tf_esp = -1067065632, tf_ss = -1021679392}) at /usr/src/sys/i386/i386/trap.c:631
#10 0xc05fddea in calltrap () at /usr/src/sys/i386/i386/exception.s:139
#11 0xc0579391 in mountnfs (argp=0xc31a6a30, mp=0xc0fcc000, nam=0xc0f08610, hst=0xc31a69d0 "127.0.0.1:/usr/home", 
    vpp=0xc31a6984, cred=0xc0f69a80) at /usr/src/sys/nfsclient/nfs_vfsops.c:826
#12 0xc0579222 in nfs_mount (mp=0xc0fcc000, td=0xc0e36d80) at /usr/src/sys/nfsclient/nfs_vfsops.c:745
#13 0xc0524974 in vfs_domount (td=0xc0e36d80, fstype=0xc10fb990 "\002", fspath=0xc0f086c0 "/mnt", fsflags=0, 
    fsdata=0xc0f08700) at /usr/src/sys/kern/vfs_mount.c:882
#14 0xc05241d2 in vfs_donmount (td=0xc0e36d80, fsflags=0, fsoptions=0xc31a6c08) at /usr/src/sys/kern/vfs_mount.c:640
#15 0xc05269e0 in kernel_mount (ma=0xc0f08860, flags=0) at pcpu.h:162
#16 0xc0579269 in nfs_cmount (ma=0xc0f08860, data=0xbfbfece0, flags=0, td=0xc0e36d80)
    at /usr/src/sys/nfsclient/nfs_vfsops.c:772
#17 0xc05243b6 in mount (td=0xc0e36d80, uap=0xc31a6d04) at /usr/src/sys/kern/vfs_mount.c:703
#18 0xc060c1b3 in syscall (frame=
      {tf_fs = 59, tf_es = 59, tf_ds = 59, tf_edi = -1077940598, tf_esi = -1077941024, tf_ebp = -1077940904, tf_isp = -102167
8236, tf_ebx = -1077942048, tf_edx = 5, tf_ecx = 4, tf_eax = 21, tf_trapno = 12, tf_err = 2, tf_eip = 671842411, tf_cs = 51,  
tf_eflags = 582, tf_esp = -1077942116, tf_ss = 59}) at /usr/src/sys/i386/i386/trap.c:981
#19 0xc05fde3f in Xint0x80_syscall () at /usr/src/sys/i386/i386/exception.s:200
#20 0x00000033 in ?? ()
Previous frame inner to this frame (corrupt stack?)
  
  
   Das Problem ist Zeile 826 in /usr/src/sys/nfsclient/nfs_vfsops.c:
  
nmp->nm_wcommitsize = hibufspace / (desiredvnodes / 1000);
   desiredvnodes ist als int deklariert, für den Wert der Division
   gilt damit das Selbe. Der Wert von desiredvnodes hängt von der Hardware ab und wird vom Kernel
   bestimmt. Er kann über sysctl kern.maxvnodes überprüft (und manipuliert) werden.
  
   Auf dem ThinkPad wird er auf 35628 gesetzt, auf Casablanca auf bescheidene 946.
   Beim Ergebnis von 946 / 1000 fallen die Nachkommastellen weg,
   das Ergebnis ist 0 – die folgende Division führt zur Panik.  
  
Die Fehlersuche und -lösung hat mich Stunden gekostet. Das kommt davon, wenn man nur bei Problemen im Quelltext wühlt.
Mit dem Patch funktioniert auch das Einbinden des Laptops, für zukünftige Updates werde ich die Festplatte nicht mehr ausbauen müssen, etwas Geduld ist jedoch erforderlich.
   Auch wenn das Kompilieren von Kernel und Userland dem Laptop überlassen wird, braucht
   Casablanca 48 Minuten für make installworld, der ThinkPad erledigt das
   in etwa 3 Minuten.
  
   Wie erwartet ist die Leistung des Pentium 90 für einen File-Server etwas mager,
   bleibt zu überprüfen, wie er sich als Firewall schlagen wird. PF
   ist bereits im Kernel vorhanden und für den Internetzugang wird kein Gigabit-Durchsatz
   benötigt.