Vreemde Middeleeuwse Apparaten

De SMD-interface werd pas genormaliseerd als ANSI X3.91M-1982 in 1982, na vijf jaar werk, en werd later in 1987 herzien. Hoewel er in de jaren 80 andere opslagtechnologieën verschenen, zoals ESDI (gestandaardiseerd in 1984) of SCSI (gestandaardiseerd in 1986), maakten de schijven met de hoogste capaciteit allemaal gebruik van de SMD-interface.

Hardware-specificaties en fysieke eigenschappen

SMD-schijven gebruikten aanvankelijk platters van 11 inch, later van 8 inch. Met een nominale snelheid van 3600 rpm (60 omwentelingen per seconde), hoewel Fujitsu later afweek van de norm met enkele schijven die zelfs sneller draaiden op 3961 rpm, was er een aanzienlijke hoeveelheid stroom nodig om deze schijven op te spinnen.

Deze schijven waren bovendien extreem zwaar. Terwijl 8-inch modellen voorzichtig door één persoon gedragen konden worden, vereiste het verplaatsen van 11-inch schijven meestal het gebruik van een kar.

De SMD-interface

Het was dan ook geen verrassing dat Sun Microsystems zijn high-end servers en workstations leverde met SMD-schijven en Xylogics-controllers. In tegenstelling tot SCSI en modernere opslaginterfaces, heeft de SMD-interface aparte kabels voor commando's en data.

Afhankelijk van de controller wordt de commandokabel ofwel via alle schijven gerouteerd (daisy-chained), of is er per schijf één dedicated commandokabel die rechtstreeks met de controller is verbonden. De datakabels zijn onafhankelijk en verbinden de controller altijd direct met een schijf.

De overgang naar SCSI en de Sun-4/260

Tegen de tijd dat deze systemen in de kelders van hobbyisten terechtkwamen, waren er SCSI-schijven met een hoge capaciteit verschenen. In het begin van de jaren 2000 gebruikte ik bijvoorbeeld een Micropolis 1924 5,25" SCSI-schijf van 2 GB op mijn Sun-3/260. Voor zover ik weet, was de grootste SMD-schijfcapaciteit ooit ongeveer 1,25 GB, wat minder dan tweederde van die SCSI-capaciteit is.

Toen ik in het jaar 2000 begon te werken aan OpenBSD/sun3, had ik geen SMD-schijven en kon ik de Xylogics-drivers niet testen. Dit veranderde in de zomer van 2001, toen ik een buitengebruikgestelde Sun-4/260 kast vond, samen met een SMD-schijfkast van hetzelfde formaat.

Architectuur van de Sun-4/260

De 4/200-serie waren de eerste SPARC-systemen die door Sun werden verkocht. Afhankelijk van de grootte van de VME-behuizing waren dit:

  • De 4/260: in een grote deskside-kast van 12 slots op wielen.
  • De 4/280: een rackable versie die de helft van een 19-inch rack vulde en 16 VME-slots bood.

Het moederbord was in beide gevallen hetzelfde: een grote (9U) vierkante printplaat met een SPARC-processor van 16,67 MHz en een Floating-Point Unit (FPU). Het beschikte over twee seriële poorten, een gecombineerde toetsenbord- en muispoort voor een Sun Type 3-toetsenbord, een monochroom framebuffer met hoge resolutie (1600x1200) en een Ethernet-interface.

Er was geen on-board geheugen; geheugen werd geïnstalleerd als VME-kaarten die via de private "P2"-bus van Sun communiceerden met de CPU-kaart om de toegang te versnellen. Er konden tot vier geheugenkaarten worden geïnstalleerd (in varianten van 8, 16 of 32 MB), wat een maximaal fysiek geheugen van 128 MB mogelijk maakte.

Storage Controllers

Opslagcontrollers werden ook als VME-kaarten toegevoegd. De meeste systemen hadden ten minste een SCSI-controller in slot 7 voor de interne schijven:

  • De zeer beperkte, zelfgemaakte "Sun-2" sc-controller (kon geen parity-signalen correct afhandelen).
  • De iets betere, op NCR5380 gebaseerde "Sun-3" si-controller.

Meestal werd in slot 8 een tweede controller geplaatst: een SCSI-controller met externe aansluiting of een SMD-controller (soms zelfs twee). De Xylogics 7053 VME (9U) controller kon bijvoorbeeld vier schijven aansturen. Er bestond ook een kleinere 6U-versie (model 753) voor andere VME-systemen, zoals die van Silicon Graphics of Motorola.

Vanwege de subtiele verschillen tussen de VME-slots schreef Sun een specifieke handleiding over de voorkeurslocaties voor elke kaart en de configuratie van de VME-backplane jumpers voor correcte interrupt-aflevering: cardcage slot assignment and backplane configuration procedures.

