<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>硬體配置 on KnightLi的博客</title>
        <link>https://knightli.com/zh-tw/tags/%E7%A1%AC%E9%AB%94%E9%85%8D%E7%BD%AE/</link>
        <description>Recent content in 硬體配置 on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Sun, 24 May 2026 00:51:13 +0800</lastBuildDate><atom:link href="https://knightli.com/zh-tw/tags/%E7%A1%AC%E9%AB%94%E9%85%8D%E7%BD%AE/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Above 4G Decoding 是什麼？為什麼多 PCIe 設備、NAS 擴展卡和大顯存顯卡建議開啟</title>
        <link>https://knightli.com/zh-tw/2026/05/24/above-4g-decoding-pcie-mmio-bar-explained/</link>
        <pubDate>Sun, 24 May 2026 00:51:13 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/2026/05/24/above-4g-decoding-pcie-mmio-bar-explained/</guid>
        <description>&lt;p&gt;&lt;code&gt;Above 4G Decoding&lt;/code&gt; 是主板 BIOS 裡的一個底層 PCIe 資源分配選項。它常見於 NAS、小主機、工作站、多顯卡主機、軟路由、HBA / SATA 擴展卡和本地 AI 機器的調試過程中。&lt;/p&gt;
&lt;p&gt;簡單說，它的作用是：允許 64 位系統把 PCIe 設備需要的 MMIO 地址空間，分配到 4GB 以上的物理地址範圍。&lt;/p&gt;
&lt;p&gt;這句話聽起來很底層，但它解決的問題很現實：當主板上插了顯卡、NVMe、網卡、SATA 擴展卡、採集卡、HBA 等多個 PCIe 設備時，如果所有設備都擠在 4GB 以下的老地址空間裡搶位置，就可能出現資源分配失敗、設備不識別，甚至開機卡死。&lt;/p&gt;
&lt;h2 id=&#34;為什麼會有-4gb-這個邊界&#34;&gt;為什麼會有 4GB 這個邊界
&lt;/h2&gt;&lt;p&gt;4GB 邊界來自 32 位時代的歷史包袱。&lt;/p&gt;
&lt;p&gt;32 位地址空間最大只能尋址：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2^32 bytes = 4GB
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;現代電腦早就是 64 位 CPU 和 64 位作業系統，記憶體也經常是 16GB、32GB、64GB 甚至更多。但主板在開機自檢和 PCIe 設備初始化時，仍然需要考慮舊式相容性。很多 PCIe 設備的資源映射預設會先被安排在 4GB 以下的地址空間內。&lt;/p&gt;
&lt;p&gt;問題在於，4GB 以下的空間並不全是給記憶體用的。系統還要在裡面劃出一部分地址給硬體設備使用。&lt;/p&gt;
&lt;p&gt;這就是 &lt;code&gt;MMIO&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;mmio-是什麼&#34;&gt;MMIO 是什麼
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;MMIO&lt;/code&gt; 是 Memory-Mapped I/O，記憶體映射輸入輸出。&lt;/p&gt;
&lt;p&gt;CPU 不能像讀寫普通記憶體那樣直接「摸到」PCIe 設備內部的暫存器和顯存。它需要把設備的一部分暫存器、緩衝區或顯存窗口映射到系統地址空間中。CPU 讀寫這段地址，就等於在和設備通信。&lt;/p&gt;
&lt;p&gt;可以粗略理解為：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;設備需要一塊地址範圍。&lt;/li&gt;
&lt;li&gt;主板給它分配一段系統物理地址。&lt;/li&gt;
&lt;li&gt;CPU 訪問這段地址時，實際訪問的是 PCIe 設備。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這塊映射區域不是真的普通 RAM，而是硬體設備占用的地址窗口。&lt;/p&gt;
&lt;p&gt;在舊式預設配置下，很多設備的 MMIO 區域會被限制在 4GB 以下，常見就是 3GB 到 4GB 附近那段空間。設備少時通常沒問題，設備一多就開始擁擠。&lt;/p&gt;
&lt;h2 id=&#34;bar-是什麼&#34;&gt;BAR 是什麼
&lt;/h2&gt;&lt;p&gt;每個 PCIe 設備都會透過 &lt;code&gt;BAR&lt;/code&gt; 向主板宣告自己需要多少地址空間。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;BAR&lt;/code&gt; 是 Base Address Register，基地址暫存器。它的作用是告訴主板：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;我需要一塊 MMIO 空間，請給我分配一個地址範圍。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;顯卡、NVMe、SATA 控制器、網卡、HBA、USB 擴展卡都可能需要 BAR 空間。設備越多，占用的地址窗口越多。顯卡這類設備還可能需要更大的映射空間。&lt;/p&gt;
&lt;p&gt;如果 4GB 以下可用 MMIO 空間不夠，主板就可能無法給後插入的設備分配資源。&lt;/p&gt;
&lt;h2 id=&#34;不開啟它可能出現什麼問題&#34;&gt;不開啟它，可能出現什麼問題
&lt;/h2&gt;&lt;p&gt;如果關閉 &lt;code&gt;Above 4G Decoding&lt;/code&gt;，主板會更傾向於把 PCIe 設備資源塞進 4GB 以下的地址空間。設備少時看不出來，設備多時就可能出現問題。&lt;/p&gt;
&lt;p&gt;常見場景包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一塊獨立顯卡。&lt;/li&gt;
&lt;li&gt;一個或多個 NVMe SSD。&lt;/li&gt;
&lt;li&gt;一張 JMB585 / ASM1166 SATA 擴展卡。&lt;/li&gt;
&lt;li&gt;一張 2.5G / 10G 網卡。&lt;/li&gt;
&lt;li&gt;一個 Wi-Fi / 藍牙模組。&lt;/li&gt;
&lt;li&gt;額外的 HBA、採集卡、USB 擴展卡。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這些設備都要向主板申請 BAR / MMIO 地址空間。如果 4GB 以下空間被占滿，主板可能會出現：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;某張 PCIe 卡無法識別。&lt;/li&gt;
&lt;li&gt;BIOS 裡看不到設備。&lt;/li&gt;
&lt;li&gt;Linux / Windows 裡設備缺失或報資源錯誤。&lt;/li&gt;
&lt;li&gt;開機卡在 POST 階段。&lt;/li&gt;
&lt;li&gt;黑屏或光標閃爍。&lt;/li&gt;
&lt;li&gt;多設備同時插入時才出問題，單獨插每張卡又正常。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在 JMB585 SATA 擴展卡場景裡，很多人會遇到插卡後主板卡在 BIOS 前，或者加了 NVMe、網卡後擴展卡突然不識別。除了 Option ROM、CSM、PCIe Gen 速率之外，PCIe 地址空間分配也是一個值得排查的方向。&lt;/p&gt;
&lt;h2 id=&#34;開啟-above-4g-decoding-後發生了什麼&#34;&gt;開啟 Above 4G Decoding 後發生了什麼
&lt;/h2&gt;&lt;p&gt;開啟：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Above 4G Decoding = Enabled
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;等於告訴主板：允許把支援 64 位地址的 PCIe 設備 MMIO 資源，分配到 4GB 以上的地址空間。&lt;/p&gt;
&lt;p&gt;這樣，PCIe 設備不必全部擠在 4GB 以下的小空間裡。主板可以把部分設備的 BAR / MMIO 映射放到更高地址，減少資源衝突。&lt;/p&gt;
&lt;p&gt;對現代 64 位系統來說，這通常是合理配置。尤其是以下機器：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;多盤 NAS。&lt;/li&gt;
&lt;li&gt;多網卡軟路由。&lt;/li&gt;
&lt;li&gt;插了 SATA / HBA 擴展卡的小主機。&lt;/li&gt;
&lt;li&gt;多顯卡工作站。&lt;/li&gt;
&lt;li&gt;AI 推理或訓練機器。&lt;/li&gt;
&lt;li&gt;同時有獨顯、NVMe、採集卡、擴展卡的桌面主機。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它的目標不是提升普通軟體性能，而是讓硬體資源分配更寬鬆。&lt;/p&gt;
&lt;h2 id=&#34;它和-jmb585--sata-擴展卡有什麼關係&#34;&gt;它和 JMB585 / SATA 擴展卡有什麼關係
&lt;/h2&gt;&lt;p&gt;JMB585 這類 SATA 擴展卡本身不一定需要很大的 MMIO 空間。但問題往往不是它單獨需要多少，而是整台機器上所有 PCIe 設備一起搶地址空間。&lt;/p&gt;
&lt;p&gt;例如一台小主機裡可能同時有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一個 NVMe 系統盤。&lt;/li&gt;
&lt;li&gt;一個板載網卡。&lt;/li&gt;
&lt;li&gt;一個 Wi-Fi 模組。&lt;/li&gt;
&lt;li&gt;一張 JMB585 五口 SATA 擴展卡。&lt;/li&gt;
&lt;li&gt;可能還有獨立顯卡或其他控制器。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果 BIOS 資源分配比較保守，JMB585 可能成為最後一個被初始化的設備。前面的設備已經占掉不少 4GB 以下資源，到它申請 BAR 時，主板就可能分配失敗或進入異常狀態。&lt;/p&gt;
&lt;p&gt;這時開啟 &lt;code&gt;Above 4G Decoding&lt;/code&gt;，可以讓主板把一部分設備資源安排到 4GB 以上，從而降低衝突機率。&lt;/p&gt;
&lt;p&gt;它不能修復壞卡，也不能解決所有 PCIe 鏈路訓練問題，但在「多設備插滿後才異常」的場景裡非常值得嘗試。&lt;/p&gt;
&lt;h2 id=&#34;它和-resizable-bar--sam-的關係&#34;&gt;它和 Resizable BAR / SAM 的關係
&lt;/h2&gt;&lt;p&gt;很多人是因為顯卡效能設定才第一次見到 &lt;code&gt;Above 4G Decoding&lt;/code&gt;。例如 NVIDIA / AMD 顯卡相關的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Resizable BAR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Re-Size BAR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ReBAR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Smart Access Memory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SAM&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它們和 &lt;code&gt;Above 4G Decoding&lt;/code&gt; 有關係，但不是同一個東西。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Above 4G Decoding&lt;/code&gt; 是基礎條件。它允許 PCIe 設備的 MMIO 資源被分配到 4GB 以上。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Resizable BAR&lt;/code&gt; 是進一步的能力。傳統情況下，CPU 訪問顯卡顯存時，通常只能通過較小窗口分段訪問，例如 256MB 級別的映射窗口。啟用 ReBAR 後，CPU 可以一次性映射更大範圍的顯存，理論上能減少訪問切換開銷。&lt;/p&gt;
&lt;p&gt;很多主板要求先開啟 &lt;code&gt;Above 4G Decoding&lt;/code&gt;，再開啟 &lt;code&gt;Resizable BAR&lt;/code&gt;。所以可以理解為：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Above 4G Decoding&lt;/code&gt;：先允許設備地址放到 4GB 以上。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Resizable BAR&lt;/code&gt; / &lt;code&gt;SAM&lt;/code&gt;：再允許顯卡 BAR 窗口變大。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;對 NAS 和 SATA 擴展卡來說，重點通常不是 ReBAR，而是前者提供的 PCIe 地址空間。&lt;/p&gt;
&lt;h2 id=&#34;開啟它有什麼副作用&#34;&gt;開啟它有什麼副作用
&lt;/h2&gt;&lt;p&gt;對現代 64 位 Windows、Linux、Ubuntu、Debian、TrueNAS、Proxmox 等系統來說，開啟 &lt;code&gt;Above 4G Decoding&lt;/code&gt; 通常沒有明顯負面影響。&lt;/p&gt;
&lt;p&gt;但仍然要注意幾點：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;老舊 32 位作業系統可能不適合開啟。&lt;/li&gt;
&lt;li&gt;某些很老的 BIOS 或古董 PCIe 設備可能相容性不好。&lt;/li&gt;
&lt;li&gt;修改 BIOS 後如果無法啟動，可以清 CMOS 或恢復預設設置。&lt;/li&gt;
&lt;li&gt;如果啟用了 ReBAR / SAM，還要確認顯卡、主板、系統和驅動都支援。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在現代硬體和 64 位系統上，它通常是建議開啟的底層良性配置，尤其是設備較多時。&lt;/p&gt;
&lt;h2 id=&#34;什麼時候建議開啟&#34;&gt;什麼時候建議開啟
&lt;/h2&gt;&lt;p&gt;以下情況建議開啟 &lt;code&gt;Above 4G Decoding&lt;/code&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 64 位作業系統。&lt;/li&gt;
&lt;li&gt;主板上插了多張 PCIe 設備。&lt;/li&gt;
&lt;li&gt;有獨立顯卡，尤其是 4GB 以上顯存的顯卡。&lt;/li&gt;
&lt;li&gt;使用 JMB585、ASM1166、HBA、陣列卡、採集卡等擴展設備。&lt;/li&gt;
&lt;li&gt;組裝多盤 NAS 或軟路由。&lt;/li&gt;
&lt;li&gt;使用多顯卡、AI 算力卡或本地大模型機器。&lt;/li&gt;
&lt;li&gt;插上某張 PCIe 卡後開機卡死、找不到特定 PCIe 卡。&lt;/li&gt;
&lt;li&gt;單獨插設備正常，多設備一起插就異常。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你正在排查 JMB585 SATA 擴展卡 POST 階段卡死，推薦把它和這些設定一起檢查：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;關閉 &lt;code&gt;CSM&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;禁用不需要的 &lt;code&gt;Storage OpROM&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;將 PCIe 速率從 &lt;code&gt;Auto&lt;/code&gt; 或 &lt;code&gt;Gen3&lt;/code&gt; 改成 &lt;code&gt;Gen2&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;開啟 &lt;code&gt;Above 4G Decoding&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;更換 PCIe 插槽。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;在-bios-裡一般叫什麼&#34;&gt;在 BIOS 裡一般叫什麼
&lt;/h2&gt;&lt;p&gt;不同主板廠商命名略有差異，常見名稱包括：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Above 4G Decoding
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Above 4GB MMIO BIOS assignment
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Memory Mapped I/O above 4GB
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;64-bit PCIe decoding
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PCI 64-bit Resource Handling
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;常見位置包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Advanced&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PCIe Settings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PCI Subsystem Settings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Chipset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;North Bridge&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IO Ports&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Boot&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有些主板會把它和 &lt;code&gt;Resizable BAR&lt;/code&gt; 放在一起，有些則藏在高級 PCIe 或芯片組選項裡。&lt;/p&gt;
&lt;h2 id=&#34;小結&#34;&gt;小結
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Above 4G Decoding&lt;/code&gt; 的核心作用，是讓主板可以把 PCIe 設備的 MMIO / BAR 地址空間分配到 4GB 以上。它解決的不是驅動問題，而是 BIOS / PCIe 資源分配層面的地址空間問題。&lt;/p&gt;
&lt;p&gt;對只有少量設備的普通電腦來說，它可能看起來無感。對多盤 NAS、多網卡軟路由、插了 JMB585 / ASM1166 SATA 擴展卡的小主機、多顯卡工作站、本地 AI 主機來說，它就很重要。&lt;/p&gt;
&lt;p&gt;如果你遇到插上 PCIe 擴展卡後卡 BIOS、黑屏、光標閃爍、設備不識別，或者多設備同時插入才出問題，&lt;code&gt;Above 4G Decoding = Enabled&lt;/code&gt; 是一個值得優先檢查的 BIOS 設置。它不是萬能藥，但它能讓現代 64 位硬體擺脫 4GB 以下地址空間的舊限制，減少 PCIe 資源衝突。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
