回顧歷史夢幻處理器:IBM RISC指令集的統一大業(80年代後期至今)

eetop半導體社區 發佈 2022-09-29T00:41:23.945960+00:00

2018 年7 月26日,IBM 發表專文〈IBM i 30 Years: From Silver Lake to IBM i – A POWERful Story of Evolution〉,慶賀代號「Silver Lake」的AS/40030 歲生日。

本篇文章將帶你了解 :

  • IBM 的商用電腦產品線
  • 金星(System/36)和火星(System/38)相撞的傳奇故事
  • IBM 為何被迫分開銷售硬體和軟體?
  • IBM RISC 指令集的「統一大業」

2018 年7 月26日,IBM 發表專文〈IBM i 30 Years: From Silver Lake to IBM i – A POWERful Story of Evolution〉,慶賀代號「Silver Lake」(銀湖)的AS/400(Application System/400)30 歲生日。這不僅是虛擬化應用在商業市場首次重大成功,前身System/38 不僅是AS/400 的基礎,更是「Co-Designed」(軟硬體協同)虛擬機的真正源頭。

說到「軟硬體設計做雙向最佳化,將軟體視為硬體一部分」讓虛擬機效能更好、更容易實現跨指令集的虛擬化技術,並非起源於全美達(Transmeta)的Code Morphing(2000 年)、俄國人Elbrus 2K的動態轉譯(2005 年)與IBM 的DAISY 研究案(1997 年),而是更古老的1980 年代。一如往昔,一提到藍色巨人IBM 的往事,即可預期又是一場華麗壯大的計算機工業發展史與先進計算機技術的前奏。

▲「Co-Designed」(軟硬體協同設計)虛擬機精神在「將軟體視為硬體一部分」,兩者互相最佳化以實現更好的效率與跨指令集兼容性。

IBM 家大業大,也很理所當然生出一堆滿足不同市場需要的商用電腦產品線,不限大型主機、工作站和個人電腦,也曾推出琳琅滿目的中端商用系統,如System/36、System/38(當時獨特的48 位元定址與虛擬指令集)、IBM 8100(分散式資訊處理系統)、Series/1(與DEC PDP-11 對打的16 位元迷你電腦) 和IBM 4300(System/370 大型主機的低成本替代品)。

1980 年代初期,DEC的VAX在市場極受歡迎,IBM高層擔憂這些互不兼容的產品線導致力量分散,難以與其對抗。因此IBM 在1982 年啟動極具野心的「Fort Knox」計劃,企圖將上述所有CISC(複雜指令集電腦)架構產品線,統合至以IBM 801為地基、代號Iliad 的RISC(精簡指令集電腦)處理器,且因維持回溯兼容性,還得將以上五個架構的作業系統統移植到新處理器。

事實證明這些看似「高瞻遠矚」的遠大目標,都遠超出IBM 的能力所及範圍,不僅遭遇多次延誤,隨著計劃演進和變更,先放棄對應IBM 8100和Series/1 的計劃。更麻煩的是,IBM 發現不針對單一作業系統大幅更動Iliad 處理器,就難移植現有作業系統與應用程式,結果變成需「外掛」支持特定作業系統的輔助處理器,到頭來反客為主,Iliad 處理器淪為配角,徹底違背Fort Knox 初衷,導致IBM 在1985 年取消計劃。

▲ IBM 改弦易轍,將中端計算機分成System/36 與System/38 以閃避美國司法部控訴,等風頭過了再整合成AS/400,充分印證簡單道理:逃避不但不可恥且很有用。

接著就是IBM「金星(System/36)和火星(System/38)相撞」的傳奇故事:Silver Lake 計劃。不過在這之前,筆者得替各位複習時代背景:1970 年代,美國司法部控訴IBM 用「非法行為」淘汰競爭對手,那時IBM 正打算整合System/370、4300、System/32、System/34 和System/38。

