非官方
本頁內容
  1. 01QTS (ext4) 上的日常診斷
  2. 02QuTS hero (ZFS) 上的診斷
  3. 03絕對測試 (Rescue 模式 / 離線)
  4. 04如何解讀結果
  5. 05NAS 中的 RAM、良好做法與硬體特質

如何使用 MemHound 正確測試 QNAP 伺服器上的 RAM

在執行中的作業系統 (使用者空間) 裡測試 RAM,在技術上並不容易。作業系統、虛擬化與快取服務 (尤其是 ZFS ARC) 會一直保留位址空間,不讓測試存取。

MemHound 是 StorageDiag Workbench 的 Memory Doctor 視窗,它按一個逐級升高的階梯運作:Quick → Standard → Deep → Hammer → Boot。它會鎖定所有能取得的可用 RAM (保留 256 MB 的餘裕),把測試圖樣寫進去再讀回,並在每個回合結束前一直占住每個區塊,迫使核心交出每一個可用分頁。以下說明如何依您的設定和檔案系統,檢查記憶體是否穩定。

  1. Quick快速掃描,NAS 保持服務
  2. Standard移動反轉,NAS 保持服務
  3. Deep停止服務,釋放 ARC
  4. Hammer每個核心上的 Row-hammer
  5. Boot隨身碟,在 NAS 系統之外

01QTS (ext4) 上的日常診斷

QTS 使用傳統檔案系統 (ext4),不會為自己保留大量 RAM,因此在執行中的系統裡也比較容易做出可靠的測試。記憶體錯誤通常會出現在使用者空間,所以定期做快速測試很有效。

  1. 關閉非關鍵的網路服務 (Samba、NFS、AFP)。
  2. 停止 App Center 中耗用大量資源的應用程式 (HDMI 桌面工作站、容器、虛擬機),只讓 StorageDiag 保持執行。瀏覽器只留一個開著 NAS 的分頁。
  3. 在釋放快取並停止服務後,大部分的實體 RAM 都可供測試使用。當至少有 90% 的 RAM 可用時,Quick 卡片會標記為 DAILY。
  4. 執行 Quick 測試。它之所以快,是因為在位址檢查之後只跑兩種測試圖樣,並略過 Standard 使用的逐行快取清除。設定 1 到 3 個回合 (Passes 欄位可填 1 到 16,預設為 1)。只要它觸及的記憶體有硬體故障,測試幾乎馬上就會發現。
已選擇 Quick。每張卡片顯示該測試目前能觸及多少 RAM;Start memory test 與 Passes 欄位在卡片下方。
影片 · 0:34。 快速記憶體測試:先停止應用程式,再測試系統能空出來的記憶體 memhound Quick · 先停止 App Center 的應用程式 · QTS

02QuTS hero (ZFS) 上的診斷

ZFS 檔案系統使用 ARC (Adaptive Replacement Cache),它可能占用大部分可用 RAM。這時單純的 Quick 測試只能涵蓋一小部分記憶體。

  1. 選擇 Deep 測試而不是 Quick。
  2. 一旦您確認 (Stop services & test),MemHound 會停止 NAS 服務與 App Center 應用程式 (網頁面板保持開啟),清除 ZFS ARC 並捨棄核心快取。這會釋放大部分的實體記憶體供測試使用:在一台 128 GB 的 TS-1288X 上,可用記憶體從 96.6 GB 增加到 116.9 GB。
  3. 工作流程:首先對釋放的 RAM 執行 Quick 測試。如果發現錯誤,程序會提早結束並節省時間。如果沒有發現錯誤,工具會繼續進行 Standard 測試。
  4. 停機時間:從開始停止服務到兩個回合跑完,服務都處於停止狀態;對大量 RAM 做 Standard 測試可能要花好幾個小時。測試結束、您取消測試、測試程序意外終止,或最遲在開始後兩小時,服務都會自動恢復。如果光是停止服務就超過 30 分鐘,測試會放棄,一切恢復原狀。
已選擇 Deep。卡片說明它的作用 (停止服務,釋放 ARC,對所有 RAM 進行 Quick → Standard 測試,最後恢復一切),開始按鈕則變成 Suspend services & test…
影片 · 2:02。 ZFS 上的記憶體測試:測試前先回收 ARC memhound Deep · QuTS hero
影片 · 2:15。 不讓 NAS 離線就能測試記憶體 64 GB QuTS hero 機器上的 memhound Deep 測試

