硬體現實、資源限制與深度效能監控
QNAP NAS 感覺變慢時,先從它的硬體能做到什麼開始查。接著看 NAS 把資源花在哪裡,最後才看更深層的佇列:卡在 I/O 的處理程序,以及搶處理器的虛擬機。
- 期望此硬體的用途
- 基準停止額外服務,觀察 RAM 與 SWAP
- D 狀態卡在 I/O 的處理程序
- vCPU執行緒、超額配置、竊取 (steal)
- 圖表正確解讀 BlackBox 與 Pulse
01硬體期望與現實
QNAP 伺服器用的是與價格相符的零件。QNAP 仍為機齡超過十年的機型提供韌體更新,但這不表示舊款或入門級 NAS 能毫無妥協地執行現今的各種應用程式。軟體會越做越大,硬體卻還是原來那樣。
平價 NAS 的設計目的是順暢地提供檔案服務。期望它毫無問題地執行虛擬機或大型資料庫,是誤解了它的定位。請確認處理器和記憶體實際能做到什麼,並為自己選擇的硬體負責。NAS 的核心工作是處理檔案;其他一切都是附加功能,只能在剩下的資源內執行。
02分支 1:透過隔離服務建立基準
當 NAS 變慢時,尤其是當記憶體耗盡並開始使用 SWAP (這會大幅減緩所有操作) 時,第一個診斷步驟是隔離服務。
- 登入 QTS 或 QuTS hero。
- 開啟 App Center 並逐一停止非必要的應用程式和服務。Workbench 不會替您停止應用程式。
- 在 QTS 的資源監控器 (Resource Monitor) 或 Workbench 的 Pulse (Utilities 桌面,開始功能表 → Monitoring → Pulse;僅限管理員) 中觀察系統。其儀表板每兩秒更新一次:CPU 負載 (每個邏輯 CPU 一個長條圖)、已用 RAM 與總 RAM 的對比 (page cache 獨立顯示)、當 NAS 有置換空間 (swap) 時的 SWAP 長條圖、1 分鐘負載以及執行佇列 (run queue)。觀察 CPU 負載和使用中的 SWAP 是否下降。
- 找出基準 (baseline):持續停止服務,直到 NAS 的核心功能,也就是順暢的檔案服務,完全恢復。
這就是您硬體的基準。從這裡開始,一次啟動一個其他應用程式,並嚴格控制在硬體剩餘的資源範圍內。
03分支 2:D 狀態與隱藏的瓶頸
有時問題並非 CPU 負載過重或 RAM 不足。當處理程序處於不可中斷的睡眠狀態 (即 D 狀態) 時,系統可能會在處理器遠未滿載的情況下停滯。用 Workbench 自己的話來說,處於 D 狀態的處理程序是卡在等待核心 I/O (磁碟、網路檔案系統、當機的驅動程式),且在該 I/O 完成前甚至無法將其強制結束。許多處理程序處於 D 狀態,表示它們正在排隊 (通常卡在緩慢的磁碟 I/O 後面),裝置就會凍結。
NAS 上跑虛擬機 (Virtualization Station、KVM) 時,這種排隊的傷害最大。資源分配不當時,會出現網路封包遺失和很長的 I/O 延遲。
- 只要有一個處理程序處於 D 狀態,Pulse 就會顯示 Processes in D-state (I/O),超過兩個時則標為 critical (危急)。在它的 Processes 分頁中,D + Z 僅顯示卡住的 (D) 和殭屍 (Z) 處理程序及其父程序。
- 從套件執行的那一刻起,BlackBox 每 20 秒就會記錄一次 NAS 狀態;您不需要開啟任何東西。它會記錄 CPU 負載、iowait 和各個核心的時脈、負載、執行佇列和 Blocked (D);已使用和可用的記憶體、page cache、swap 和 OOM kills;各介面的流量、丟棄和 TCP 重新傳輸;各個磁碟的 await、佇列深度和使用率;溫度和風扇;以及各個 VM 的 CPU、vCPU、記憶體和磁碟 I/O。它會將每 20 秒的樣本保留一天,然後以每分鐘為單位彙總保留一週,以每五分鐘為單位保留一個月,並以每小時為單位保留一年。
- 兩種不同的 D 計數。BlackBox 的 Blocked (D) 是核心記錄被阻擋任務的計數;Pulse 則是計算它看到處於 D 狀態的處理程序。兩者不一定相同。
- iowait,而非 PSI。QNAP 的核心在編譯時未包含 pressure stall information,因此 Workbench 以 iowait 衡量 I/O 延遲。
04CPU 分配:pCPU、lCPU 與 vCPU
在為 VM 分配資源之前,請先了解拓撲:
- pCPU (實體 CPU):NAS 處理器上實際的實體核心。
- lCPU (邏輯 CPU):作業系統看到的核心,包含超執行緒 (Hyper-Threading)。超執行緒不會使效能翻倍;根據經驗法則,它能增加大約 30% 的吞吐量。
- vCPU (虛擬 CPU):分配給 VM 的虛擬核心。
Pulse 計算的是邏輯 CPU:在六核心、十二執行緒的 Xeon W-1250 上,它顯示的 12 cores 其實是執行緒。
超額配置的陷阱。 在 32 核心的處理器上分配 128 個 vCPU 給 VM,是假設它們永遠不會同時滿載。當它們同時滿載時,Hypervisor 無法夠快地排程 vCPU,VM 就會停滯等待 CPU 時間,這在客體 (guest,即虛擬機的作業系統) 內部會顯示為竊取時間 (steal time)。Pulse 會從主機端 (host) 報告此情況:
- vCPU over-subscription (資訊):當執行中的 VM 擁有的 vCPU 數量多於 NAS 擁有的邏輯 CPU 數量時;
- VMs contending for CPU (警告):除此之外,主機忙碌度還超過 75%,或執行佇列長於執行緒數量時。這台 NAS 上的附註:Over-subscribed (17 vCPUs / 12 cores) AND the host is busy (84%, queue 11) — your VMs are likely contending for physical cores NOW. This is CPU theft, host-side.
- 竊取時間 (Steal time) 是在客體內部測量的。在 NAS 上,它本來就一定是零;Workbench 自己的註解也說,從主機端看不到客體的竊取時間。請透過 vCPU 對執行緒的比例、忙碌百分比和執行佇列來判斷 NAS 上的競爭 (contention),並在 VM 內部讀取 steal 值 (在 Linux 客體中為
top或vmstat的st欄位)。
05觀察虛擬機
Workbench 不需要在 VM 中安裝代理程式。它測量的是自己所在的 NAS,也包括這台 NAS 上的虛擬機:
- 開啟 Pulse,VM 分頁:每個執行中的 VM 及其 vCPU、CPU%、記憶體、RSS、狀態和處理程序 ID,以及標題列 Hosting 4 VM(s), 17 vCPUs。
- 開啟 BlackBox (開始功能表 → Monitoring),切換至 Heat map 並開啟 Virtual machines 通道:每台 VM 一整天的 CPU 使用率,旁邊顯示溫度與磁碟 await。其圖表也會保留每台 VM 的 vCPU、記憶體與磁碟 I/O,以及每台 VM 的啟動與停止時間。
- 若要查看 VM 的網路連線狀況,請在 BlackBox 的 Settings → Monitored hosts 之下新增其位址:接著 BlackBox 會記錄其往返時間 (round trip) 與封包遺失 (packet loss) 狀況。
- 在 VM 內部,用客體自己的工具觀察它的竊取時間 (steal time)。
Virtual Machines · LOCAL 視窗 (Local NAS → Virtual Machines) 顯示每台 VM 從 Virtualization Station 取得的配置:其 vCPU、拓撲、CPU 集合、CPU 模型、磁碟與網路卡。開啟此視窗會將 QNAP 自帶的診斷資料傾印至 Workbench 的快取中;這不會改變任何設定。
06解讀圖表:關鍵狀態
- 高 D 狀態與 I/O 延遲。處理程序正在等待磁碟。BlackBox 的每週報告將其稱為 Processes waiting on storage (第 95 百分位數的 iowait 若達到 20% 或以上即為警告,40% 或以上為危急),並點出最忙碌的磁碟名稱;Slow array member 會標記 await 達到同陣列其他磁碟兩倍、且至少為 50 毫秒 (200 毫秒為危急) 的磁碟,而 Disk with no headroom 則是標記連續兩小時忙碌程度達到 90% 或以上的磁碟。解決方法就如作者的建議:將 VM 移至 SSD 磁碟區,檢查磁碟的健康狀態 (效能指南),並檢查是否有其他處理程序使 RAID 飽和。
- 高 CPU 佇列。NAS 的處理器已超額配置:Pulse 顯示 VMs contending for CPU,而每週報告中的 Virtual machine hogging the host 會標出 CPU 用量達單一核心 150% 以上 (300% 為危急) 的 VM。請減少 VM 的 vCPU:每台 VM 先給一到兩個,只有在客體真的需要時才增加。
- 散熱降頻 (Thermal throttling)。CPU 溫度高,隨後時脈降低且延遲變長,代表處理器正在過熱。每週報告將此稱為 CPU thermal throttling:當 CPU 忙碌程度至少達到 60% 時,核心以其自身平時時脈的 60% 或更低速度運作。在熱圖上,65 °C 為琥珀色,80 °C 為紅色。Workbench 自己的建議:清除散熱器、風扇和進氣口的灰塵,檢查風扇是否運轉,並改善空氣流通或降低室溫;在 QTS 中提高風扇速度也有幫助。
07KVM 良好做法:CPU 模型
- Host / passthrough (推薦):將 NAS 處理器本身傳遞給 VM,並包含其具備的每個指令集 (例如 AVX)。它在單一 NAS 上提供最佳效能和最少的負擔 (overhead)。
- 模擬模型 (一般的 Intel 或 AMD CPU):隱藏主機的處理器。在叢集中,它方便在不同的實體主機之間移動執行中的 VM;在單一 NAS 上,它只會犧牲效能。
Virtual Machines · LOCAL 視窗顯示每台 VM 被分配的 CPU 模型 (例如 Westmere) 及其拓撲;Workbench 不會對此選擇進行評判。
08基礎知識:資源超額配置 (overcommit)
在 NAS 能力的極限附近,如何避免拖垮 VM 的效能。vCPU 與實體核心 (pCPU) 的比例,是第一個值得計算的數字:
| 資源 | 收益 | 風險 | 建議 |
|---|---|---|---|
| CPU (vCPU : pCPU) | 更多 VM,為短暫的爆發提供廉價的餘裕空間 | 在飽和狀態下,竊取 (steal) 和佇列會減慢每台 VM 的速度 | 正式環境 2:1–4:1,關鍵 VM 最多 2:1;主機保持在 80 % 以下 |
| RAM (ballooning,動態記憶體) | 記憶體可即時移動,適合閒置的 VM | 主機進行置換 (swapping) 會導致效能急劇下降 | 絕對不要讓主機置換使用中的頁面;為關鍵 VM 保留記憶體 |
| 儲存 (thin) | 節省空間,瞬間建立磁碟 | 滿載的資料存放區 (datastore) 會立刻讓 VM 停止運作 | 在 75–85 % 時發出警報;回收空間 (UNMAP);關鍵資料建議使用 thick |
一般規則。在輕度且不平均的負載並配合主動監控的情況下,超額配置是安全的,但在沒有餘裕空間的尖峰時段則非常危險。請保留備用資源。
提示
- 從每台 VM 分配 1 個 vCPU 開始,並且只有在負載需要時才增加。過多的 vCPU 只代表排程器的負擔增加,而非速度提升。
- 計算實體核心,而不是執行緒。 不要讓所有 VM 總共獲得的 vCPU 數量超過主機擁有的核心數。
- 保持主機 CPU 在 80 % 以下。 超過 90 % 時,VM 會開始爭奪週期,客體內部的竊取時間 (steal) 也會增加。
- 在客體中看 top:%wa 代表等待 I/O (磁碟瓶頸),%st 代表竊取 (過度超額配置),%id 代表備用容量。
- %wa 高?需要更快的儲存裝置或 SSD。%st 高?減少 vCPU 或減少 VM 數量。
- 針對磁碟和網路使用 VirtIO,比模擬快得多。只有在真正需要時才使用 PCIe 或 GPU 直通 (passthrough):因為此時裝置將由一台 VM 獨佔。
VM 快照不是備份
快照只記錄與其基礎點的差異 (對磁碟的變更,如果儲存了狀態,還包括記憶體)。基礎點或快照鏈一旦損壞,快照也會跟著失效。如需真正的保護,請備份整個 VM 映像檔:透過匯出、HBS 或使用獨立媒體。