page_title: Supercomputer operating systems
section_title: Context and overview
hierarchical_section_title: Supercomputer operating systems / Context and overview
caption_attribution_description: English: Overview of the Pleiades supercomputer built by SGI at NASA Ames Research Center in Mountain View, California.
context_page_description: Since the end of the 20th century, supercomputer operating systems have undergone major transformations, as fundamental changes have occurred in supercomputer architecture. While early operating systems were custom tailored to each supercomputer to gain speed, the trend has been moving away from in-house operating systems and toward some form of Linux, with it running all the supercomputers on the TOP500 list in November 2017.
  Given that modern massively parallel supercomputers typically separate computations from other services by using multiple types of nodes, they usually run different operating systems on different nodes, e.g., using a small and efficient lightweight kernel such as Compute Node Kernel or Compute Node Linux on compute nodes, but a larger system such as a Linux-derivative on server and input/output nodes.
context_section_description: In the early days of supercomputing, the basic architectural concepts were evolving rapidly, and system software had to follow hardware innovations that usually took rapid turns. In the early systems, operating systems were custom tailored to each supercomputer to gain speed, yet in the rush to develop them, serious software quality challenges surfaced and in many cases the cost and complexity of system software development became as much an issue as that of hardware.
  In the 1980s the cost for software development at Cray came to equal what they spent on hardware and that trend was partly responsible for a move away from the in-house operating systems to the adaptation of generic software. The first wave in operating system changes came in the mid 1980s, as vendor specific operating systems were abandoned in favor of Unix. Despite early skepticism, this transition proved successful.
  By the early 1990s, major changes were occurring in supercomputing system software. By this time, the growing use of Unix had begun to change the way system software was viewed. The use of a high level language (C) to implement the operating system, and the reliance on standardized interfaces was in contrast to the assembly language oriented approaches of the past. As hardware vendors adapted Unix to their systems, new and useful features were added to Unix, e.g., fast file systems and tunable process schedulers. However, all the companies that adapted Unix made unique changes to it, rather than collaborating on an industry standard to create "Unix for supercomputers". This was partly because differences in their architectures required these changes to optimize Unix to each architecture.
  Thus as general purpose operating systems became stable, supercomputers began to borrow and adapt the critical system code from them and relied on the rich set of secondary functions that came with them, not having to reinvent the wheel. However, at the same time the size of the code for general purpose operating systems was growing rapidly. By the time Unix-based code had reached 500,000 lines long, its maintenance and use was a challenge. This resulted in the move to use microkernels which used a minimal set of the operating system functions. Systems such as Mach at Carnegie Mellon University and ChorusOS at INRIA were examples of early microkernels.
  The separation of the operating system into separate components became necessary as supercomputers developed different types of nodes, e.g., compute nodes versus I/O nodes.  Thus modern supercomputers usually run different operating systems on different nodes, e.g., using a small and efficient lightweight kernel such as CNK or CNL on compute nodes, but a larger system such as a Linux-derivative on server and I/O nodes.
caption: The supercomputer center at NASA Ames
exif: {"Image Make": "Canon", "Image Model": "Canon EOS DIGITAL REBEL", "Image Orientation": "Horizontal (normal)", "Image XResolution": "180", "Image YResolution": "180", "Image ResolutionUnit": "Pixels/Inch", "Image Software": "Adobe Photoshop CS3 Macintosh", "Image DateTime": "2008:10:24 11:17:13", "Image YCbCrPositioning": "Centered", "Image ExifOffset": "232", "Thumbnail Compression": "JPEG (old-style)", "Thumbnail XResolution": "72", "Thumbnail YResolution": "72", "Thumbnail ResolutionUnit": "Pixels/Inch", "Thumbnail JPEGInterchangeFormat": "1134", "Thumbnail JPEGInterchangeFormatLength": "6239", "EXIF ExposureTime": "1/60", "EXIF FNumber": "4", "EXIF ISOSpeedRatings": "400", "EXIF ExifVersion": "0221", "EXIF DateTimeOriginal": "2008:10:08 13:23:26", "EXIF DateTimeDigitized": "2008:10:08 13:23:26", "EXIF ComponentsConfiguration": "YCbCr", "EXIF CompressedBitsPerPixel": "3", "EXIF ShutterSpeedValue": "193557/32768", "EXIF ApertureValue": "4", "EXIF ExposureBiasValue": "0", "EXIF MaxApertureValue": "118447/32768", "EXIF MeteringMode": "Pattern", "EXIF Flash": "Flash fired, auto mode", "EXIF FocalLength": "18", "EXIF FlashPixVersion": "0100", "EXIF ColorSpace": "sRGB", "EXIF ExifImageWidth": "3072", "EXIF ExifImageLength": "2048", "Interoperability InteroperabilityIndex": "R98", "Interoperability InteroperabilityVersion": "[48, 49, 48, 48]", "Interoperability RelatedImageWidth": "3072", "Interoperability RelatedImageLength": "2048", "EXIF InteroperabilityOffset": "984", "EXIF FocalPlaneXResolution": "768000/223", "EXIF FocalPlaneYResolution": "409600/119", "EXIF FocalPlaneResolutionUnit": "2", "EXIF SensingMethod": "One-chip color area", "EXIF FileSource": "Digital Camera", "EXIF CustomRendered": "Normal", "EXIF ExposureMode": "Auto Exposure", "EXIF WhiteBalance": "Auto", "EXIF SceneCaptureType": "Standard"}