The following message is a courtesy copy of an article that has been posted to bit.listserv.ibm-main,alt.folklore.computers as well.
dcartwri...@ymail.com (David Cartwright) writes: > At Monsanto Europe in Brussels about 1976 I wrote some mods to VM/370 to > defeat Shadow Page Tables for V=R machines so we could run MVS under > VM/370 without a crippling overhead. I sent that code out into the world on > some (Waterloo?) VM Mods tape, but my own copy got dumped in some move > down the years. Wish I had it now, it would go really nicely on Herc. re: http://www.garlic.com/~lynn/2010d.html#79 LPARs: More or Less? the stuff done on csc/vm ... that leaked out to at&t, had been about the same time ... slightly eariler. the design of the shadow page tables followed the semantics for the hardware "look-aside buffer". the virtual machine has page tables that translate virtual addresses to what it thinks are real addresses. However, these are actually virtual addresses for the virtual machine. So when VM runs a virtual machine ... in virtual memory mode ... it is actually run with "shadow page tables". Shadow page table entries start out all invalid. The virtual machine immediately page faults, vm then has to look at the (virtual) page tables (in virtual machine) to translate from the virtual memory address to the virtual machine address ... vm then looks it its page table to translate from the virtual machine address to the real machine address. It is this "real machine address" that is placed into the shadow tables. The early, low & mid range 370s had a single STO stack ... everytime there was a change in the virtual address space pointer ... the hardware lookaside buffer was cleared and all entries invalidated. Early VM370's shadow table operation had similar design, single STO stack, everytime the virtual machine changed virtual address space pointer, all the shadow page table entries were cleared and invalidated. Moving from SVS to MVS significantly aggrevated this ... because MVS was changing virtual address space pointer at the drop of the hat (and vm370 was going thru massive overhead constantly invalidating the shadow page tables everytime MVS reloaded CR1). 370/168 had a 7-entry STO stack. There was a seven entry LRU queue of the most recently used STO values. Each hardware look-aside buffer entry had a 3-bit tag ... it was either one of the 7 currently valid STO entries ... or invalid. MVS constant reloading/changing CR1 was mitigated on real 168 with the 7-entry STO stack (loading new value into CR1 didn't do anything if the value was already one of the seven values in the STO staok). It wasn't until vm370 release 5 with HPO option that vm370 finally shipped something equivalent to multiple STO-stack (i.e. multiple shadow page tables being kept for a single virtual machine ... to try and minimize having to constantly clear all shadow page table entries every time MVS fiddled with CR1). The demise of FS saw a big need to get products back into the 370 product pipeline quickly. 3033 was such effort ... take the 370/168 logic and remap it to slightly faster chips. There was also some activity to introduce some purely MVS microcode performance assists on 3033 ... one such involved cross-memory services. One of the issues with 3033 and cross-memory services ... was the 3033 still had the 370/168 design with 7-entry STO stack ... and cross-memory services was significantly increasing the number of STOs being used ... overrunning the seven entries ... with corresponding big increase in look-aside buffer entry flushing (which netted out to worse performance; somewhat analogous to the shadow page table flushing that VM was constantly being forced to do). -- 42yrs virtualization experience (since Jan68), online at home since Mar1970 ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html