想當然,假如樹大招風的IBM 真這樣干,無論成功與否還是當個「簡報王」,87% 機率又會上演一出「本來想買CDC6600 的潛在客戶會把預算留起來,等待完美無缺的System/360 Model 92 再掏錢,變相製造不公平競爭」的萬年爛戲,屆時IBM再想洗白都是不可能的任務。

所以當美國司法部提訟時,IBM 為了避風頭,決定將中端計算機系統分成兩個系列:適用大企業並「象徵未來技術方向」的System/38(1978 年10 月24 日)和繼承System/32 既有小公司用戶「重視客戶解決方案」的System/36(1983 年5 月16 日)。整並System/370 與4300 大型主機?想都不敢想,即使今天也做不到。

直到1980 年代後期,司法部撤銷訴訟後,IBM 才敢「光明正大」再將System/38 和System/36,合併為本期文章的主角AS/400,林林總總,一切盡在不言中。

那代號「Pacific」(太平洋)、耗費八年開發、身為IBM 規模排名前三或前四大專案(第一名永遠是偉大的System/360)的System/38,究竟有哪些獨樹一幟的創新技術?主要有四點:

  • 目標過渡到「全固態存儲器」並將主存儲器和磁碟合而為一的單級儲存(Single-level Storage)虛擬存儲器結構。
  • 物件(Object)化存儲器定址。
  • 使用兩種「微碼」(Microcode)實作軟體模擬轉譯層。
  • 透過虛擬指令集(MI,Machine Interface) 實現指令集架構抽象化。

▲「完全物件導向化」的AS/400 採用物件化存儲器定址,應用程式透過「名稱」存取不同物件,讓客戶可專注部署商業應用程式。

將技術細節束之高閣,IBM 為何要將虛擬指令集MI 以下所有代碼稱為微碼?並視為硬體的一部分?

▲ 微碼(Microcode)組成微程序(Microprogram)以產生控制訊號,便於實作功能強大的指令,是CISC 的基礎。但IBM System/38 和AS/400 體系,卻有截然不同的定義。

說穿了,源頭在1969年針對IBM 的反壟斷案,導致IBM 被迫分開銷售硬體和軟體。透過將模擬與轉譯軟體定義成「硬體」,IBM 就能把虛擬指令集MI 當作System/38的本機指令集,自由自在隨著硬體演進修改真正底層指令集IMPI(Internal Microprogrammed Interface)和那些「微碼」,管它是「處理器控制儲存單元內、對應傳統微碼定義的水平微碼」(HMC,Horizontal Microcode)還是「存放在系統主存儲器、用來實作作業系統元件和整合式資料庫的垂直微碼」(VMC,Vertical Microcode),鋪陳AS/400 從IMPI 邁向PowerPC的康莊大道。

順便一提,參與System/38的主要工程師,除了日後將領導PowerPC 延伸架構「Amazon」的Frank Soltis,還包含Centaur 創辦人Glenn Henry。沒錯,就是秉持「簡單、迅速、便宜、暫存器更名是魔鬼的工作、謀略重於電晶體」信念,領導威盛電子(VIA)x86 處理器的前IBM 院士。

當Fort Knox 計劃還在勉力前行,IBM 明尼蘇達州Roschester研發團隊,因認為Fort Knox 的失敗將是無可避免的結果,啟動非正式半秘密專案(這種不受正常管理約束的開創性專案一般都稱為「臭鼬工廠計劃」,源自洛克希德馬丁二戰時期的臭鼬工廠),試圖讓System/36 軟體可執行於System/38 硬體,使兩者融合成兼顧先進虛擬化底層架構與豐富商業應用程式的產物,讓IBM 在最短時間內,擁有具競爭力的中端系統,並逐步轉向64 位元和RISC 處理器。

