如何評價龍芯三號開源電腦主機?
繼上次龍芯筆記本團購後,這回有了台式機的團購。
型號有兩種,3B1500和3A2000。沒趕上上次筆記本的團購,有點遺憾。那次不到400,說是甜品也好,說是玩具也罷,對於任何會Linux的朋友來說都是一個有趣的玩意。對於個人而言,剛好處於買和不買的猶豫點上。這次兩款均在三四千,雖然機箱的外形我個人不太喜歡,但可以選擇不要機箱的樣子。各路朋友怎麼看呢?傳送門:
3B1500:龍芯俱樂部龍芯筆記本團購系統龍芯俱樂部龍芯筆記本開源社區團購3A2000:龍芯三號開源電腦主機 3A2000 4核
這兩個型號的機器剛好都有,並且用過一段時間了。雖然早就已經沒有這兩個型號的團購了(截至目前(Oct 26, 2018)龍芯的新產品 3A3000 和 7K1000、2K1000 都已經出了一段時間了,回答這個問題看起來好像不太合適,但是看到這個問題我還是想講一下我的一些體驗。
剛好在答主問這個問題的時間點(2016-07-25)我也參與了這次團購。安同開源社區(https://aosc.io)是一個開發者比用戶多的 Linux 發行版[1](真實),2015 年在深圳開 AOSC Conference 的時候因為有一台 Yeelong 8089D(龍芯 2F 筆記本電腦,就是題主所說的「上次筆記本的團購……不到 400」的那台),大家腦子一熱,就現場移植了一個用於 MIPS-II 指令集架構的移植[2],然後就做了下去。
然而 8089D 那個性能很明顯拿來做編譯機器完全是不現實的,所以一直到我們購買龍芯三號機器之前都是 Jeff 在用 Qemu-Static 跑包,速度極慢。到了龍芯俱樂部放出團購的時候,因為我之前恰好也對 MIPS 和龍芯產生了興趣,就花了 4200 元配了一台龍芯 3A-2000C (R2) @ 1GHz 的開發機器。購買的是主板套件,一塊 Mini-ITX 主板加紫光國芯 DDR3-1600 內存條,剩下的外圍部件就拜託萬能的淘寶了。
Nov, 2016 這一機器組裝完成之後,我先安裝了龍芯夢蘭[3]提供的 Fedora 21 移植,在此基礎上著手 LFS,開始做新的 AOSC OS MIPS64el 移植(同時繼續 MIPS32el)[4],並對龍芯 3 號做適當優化(但不是完全的優化,對其它 MIPS 架構有影響的修改原則上不做,因為龍芯黑魔法比較多(見下),這類補丁也多)。
我記得我遇到的第一個問題是 LFS 的問題(參見我當時寫的文章 LFS on MIPS64 筆記),當然這都是小問題,因為這之前我還沒什麼 LFS 的經驗,現學現賣了;剛好又是期末考試周,每場考試之間拉得很長,就用了五六天的時間做了一個 Stage 0(即只包含 Glibc、Binutils 和 GCC 的最小開發環境)。這之後 Jeff 幫我解決了一些基礎軟體包的依賴環,我就繼續往上構建軟體包了。這中間遇到的都是些針對架構的 Bug 解決和構建腳本調整,別的沒啥。(PS:那個 Fedora 21 也蠻多問題的)
一直到更換宿主系統為新構建的 AOSC OS(AOSC OS 使用 systemd-nspawn 把開發環境裝在容器里),我們的進程還算順利。直到後來我做到了 FFmpeg,才發現問題有點大。
一開始是發現 gobject-introspection 會死鎖(沒有反應,按 ^C 可退出),我們也沒有找到解決方案,就暫且關掉了一些 GTK 包的文檔構建。後來發現部分別的應用也會死鎖,我們就開始 gdb 看問題,找到問題陷在 FFmpeg 的庫里,於是我們又去找是不是 FFmpeg 的構建配置不對,開錯了什麼開關。找了半天(實際上有一個月)都不知道為什麼會陷入死鎖,最後把 Glibc 的調試信息打開發現代碼陷在了 pthread 里,而 pthread 此時正巧執行到了一段 MIPS 指令中的 Load Link / Store Conditional(ll / sc)指令對。到了這裡我們才意識到我們碰到了硬體問題:在龍芯 3 號中,每次執行 ll 指令之前一定要執行一次 sync,並且 ll 指令之後 sc 指令之前的代碼如果有跳轉,跳轉目標一定是 sync 指令。其中前者需要打上 GCC 和 Binutils 補丁,後者需要代碼自行添加。[5]
這個問題主要影響 FFmpeg,所以所有依賴 FFmpeg 的軟體都會各種死鎖,FFmpeg 自己帶的命令則各種 SIGBUS、SIGILL 和 SIGSEGV,最後整個多媒體棧基本上都是壞的,但是不依賴 FFmpeg 的軟體跑得還是挺歡的。
不僅僅是這個 ll / sc 的問題,龍芯處理器因為是自研微架構(對龍芯 3A-2000,是 GS464E),對標準 MIPS 指令集做的只是兼容而不是完全符合[6];有相當數量的特性實行是和標準不同的,這裡面比較突出的就是浮點數運算中龍芯會對 madd / msub 指令做 Fused Multiply-Add(Multiply-accumulate operation),而標準 MIPS 處理器並不會。
除此之外還有比較多的槽點,比如龍芯的內核有一大堆寫著魔法數字的沒有被 Linux-MIPS 接收的補丁(也就沒有上到主線),當時的版本也是落後的(後來老衲 Rebase 了所有的補丁,但是之前我移植這些補丁也移植了個把來月,最後也都沒有使用);龍芯的 GCC 補丁基準是 4.9,而我們當時用的是 6.3,有些補丁對其它 MIPS 處理器也有副作用。
說一下龍芯機器主板的固件。龍芯一部分機器使用 PMON2000 固件,這是一個 Free as in freedom 的固件沒錯(RMS 讚許),但是比較難用(如何優雅地使用 PMON 2000);一部分機器又使用由中電科技(而不是龍夢或龍芯中科)開發的基於 PMON2000 的,提供 EFI 介面的崑崙固件;而崑崙固件雖然提供了 EFI 的部分功能,卻不是完整的 EFI / UEFI,引導操作系統的時候仍然是固定地去讀 boot.scr。
2017 年的時候 Jeff 也掏腰包買了一台 3B1500(題主也提到了),不過在整個開發過程中沒有用到太多。這台機器是六核 GS464V 的處理器,但是據說可以通過修改固件打開八核,我沒這麼做過。
AOSCC 2017 的時候就拿出來展示了。這個時候除了依賴 FFmpeg 的軟體,別的軟體體驗都還不錯,就是跑得很慢。展示的時候這台機器插了張 AMD Radeon R7 240,相比板(A1601)載的 AMD 集顯圖形性能提高不少,甚至可以比較流暢地玩遊戲(Warzone2100 和 Teeworlds)。
這之後我就失去了激情,(截至 Dec. 22, 2018)整個 AOSC OS MIPS 移植就咕了(苦笑)。
用過的幾款龍芯電腦,處理器速度都不怎麼樣。AOSC OS 在龍芯 3A-2000C 上從內核開始執行到 MATE 桌面載入需要數分種的時間,編譯一次內核(發行版內核,功能基本上開爆)需要 3.5 小時。我個人認為甚至不能滿足日常使用,反應時間還是不盡人意,所以胡總說「滿足軍政機關的辦公要求」我覺得是 Fair enough 的(笑),但是一般老百姓恐怕對這一速度水平還不能滿意。
目前龍芯的軟體水平我覺得還是不行。龍芯中科和龍芯夢蘭雖然都在積極推進開源,但是整個研發過程離開源社區及其模式還遠得很,還是停留在「我把代碼公開了」的水平(這一跡象從各公開代碼都放在 FTP 上可見(就算是 cgit 也基本上看不到什麼社區的影子))。雖然近期陸續有社區開發者積极參与進龍芯配套軟體的開發之中,但是依我看來這一過程從現在(Oct, 2018)算起還是需要相當一段的時間。加上龍芯兼容但不完全是 MIPS 指令集架構的特性,標準 MIPS 架構發行版不可避免地會在龍芯上碰坑[7],無論是致命的也好(崩潰、死鎖)還是非致命的(沒有針對性優化的慢)也好,一段時間內龍芯的軟體生態還是要繼續完善,硬體水平還是需要繼續提升;但是這一過程絕對不是倪光南講兩句話就可以完成的,是需要時間的。
不過話說回來,我還是希望能繼續 AOSC OS 的 MIPS 移植的,畢竟現在龍芯上能用的 Linux 發行版不多(笑),就看我什麼時候又打雞血了[8](笑)。
注
[1]: 另有一說「鏡像源比用戶多的發行版」:https://github.com/AOSC-Dev/aosc-os-repository-data/blob/master/mirrors.yml
[2]: Loongson 2F 最高兼容到 MIPS-III 指令集,至於為什麼當時我們選擇做 MIPS-II,根據 Jeff 的描述,「完全是破罐子破摔」,因此也很明顯不是一個 64 位的移植,是 n32 ABI(後來又重構變成了 o32,因為沒什麼人關注 n32)。
[3]: 即龍夢(Lemote)。這裡需要區分「龍芯中科」和「龍芯夢蘭」兩個公司,前者負責晶元設計,後者負責方案整合;也就是說,主板設計和機器都是龍夢的工作,買也是從龍夢買。當然,最近(Oct, 2018)出的龍芯派除外。
[4]: 這裡指 64 位 MIPS 和 32 位 MIPS,「el」表示「Little Endian(小端序)」。MIPS 歷史悠久,總共有 MIPS-{I,II,III,IV,V}、MIPS32r[1-6] 和 MIPS64r[1-6] 這麼多種 ISA,MIPS32 架構基於 MIPS-II 架構,MIPS64 架構基於 MIPS-IV 架構。這張圖清楚地闡釋了這幾者之間的關係。
[5]: 參見《龍芯處理器應用常見問題解答》第 13 節:http://loongson.cn/uploadfile/cpu/loongsonseries_FAQ.pdf
[6]: 參見《龍芯 3A2000 / 3B2000 處理器用戶手冊:下冊:GS464E 處理器核:V1.03》第 2.4 節:http://www.loongson.cn/uploadfile/cpu/3A2000/Loongson3A2000_user2.pdf
[7]: 多說一句。後來我去問了 Debian 的 Aron,Debian 從來沒有用過龍芯 3A-2000 系列,因為這是個過渡產品(沒有公開消息證明這一點,但是大家都相信是),相比 3000 系列功能缺陷還是不少。
[8]: 雞血已經打上了,新一輪的移植已經從 Dec. 2018 開始,謝謝大家的關注。
Change Log
- Dec 17, 2018: 怎麼來了這麼多贊呢?我尋思著改一下不通的地方罷。特別有一點是 7K1000 是專門設計的橋片(南橋),和 3A3000 並列似乎不太合適,於是加上了 2K1000 這塊通用處理器,看起來舒服一些。
- Dec 30, 2018: 托各位關注龍芯的愛好者的福,明年年初,社區合作的 MIPS Port 即將(第二次)正式開機,我將繼續扮演架構維護者,我會用維護者技術手段努力創造一個能用的形象,文體兩開花,弘揚 MIPS 文化,希望大家多多關注。
太貴!但也可以理解,畢竟小眾,產量小成本均攤到每個消費者身上的成本就相對較多。
這種性能 這種配置 加上這種價格
除非特殊需求,要不然只有羅永浩能把他賣了
推薦閱讀: