cesss wrote:
Are there any known details on programming the ASICs responsible for managing the CPUs in multiprocessor SGIs? I mean, details from an OS-development point of view (ie: ASIC commands needed to create a new process on a certain CPU, or for scheduling each CPU, etc...).
I don't mind if the details are for Challenge, for the Octane, or for NUMA or later MP boxes.
The purpose is that I feel curious about the protocol of commands used by SGI for controlling MP systems. I'm beginning a pet project which needs (simple) MP and maybe I could get some inspiration from older SGI designs...
If you are interested in experimenting a bit with multiprocessors, inter-processor interrupts etc. then Stanford's SimOS/MIPS may also be of interest. Its related to the FLASH architecture (
http://mprc.pku.edu.cn/mentors/training ... kuskin.pdf
) which many Stanford DASH people (and future VMware people) were involved in. Its a partial implementation though and probably about 50% of its commands and registers are no-ops. Documentation isn't great, but you do however have the source code to see how the 'hardware' works, making it possible to understand enough to do CPU startup/shutdown, interrupt setup, interprocessor interrupts, timers etc, and it doesn't take a lot of code - maybe 10% of what an x86/Intel MPS multiprocessor from that same era would have taken. If learning basic SMP operations is your goal, its probably a good starting point. For example, it would be a good exercise to try to port an existing OS like Linux to it.
Linux SMP isn't that hard to understand (though admittedly I haven't kept up with it for many years now, and it tends to grow in complexity each year). Even though they were obsolete, I found it easier to look at simpler early SMP architectures first (e.g. SPARC32, Alpha) - PROM and hardware handled many of the really low level details and so you can concentrate on understanding how stuff like how tracking and managing CPUs, IPIs, cache operations work. I certainly think diving straight into something like a high end NUMA architecture is going to be a more difficult approach.
Also, I'd recommend you get a really good grounding in cache/TLB coherency, atomic locking, memory ordering, and interrupts on multiprocessor systems first. Otherwise you will probably have to redesign all your code when it doesn't work as you expect on real hardware