1985 年12 月,也就是Fort Knox 取消後沒多久,計劃就正式命名為Silver Lake(銀湖,當地小型水庫)。1986 年1 月,嚴寒的Roschester,「金星人」和「火星人」就這樣相遇了,System/38 研發團隊很快就重視解決方案至關重要的事實(System/36 強項),System/36 研發團隊則欣賞虛擬化技術的強大功能(System/38 長處)。

▲ IMPI 或PowerPC-AS 才是AS/400 的底層指令集,上層則是TIMI / MI 虛擬指令集。

Fort Knox 雖腰斬,但也並非一無可取,Silver Lake 本質上是System/38 的硬體演進,大量沿用當初為了Fort Knox 開發的部分技術。無獨有偶,IBM 在1986 年上市、兼容System/370大型主機的9370,原先定位成「中端系統首選」的「VAX Killer」,卻因缺乏市場所需應用軟體,並未取得預期商業目標,唯一爭取到的只有「不想花大錢養System/370」的客戶,而9370 也重用Fort Knox 計劃開發的輔助處理器為主處理器。

1988 年6 月21日,IBM 宣布Silver Lake 正名為AS/400 系統,執行OS/400 作業系統,相較前身System/36 和System/38,成本更低、功能更強大,並同時公布超過2,500 個應用軟體,創當時軟體業紀錄。

從1998 年8 月開始銷售,1990 年底IBM 就售出11 萬台AS/400,到1994 年,IBM 總計出貨高達25 萬台AS/400,1997 年累積至50 萬台。之前System/38也只不過頭五年賣出2 萬台,堪稱前所未見的豐碩戰果。

1993 年,IBM 面臨可能拆成幾間公司的危機時,比爾蓋茲評論,微軟對IBM 唯一感興趣的就是AS/400 部門,可見其商業價值。

1990 年,Roschester 研發團隊著手將AS/400 繼承自System/38 的48 位元IMPI 指令集,擴展為96 位元C-RISC(Commercial RISC),維持兼容IMPI 的前提之下,針對計算密集型商業應用,新增類似RISC 與VLIW(超長指令集)風格的新指令。

但問題來了,既然IBM都大費周章讓作業系統和底層處理器指令集徹底脫鉤,幹麼不直接沿用IBM 801 遺產的結晶:Power 處理器呢?

System/38 主要設計者之一Frank Soltis 應IBM 高層要求(Glenn Henry 則在1988 年離開任職21 年的IBM,轉戰Dell 任首任研發部門副總裁),提議擴展64 位元PowerPC,以滿足AS/400 需求的Amazon 計劃(後來稱為PowerPC-AS)。

IBM 最初企圖以Belatrix 計劃開發可同時用在AS/400 和RS/6000 的PowerPC處理器,但因野心過大放棄,轉而衍生出連續數款RS64 處理器,造成IBM RISC 指令集版本分裂:Power(RS/6000)、PowerPC(IBM RT/PC、Power1、Power2、Motorola M88x00 集大成)、PowerPC-AS(AS/400)。

▲「商務」PowerPC-AS(AS/400)、「工作站」Power(RS/6000)和「個人電腦」PowerPC,到了Power4 支持的Power指令集架構2.0 才統一。

原本System/38的MI 虛擬指令集改名為TIMI(Technology Independent Machine Interface),之下「當成硬體的軟體」模擬轉譯層,轉移至PowerPC 後,統一定名為SLIC(System Licensed Internal Code),前者意謂「允許應用程式可享受軟硬體的進步而無需重新編譯」,後者代表「IBM 不再使用微碼這種自欺欺人的名詞當作煙霧彈」。

毫無疑問的,移植到PowerPC 勢必重寫TIMI 以下大多數功能,IBM 為此聘請數百名C++ 程序設計師,重寫超過200 萬行C++ 代碼。

▲ IBM i 作業系統架構最重要者莫過於虛擬指令集TIMI 與模擬轉譯器SLIC,而古老的System/36與System/38 應用程式依舊可繼續用。