Technische uitdagingen en bugfixing

Bij het opzetten van de machine bleek een van de geheugenkaarten defect. Van de twee SMD-schijven (met een brute capaciteit van 368 MB en een geformatteerde capaciteit van 280 MB) werkte er slechts één.

De Boot Block Bug

Na het installeren van OpenBSD trad er een probleem op: de machine bootte niet meer vanaf de schijf. De PROM-monitor gaf een cryptische melding: xy: error A.

Na analyse bleek dat het probleem zat in de grootte van de I/O-operaties:

  1. De eerste fase van de bootloader is beperkt tot 8 KB. Deze laadt de tweede fase van de bootloader.
  2. In juli 2003 werd de standaard block size voor filesystems gewijzigd van 8 KB naar 16 KB.
  3. De PROM-monitor heeft echter een eigen limiet voor I/O-operaties van precies 8216 bytes (iets meer dan 8 KB).
  4. Wanneer de bootloader probeerde een blok van 16 KB te lezen, faalde de operatie.

De oplossing was om de I/O-aanvragen van de bootloader te beperken tot deze limiet en meerdere kortere leesacties uit te voeren om de volledige data te verkrijgen.

Bad Sector Handling

Een ander probleem was de afhandeling van defecte sectoren. Bij moderne schijven gebeurt dit automatisch door de on-disk controller. Bij SMD-schijven is het echter de verantwoordelijkheid van de software-driver om de lijst met defecte sectoren te laden en te beheren.

In de Xylogics-drivers leidde dit tot foutmeldingen zoals Illegal head. Na onderzoek bleek dit een 19 jaar oude bug te zijn in de xy-driver, die aanwezig was sinds de eerste dag. Na het repareren hiervan kon ik ook disklabel -A implementeren voor automatische partitionering op SMD-schijven.

Fysieke degradatie en retirement

Een oude regel voor SMD-schijven is dat ze na fysiek transport opnieuw geformatteerd moeten worden, omdat de uitlijning van de koppen kan zijn verschoven. Omdat OpenBSD geen low-level format-programma heeft voor SMD, gebruikte ik SunOS 4.1 om dit te doen.

Ondanks dit bleef de CDC 9720-schijf defecte sectoren produceren en werd hij in april 2017 definitief buiten gebruik gesteld.

Anatomie van een SMD-schijf

Bij het demonteren van de schijf vielen enkele zaken op:

  • De platters hadden een oranje kleur (in de vroege jaren 90 werden deze grijs).
  • De chassisbodem bevat een mechanische rem. Wanneer de stroom uitvalt, ontlaadt een condensator zich, waardoor een veer de rem op de draaias laat vallen om de spoel snel te stoppen.
  • Volgens de handleiding kan de schijf bij het opstarten kortstondig tot 6 ampère aan stroom verbruiken.

De Ciprico Rimfire Controller

Een laatste project was het poorten van de SunOS Ciprico Rimfire-driver naar BSD. De Rimfire was aanzienlijk sneller dan de Xylogics-controller dankzij 512 KB cachegeheugen en intensief gebruik van read-ahead.

De Rimfire heeft een "Xylogics 451 compatibiliteitsmodus" (via de JSUN-jumper), waardoor hij kan booten via de Sun PROM, ook al ondersteunt de PROM de controller eigenlijk niet. Een belangrijke waarschuwing in de handleidingen is dat men alle schijven opnieuw moet formatteren bij het vervangen van een SMD-controller, omdat formaten controller-afhankelijk kunnen zijn.

Technische noot over SMD-geometrie

In tegenstelling tot SCSI definieert SMD geen manier voor een controller om de fysieke geometrie van een apparaat op te vragen. De Ciprico Rimfire probeert dit wel via een "Interrogate Disk"-commando door seek-commando's uit te voeren tot er een fout optreedt. Dit is echter zeer traag en faalt bij schijven met 1024 cilinders of meer, omdat de eerste revisie van de SMD-standaard slechts 10 bits voor cilindernummers toeliet.

Daarom schrijft het systeem na het formatteren de geometrie in de eerste sector (cilinder 0, head 0, sector 0), aangezien deze altijd toegankelijk is zonder dat de totale geometrie bekend hoeft te zijn.

Lijst van ondersteunde schijven (voorbeeld uit /etc/format.dat):

SchijftypeControllerCilindersHeadsSectorenRPM
Fujitsu-M2312KXY4505877323600
Fujitsu-M2333XY450/XD705382110673600
CDC EMD 9720XY450/XD7053114710483600
Hitachi DK815-10XY450/XD7053173515673600
NEC D2363XY450/XD705396427673600

Het bleek dat de Xylogics 451 en 7053 controllers zes van de acht ondersteunde schijven gemeen hadden. Of dit een technische of commerciële beperking was, blijft onduidelijk.