如何使用 MemHound 正確測試 QNAP 伺服器上的 RAM
在執行中的作業系統 (使用者空間) 裡測試 RAM,在技術上並不容易。作業系統、虛擬化與快取服務 (尤其是 ZFS ARC) 會一直保留位址空間,不讓測試存取。
MemHound 是 StorageDiag Workbench 的 Memory Doctor 視窗,它按一個逐級升高的階梯運作:Quick → Standard → Deep → Hammer → Boot。它會鎖定所有能取得的可用 RAM (保留 256 MB 的餘裕),把測試圖樣寫進去再讀回,並在每個回合結束前一直占住每個區塊,迫使核心交出每一個可用分頁。以下說明如何依您的設定和檔案系統,檢查記憶體是否穩定。
- Quick快速掃描,NAS 保持服務
- Standard移動反轉,NAS 保持服務
- Deep停止服務,釋放 ARC
- Hammer每個核心上的 Row-hammer
- Boot隨身碟,在 NAS 系統之外
01QTS (ext4) 上的日常診斷
QTS 使用傳統檔案系統 (ext4),不會為自己保留大量 RAM,因此在執行中的系統裡也比較容易做出可靠的測試。記憶體錯誤通常會出現在使用者空間,所以定期做快速測試很有效。
- 關閉非關鍵的網路服務 (Samba、NFS、AFP)。
- 停止 App Center 中耗用大量資源的應用程式 (HDMI 桌面工作站、容器、虛擬機),只讓 StorageDiag 保持執行。瀏覽器只留一個開著 NAS 的分頁。
- 在釋放快取並停止服務後,大部分的實體 RAM 都可供測試使用。當至少有 90% 的 RAM 可用時,Quick 卡片會標記為
DAILY。 - 執行 Quick 測試。它之所以快,是因為在位址檢查之後只跑兩種測試圖樣,並略過 Standard 使用的逐行快取清除。設定 1 到 3 個回合 (Passes 欄位可填 1 到 16,預設為 1)。只要它觸及的記憶體有硬體故障,測試幾乎馬上就會發現。
02QuTS hero (ZFS) 上的診斷
ZFS 檔案系統使用 ARC (Adaptive Replacement Cache),它可能占用大部分可用 RAM。這時單純的 Quick 測試只能涵蓋一小部分記憶體。
- 選擇 Deep 測試而不是 Quick。
- 一旦您確認 (Stop services & test),MemHound 會停止 NAS 服務與 App Center 應用程式 (網頁面板保持開啟),清除 ZFS ARC 並捨棄核心快取。這會釋放大部分的實體記憶體供測試使用:在一台 128 GB 的 TS-1288X 上,可用記憶體從 96.6 GB 增加到 116.9 GB。
- 工作流程:首先對釋放的 RAM 執行 Quick 測試。如果發現錯誤,程序會提早結束並節省時間。如果沒有發現錯誤,工具會繼續進行 Standard 測試。
- 停機時間:從開始停止服務到兩個回合跑完,服務都處於停止狀態;對大量 RAM 做 Standard 測試可能要花好幾個小時。測試結束、您取消測試、測試程序意外終止,或最遲在開始後兩小時,服務都會自動恢復。如果光是停止服務就超過 30 分鐘,測試會放棄,一切恢復原狀。
03絕對測試 (Rescue 模式 / 離線)
當核心日誌 (klog) 指出記憶體不穩定 (在多個程式間發生自發的 segfaults、call traces、機器檢查或 EDAC 錯誤),但從執行中的系統進行的測試 (Quick、Deep) 卻以 PASS 結束時,請改用隔離的環境,它完全不經過 NAS 的作業系統。
選項 A:可開機的 USB 隨身碟 (推薦)
這支隨身碟設計成能自己跑完整個測試,連無法接上螢幕和鍵盤的機型也一樣,過程中完全不需要按任何鍵。開機項目會把隨身碟設為下次重新啟動時的預設開機裝置,測試會自動開始,並透過 NAS 自己的位址回報進度,MemHound 視窗會替您讀取。測試通過 (PASS) 後,NAS 會自行重新啟動回到 QTS,視窗會顯示判定結果;發現記憶體錯誤時,測試會把 NAS 關機 (見下文)。只有在韌體無法接受開機項目、必須從機器的開機選單啟動隨身碟時,才需要螢幕和鍵盤。
- 在 MemHound 視窗的標題列中,按一下 Create bootable USB。
- 把任何大於 192 MB 的 USB 隨身碟插入 QNAP 的 USB 埠。隨身碟上的所有資料都會被清除,原本是什麼格式都沒關係。
- Click Update the image when the wizard offers a newer build (Download the image the first time), then follow the prompts: Continue, type the device name, Erase and write, Add the boot entry.
- 從準備好的診斷隨身碟重新啟動伺服器 (Restart now and test)。NAS 重新開機回來後,視窗就會顯示判定結果。
隨身碟只能在 x86 機型上開機:ARM 機型無法從這個通用映像檔開機。
當開機測試未按計畫進行時
- NAS 未從隨身碟開始測試。Add the boot entry 會在 NAS 自己的開機分割區放一個檔案
grub/custom.cfg。開機時,NAS 的開機載入程式 (GRUB) 會尋找標籤為MEMHOUND的磁碟區,找到就從它啟動。GRUB 只能透過韌體本身的 USB 支援看到隨身碟,因此在以下情況,NAS 會照常啟動 QTS:開機時韌體沒有提供這個隨身碟 (某些便宜或品質差的隨身碟會這樣)、韌體設定中關閉了 USB 開機,或韌體沒有顯示的其他原因。請換一支隨身碟、改插背面的 USB 埠,或從機器的開機選單啟動隨身碟 (開機時按 F11,或這個型號使用的按鍵)。如果開機載入程式完全不讀這個檔案,精靈會顯示 This firmware cannot be given a boot entry;如果檔案是舊版寫入的,則會顯示 The boot entry here is an old one (Replace the boot entry)。已經跑過測試的隨身碟不會再次啟動:要再測一次,請用 Create bootable USB 重新寫入。 - NAS 自行關機且未恢復。這就是測試發現記憶體錯誤時會執行的動作:它會刻意將 NAS 關機,以防止在該記憶體狀態下有任何資料寫入磁碟,並且不會將其重新啟動。相反地,通過的測試會將 NAS 重新啟動進入 QTS。因此,NAS 若在開機測試期間自行關機、而且沒有再開機,就表示記憶體有問題。詳細資訊位於隨身碟上 (FAT32,標籤
MEMHOUND):在任何電腦上讀取/memhound/report-<time>.txt和map-<time>.json,或者將隨身碟插入正在執行 StorageDiag Workbench 的健康 NAS 並開啟 MemHound,它會自行讀取。
選項 B:透過 SSH 的 Rescue 模式 (無設定磁碟)
如果您偏好遠端工作且了解命令列的基礎知識,此模式可提供無需 USB 隨身碟的完整測試。
- 透過 SSH 登入 QNAP 伺服器。
- 在文字選單 (QTS Console Management) 中,選擇在 Rescue 模式下重新啟動伺服器 (without configured disks)。
- 重新啟動後,Qfinder 會把伺服器顯示為「未初始化」(uninitialized)。這是正常的。
- 從 Qfinder 啟用 SSH。以
admin身分登入 (在 QTS 5.2 及更新版本中,預設密碼是雲端密碼;在較舊版本中,它是大寫的完整 MAC 位址,不含冒號)。 - 使用下方第一個區塊下載並解壓縮 MemHound,然後使用第二個區塊在文字模式下開始測試。
請勿依循瀏覽器中的初始化或重設畫面:僅使用 Qfinder。Rescue 模式需要一個可連上網際網路的 DHCP 網路。
# 下載並解壓縮 MemHound
arch=$(uname -m)
[ "$arch" = armv7l ] && arch=armhf
wget https://www.qnaputilities.com/pub/memhound/bin/memhound.tar.gz
tar zxvf memhound.tar.gz
chmod +x memhound-*
# 使用 2 個回合的 Quick 測試 (推薦的起點) ./memhound-$arch --quick --passes 2 --ui # Standard 測試 (在帶有 End reason : completed 的 Quick PASS 之後) ./memhound-$arch --standard --ui
Quick 會先檢查位址,再寫入棋盤格圖樣和隨機的移動反轉。Standard 會重複這兩種圖樣,再加上另外 11 種,全部在一次執行中完成;除非加上 --passes,否則只跑一個回合。文字介面關閉時,MemHound 會印出一份英文摘要。摘要顯示 Verdict : PASS 和 End reason : completed 時,再繼續執行 Standard:因記憶體壓力而中斷的執行仍會顯示 PASS,但會附上 End reason : aborted: …。其他判定結果請見第 04 節。
04如何解讀結果
MemHound 依固定規則做出判定,規則則依測試而不同。Quick、Standard、Deep 和 Hammer 會在它們觸及的記憶體中尋找故障。後面介紹的 Benchmark and Quality,則是檢定整組記憶體套組。
Quick、Standard、Deep 和 Hammer
- 硬性故障與暫時性故障。一次讀取錯誤不足以判定模組有問題。MemHound 會把它算成暫時性故障:對應圖將它標為 Suspect (可疑),文字摘要則顯示
PASS_WITH_TRANSIENTS。之後的檢查若在 MemHound 自身記憶體的同一個位址 (虛擬位址;實體位址會以p=印在旁邊) 再次失敗,預設達到兩次 (--hard-threshold 2),故障就成為硬性故障。只要有任何硬性故障,判定就是FAIL。 - Workbench 視窗顯示的內容。它的狀態列會計算這兩種類型,例如 FAIL — 0 hard fault(s), 1 transient。沒有硬性故障時,在怪罪模組之前,請先離線 (用隨身碟或 Rescue 模式) 重做一次測試:應用程式內的指南把只有暫時性故障的結果,當成離線重測的理由,而絕不是 RMA (退換貨) 的理由。文字摘要還會補充:這類結果可能與電源、散熱或時序餘裕不足有關。
- ECC 計數器與核心日誌。ECC 計數器 (EDAC) 和核心日誌事件會顯示在結果旁邊,如果計數器增加,摘要中會加入
<== HARDWARE ECC ERRORS DURING TEST。它們不會改變判定結果,請您自行檢查。 - 執行是如何結束的。摘要以
End reason結尾:completed、stopped by user或aborted: …。沒有以completed結束的執行,並沒有測完原本要測的所有內容,不論判定那一行寫什麼。
須知事項:Benchmark and Quality
MemHound 標題列中的 Benchmark and Quality 按鈕,會對照安裝模組的 JEDEC 數值測量持續的記憶體頻寬、檢查延遲抖動,並在發生任何位元錯誤時判定為失敗。其判定結果為 PASS (或 PASS-UNQUALIFIED)、MARGINAL、FAIL 或 INCONCLUSIVE,判定規則也比尋找故障的測試更嚴格。
點擊該按鈕會立即開始執行,不會有任何提示。第一次執行無法中斷,且預設情況下,其結果會發佈在公開的 RAM 看板上。
- 錯誤。在執行期間記錄到一個位元錯誤、一個未修正的 ECC 錯誤 (UE) 或一個嚴重的核心事件,都會讓判定結果為 FAIL。嚴重事件包括機器檢查 (machine check) 或「Hardware Error」、未修正的記憶體錯誤、記憶體故障、資料損毀或核心恐慌 (kernel panic)。出現已修正的 ECC 錯誤 (CE) 時,判定最多只能是 MARGINAL:模組可以運作,但這組套組無法通過認證。Segfaults、call traces、Oops 和 OOM kills 會顯示出來,但不會改變判定結果。
- 相符的套組。這項測試檢定的是一組相符的記憶體套組。以下情況無法通過門檻 (gate):模組彼此不同 (依零件編號判斷;DMI 沒有提供零件編號時,依容量、速度、類型與 ECC 判斷)、有 3 個模組或超過 4 個的奇數個模組,或通道 A 與 B 的容量不同。執行仍會繼續,提供參考資訊,但判定為 FAIL,結果既不儲存也不分享。DMI 沒有回報任何資訊時,會略過這道門檻。
- 忙碌的 NAS。頻寬不足 (FAIL 或 MARGINAL) 或延遲抖動不合格時,如果 NAS 正處於忙碌 (每個 CPU 的 1 分鐘負載高於 0.6)、記憶體不足 (開始時可用記憶體低於 40%) 或被降頻 (throttled) 的狀態,判定就是 INCONCLUSIVE (無結論):問題出在系統狀態,而不是模組。由您或記憶體防護機制 (memory guard) 停止的執行,也是 INCONCLUSIVE。位元錯誤、UE、嚴重的核心事件、圖樣錯誤、位元衰減 (bit fade) 和套組門檻,永遠不會因此放寬。
05NAS 中的 RAM、良好做法與硬體特質
在把傳輸緩慢歸咎於磁碟或網路之前,先了解 NAS 記憶體的特別之處會有幫助。NAS 的記憶體和電競 PC 的記憶體不一樣。NAS 全天候在穩定的負載下運作:系統緩衝區、ZFS 快取 (ARC)、虛擬機和容器。它需要的是穩定與相容,而不是破紀錄的時脈。它對錯誤的容忍度也比桌上型電腦低:長時間開機和持續的負載,會讓罕見的錯誤浮現;PC 經常重新開機,這些錯誤就被掩蓋了。
「能運作」不代表「受支援」
- 超越規格。 NAS 常常在記憶體超過處理器廠商官方上限時仍能開機,例如在標示上限 16 GB 的系統中裝 32 GB。
- 表面上看起來穩定。 這種設定通常可以通過開機自我測試,報告其全部容量,並在閒置時運作良好。錯誤會在長時間、繁重的負載下出現。
- 製造商的支援。 當發生故障時,QNAP 支援部門可能會拒絕提供協助,直到在原廠、受支援的模組上確認了該故障。請保留原廠模組,以防您需要開啟支援工單。
混合模組:應避免的情況及其原因
混用模組會大幅提高不相容與不穩定的機率。
- 不同的製造商或速度。 模組帶有不同的 SPD 設定檔和次要時序,記憶體控制器必須把所有模組都訓練到它們共同支援的設定,通常是最慢的共用 JEDEC 設定檔。
- 第三個模組。 在一對模組中加入一個模組會破壞雙通道對稱性:一部分記憶體會在較慢的單通道模式下運作,而額外的模組會增加匯流排上的電氣負載。三個模組可能比兩個相符模組提供更少的頻寬和更高的延遲。因此 MemHound 的 Benchmark and Quality 不會檢定三個模組,或超過四個的任何奇數個模組。
- ECC 與 non-ECC。 絕對不要將錯誤修正碼 (ECC) 模組與一般 (non-ECC) 模組混合使用。
雙通道與 ECC 的作用
- 雙通道。 兩個完全相同的模組組成一對 (容量、速度、時序和 rank 組織都相同),是穩定的選擇,兩個通道會一起運作,形成 128 位元的路徑。實際工作負載中,增益通常是 1.2 到 1.5 倍。這對影片轉碼這類大量使用記憶體的工作很重要,因為整合式 GPU 會和處理器共用記憶體頻寬。單純提供檔案時增益很小:瓶頸在網路和磁碟。
- ECC 與 ZFS。 ECC 記憶體會在單一位元錯誤發生時立即修正,並能偵測雙位元錯誤。這在 QuTS hero 上最重要:ZFS 會驗證從磁碟讀出內容的總和檢查碼 (checksum),卻信任記憶體裡的內容。如果某個位元在計算總和檢查碼之前就在 RAM 中翻轉,它會帶著有效的總和檢查碼寫入磁碟,看起來完全正確,並一直留在那裡。
- ECC 的需求。 ECC 取決於處理器和主機板。在沒有它的消費級平台上,例如許多 Intel Celeron 和 Pentium 處理器,任何設定都無法開啟它。
記憶體不良的症狀
在把效能不佳歸咎於磁碟之前,請先觀察 NAS 的行為。記憶體不良或不相容時,會出現以下情況:
- 剛更換記憶體後完全無法開機,或不斷重新啟動;
- 偵測到的記憶體少於安裝的記憶體;
- 隨機凍結或自發的重新啟動;
- 在具有 ECC 的平台上,核心日誌中出現未修正的錯誤 (machine checks,EDAC UE),這就是硬體故障的證據。單一已修正錯誤則不是 (Workbench 自身對於 machine checks 的指南:Don't panic at a single corrected event),但如果已修正錯誤一直來自同一個模組,問題就指向那個模組。
OOM 錯誤
記憶體請求無法滿足時,核心的 OOM killer (Out Of Memory killer) 會結束處理程序,讓系統本身能繼續運作。大多數情況下,這表示記憶體不夠執行中的工作使用,或記憶體負載過重,而不是模組故障。即使資源監控器 (Resource Monitor) 仍顯示大量空閒記憶體,也可能發生,因為「空閒」不等於能用來滿足這個請求:
- 該請求可能需要一個連續區塊,散落在小碎片中的可用記憶體無法滿足它;
- 容器或應用程式可能已達到自己的記憶體上限,不論 NAS 整體還有多少空閒記憶體;
- 由 ZFS ARC、大分頁 (huge pages) 或鎖定分頁 (locked pages) 保留的記憶體不會立即交出;
- 如果硬體有故障,核心會在記憶體錯誤後停用相關分頁 (核心日誌中的
Memory failure);系統若沒有完整偵測到某個模組,能用的記憶體也會變少。
因此,請看可用記憶體 (available),而不是空閒記憶體 (free),而且無論如何都要測試記憶體。每個 MemHound 測試都會先檢查位址,在執行任何圖樣之前就回報卡住的位址;當診斷包 (bundle) 顯示 OOM kills 或混用的記憶體套組時,Workbench 會在 Memory 圖示上顯示警告。
| 平台 | ECC | 模組 | QNAP 機型範例 |
|---|---|---|---|
| Intel Celeron、Pentium (Jasper Lake、Gemini Lake) | 否 | SODIMM DDR4 | TS-464、TS-264、TS-664、TS-x53 系列 |
| AMD Ryzen Embedded V1500B、V1000 | 是 | SODIMM DDR4 | TS-873A、TS-473A、TS-1273AU |
| Intel Xeon E、W | 是 | UDIMM DDR4 | TS-883XU、TS-983XU、TVS-h1688X |
| Intel Atom C3000、C5000 | 是 | SODIMM、UDIMM DDR4 | 入門企業級機架式機型 |
| Intel Xeon D | 是 | RDIMM DDR4 | ES2486dc |
| AMD EPYC | 是 | RDIMM DDR4 | TS-h1290FX |
在沒有 ECC 的平台 (例如 TS-464) 上,任何設定都無法開啟 ECC。UDIMM 是無緩衝的 (unbuffered);RDIMM 與 LRDIMM 是暫存式 (registered) 模組,能減輕控制器的負載,因此一個通道可以裝更多大容量模組。
範例:TS-464,「能運作」不代表「受支援」
TS-464 配備 Intel Celeron N5095 或 N5105 和兩個 SODIMM DDR4 插槽,無 ECC。官方最大值為 16 GB (2 × 8 GB),這是處理器自身的限制。實際上,裝 2 × 16 GB (32 GB) 也能開機並顯示完整容量,但這超出 Intel 和 QNAP 的規格。這樣的記憶體可能通過開機自我測試、閒置時運作良好,只在長時間、繁重的負載下才出錯,所以新的記憶體配置要先測試過,才能信任。
| 您混合的內容 | 發生了什麼事 | 結果 | 建議 |
|---|---|---|---|
| 不同的製造商,不同的套件 | 不同的 SPD 設定檔、次要時序、rank 組織和 DRAM 晶片;套組只以整組的形式驗證 | 退回基本 JEDEC 設定檔,負載下可能不穩定 | 同一盒裡的一組套組 |
| 不同的速度 | 控制器將所有記憶體訓練為最低的共用設定檔 | 所有記憶體會減速至最慢模組的速度 (3200 + 2400 → 2400) | 相同的速度、延遲和電壓 |
| 不同的容量 (16 + 8 GB) | 通常以全容量開機,但無法保證完整的雙通道 | 頻寬不確定;某些具有成對插槽的機型將無法開機 | 一對相同容量的模組 |
| 三個模組而不是兩個 | 破壞雙通道對稱性並加重一個通道的負載 | 一部分記憶體執行單通道;在 AMD 上保證時脈較低 | 偶數、相符數量的模組 |
| ECC 與 non-ECC | 不同的資料字組 (word) 格式 | 系統關閉 ECC 或根本無法開機 | 只用同一種類型 |
三個模組可能比兩個模組慢嗎? 是的,尤其是在 AMD 上。Ryzen 的記憶體控制器會依每個通道的模組數和 rank 數,降低保證的時脈:每通道一個模組時為 DDR4 3200,兩個 single-rank 模組時為 2933,兩個 dual-rank 模組時為 2666。模組越多,容量越大、頻寬越小;不過當工作缺記憶體時,多一點容量還是比記憶體用完、開始使用置換空間 (swap) 好。
| 應用程式 | 敏感於 | 要注意什麼 |
|---|---|---|
| Virtualization Station | 容量和頻寬 | 主機為自己保留大約 1.5–2 GB;記憶體不足時,主機會進行置換 (swaps),且每個 VM 都會同時變慢 |
| Container Station | 容量 | 繁重的堆疊 (Nextcloud、Immich、資料庫) 需要大約 16 GB |
| QuTS hero (ZFS,ARC) | 容量 | 至少 8 GB,重複資料刪除需 16 GB,建議 32 GB 及以上;ARC 使用率高是正常的,不是故障 |
| QuMagie,Qsirch | 容量 | 索引可能會佔用大量記憶體 |
| 轉碼,iGPU | 頻寬 | 雙通道有助於圖形處理;Quick Sync 轉碼本身不太在意通道數量 |
良好做法簡述
- 兩個完全相同的模組成對使用:容量、速度、時序和 rank 組織都相同。這樣才有完整的雙通道和穩定性。
- 保留原廠模組。 在提交支援工單之前,請換回原廠模組並檢查問題是否仍然存在。
- 升級後進行測試,最重要的是超過官方最大值時:首先執行 Quick 測試,然後是 Deep 測試或隨身碟測試。
- 檢查偵測到的容量:在資源監控器 (Resource Monitor) 中,如果偵測到的容量少於安裝的容量,表示模組不相容或沒有插好。
- 偶數個相同容量的模組。 有些型號遇到不相符的模組配對時將無法開機。
- 通道越多不一定越快。 提供檔案時,瓶頸在網路和磁碟;最能感受到雙通道差異的是整合式顯示晶片、VM 和 ZFS。