03絕對測試 (Rescue 模式 / 離線)

當核心日誌 (klog) 指出記憶體不穩定 (在多個程式間發生自發的 segfaults、call traces、機器檢查或 EDAC 錯誤),但從執行中的系統進行的測試 (Quick、Deep) 卻以 PASS 結束時,請改用隔離的環境,它完全不經過 NAS 的作業系統。

選項 A:可開機的 USB 隨身碟 (推薦)

這支隨身碟設計成能自己跑完整個測試,連無法接上螢幕和鍵盤的機型也一樣,過程中完全不需要按任何鍵。開機項目會把隨身碟設為下次重新啟動時的預設開機裝置,測試會自動開始,並透過 NAS 自己的位址回報進度,MemHound 視窗會替您讀取。測試通過 (PASS) 後,NAS 會自行重新啟動回到 QTS,視窗會顯示判定結果;發現記憶體錯誤時,測試會把 NAS 關機 (見下文)。只有在韌體無法接受開機項目、必須從機器的開機選單啟動隨身碟時,才需要螢幕和鍵盤。

  1. 在 MemHound 視窗的標題列中,按一下 Create bootable USB。
  2. 把任何大於 192 MB 的 USB 隨身碟插入 QNAP 的 USB 埠。隨身碟上的所有資料都會被清除,原本是什麼格式都沒關係。
  3. 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.
  4. 從準備好的診斷隨身碟重新啟動伺服器 (Restart now and test)。NAS 重新開機回來後,視窗就會顯示判定結果。

隨身碟只能在 x86 機型上開機:ARM 機型無法從這個通用映像檔開機。

Create bootable USB。保留在 NAS 上的映像檔、可寫入的隨身碟,以及 Update the image (由於存在較新的版本而顯示)。
開機執行後。判定結果、報告讀取來源,以及涵蓋範圍對應圖:每個格子代表一段記憶體,顏色表示測試在那裡發現了什麼。
影片 · 0:52。 從 memhound 隨身碟開機:從開機到判定結果,螢幕會顯示什麼 memhound LiveOS 0.6.5 · VM 開機
影片 · 10:49。 測試能取得的最大 RAM 區塊:從 memhound 隨身碟開機 memhound 可開機 USB

當開機測試未按計畫進行時

  • 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 隨身碟的完整測試。

  1. 透過 SSH 登入 QNAP 伺服器。
  2. 在文字選單 (QTS Console Management) 中,選擇在 Rescue 模式下重新啟動伺服器 (without configured disks)。
  3. 重新啟動後,Qfinder 會把伺服器顯示為「未初始化」(uninitialized)。這是正常的。
  4. 從 Qfinder 啟用 SSH。以 admin 身分登入 (在 QTS 5.2 及更新版本中,預設密碼是雲端密碼;在較舊版本中,它是大寫的完整 MAC 位址,不含冒號)。
  5. 使用下方第一個區塊下載並解壓縮 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 節。

影片 · 2:53。 從命令列執行 memhound:透過 SSH 取得執行檔並執行 memhound CLI · PuTTY · 任何 QNAP

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) 和套組門檻,永遠不會因此放寬。
影片 · 3:49。 測試 RAM 模組的效能:先把 CPU 調速器 (governor) 設為 performance Pulse governor · memhound Benchmark & Quality

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:由處理器和主機板決定,而非系統
平台ECC模組QNAP 機型範例
Intel Celeron、Pentium (Jasper Lake、Gemini Lake)否SODIMM DDR4TS-464、TS-264、TS-664、TS-x53 系列
AMD Ryzen Embedded V1500B、V1000是SODIMM DDR4TS-873A、TS-473A、TS-1273AU
Intel Xeon E、W是UDIMM DDR4TS-883XU、TS-983XU、TVS-h1688X
Intel Atom C3000、C5000是SODIMM、UDIMM DDR4入門企業級機架式機型
Intel Xeon D是RDIMM DDR4ES2486dc
AMD EPYC是RDIMM DDR4TS-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。