自AS/400 問世,IBM 不斷重新設計並命名平台,以下是歷經的重大里程碑:

  • 1988 年6 月:AS/400 誕生。
  • 1995 年6 月:第一款基於64 位元PowerPC-AS 處理器A10「Cobra」的AS/400e。
  • 1997 年:引進支持12 路系統的A35「Apache」(或稱PowerPC 625) 處理器,大幅提升效能,並逐漸統合PowerPC-AS 與PowerPC 指令集架構。
  • 關於處理器技術發展,1998 年RS64-II「North Star」首度提供粗質多執行緒(Coarse-Grained Multi-Threading,碰到長時間延遲才會切換),1999 年的RS64-III「Pulsar」借封裝技術將兩顆處理器合而為一,也是計算機工業的首顆雙核心處理器。
  • 2000 年:新名稱eServer iSeries。
  • 2002 年:計算機工業史上首款「原生雙核心」處理器Power4「Regatta」採用Power 指令集架構2.0,統一Power、PowerPC 與Power-AS,讓Apple 的PowerMac G5 也能採用單核心精簡版PowerPC 970。

▲ 對IBM 和客戶,Power4 最重大意義並非原生雙核心,而是「總算」出現可以通吃IBM 所有RISC 指令集的產品了。

  • 2004 年:配合IBM Power5「Squadron」處理器改名eServer i5, OS/400 作業系統更名為i5/OS。
  • 2006 年:再改名為System i,消除與Power5 的直接關聯。
  • 2008 年4 月:System i 與System p 整合成IBM Power Systems,同時支持三種作業系統:IBM i、AIX 和Linux。這時候的AS/400,最適當的描述是「運行IBM i 作業系統的IBM Power 伺服器」(IBM Power Systems running IBM i)。
  • 但IBM RISC 指令集的「統一大業」尚未結束,昔日聯合推動PowerPC 的AIM(Apple、IBM、Motorola) 聯盟中的Motorola,半導體部門2004 年獨立為Freescale(今日恩智浦),也自行擴充PowerPC 指令集,到2006 年Power指令集架構2.03 版(以Power6 為起點)才功德圓滿──距離始祖IBM 801 超過30 年。

▲自IBM 801 一脈相承的Power 指令集,1990 年代初期因AS/400e 和PowerPC 分裂,耗費超過十年才再度統一。

從1965 年ACS(和假想敵CDC6600 同為RISC雛型)、1974 年IBM 801(明確定義RISC 樣貌)、1985 年「Amercia」(超標量流水線)、1986 年RT PC(嘗試將RISC 投入工作站市場)、1990 年RS/6000(Power)、1993 年PowerPC、1995 年AS/400e(PowerPC-AS),直至今日,一路走來,建構了藍色巨人IBM 超過半個世紀的偉大RISC 發展史。

這裡還不提那些默默消失在歷史洪流的「RISC 諸神」(MIPS、SPARC、Alpha、PA-RISC)。

每當筆者看到因ARM和RISC-V 崛起,才在那少見多怪大驚小怪的「新興RISC 支持者」,講得好像RISC 仿佛橫空出世、多偉大的發明,搖頭嘆息之際,也只能繼續無聲乾笑了。

▲ RISC 並非21 世紀才橫空出世的偉大發明,早在1960 年代就以CDC6600 和IBM ACS 為出發點,走了超過半個世紀的漫長路程。

之後我們將一窺超標量流水線(Superscalar)緣起,但這次就不是IBM 唱獨角戲了,「x86 雙雄」和Motorola 等CISC處理器廠商的戲分,將遠超過各位的想像。

推薦:回顧歷史夢幻處理器系列

  • 計算機架構、商業大型機與超級電腦的誕生(1960 年代)
  • 精簡指令集電腦(RISC)問世與IBM 801 的前身(1970 年代)
  • 單晶片大型主機的幻夢與RISC 崛起(1980 年代初期)
  • 單晶片超級電腦的幻影與RISC 普及(80年代後期)
關鍵字: