精華區beta hardware 關於我們 聯絡資訊
之前有個網友一直說PAE可以解決os能不能用到全部4gb記憶體的問題 (也就是pci以及agp用到4gb頂端近1gb位址空間的問題) 我一直跟他解釋, PAE不能把重疊的位址空間錯開(remapping) PAE是cpu內部的虛擬記憶體機制之一,是做在cpu內部,與主機板chipset無關 PAE能做的只是把虛擬記憶體分頁由兩層便到三層而已 該位網友並不相信這個觀念 為了幫助大家釐清這個觀念 在此和大家討論討論 以下我把該網有的文章轉錄出來 幾個部分釐清 1.PAE是做在cpu內部的虛擬記憶體機制(也就是記憶體管理機制)的一部分 與chipset無關,如過硬要說有關, 大概就是chipset記憶體線要36條以上才能開啟pae模式 不過這應該是廢話,pae就是要讓cpu能使用到64gb的記憶體空間,那 chipset當然要有64gb以上的記憶體空間對應 2.TLB是一種cache,cpu內部的cache是算size的(entry), cache寬度(tlb寬度)不等於 address bus size 3.memory remapping不是由pae or tlb負責,但是32位元的保護模式,必須使用pae 才能使用4gb以上位址空間(k7是使用這個方式來使用超過4gb的記憶體空間) memory remapping在amd系列中 K7=>GART(amd-760 chipset中有)負責 K8=>IOMMU(現在的chipset都有)負責 ===============以下是該網有的文章(眾多討論的其中一篇)===================== 不對, 我完全是在講實體. 以 intel IA32 soft developer manual vol.3 chap 3.8 裡面 有關 PAE 的講法, 確實是產生 36bit address 出去, 而且 TLB 也是 36bit. 而我原本的討論文裡面就是講 K7 在 protect mode 底下, 要 完全的使用 4Gb RAM 的問題, 剛剛才跟 VIA 那邊的人證實過, 不管 MMIO, BIOS, PCI device 跟 DMA block, 以 processor 去看這些都是被 mapping 在 4G 的空間裡面, 也就是說, 如果 要完整的使用到 4Gb memory 的話, 勢必要大於 4G 的空間去 mapping 實體的記憶體空間上去 (因為 DMA 只能存取 low-4G 的空間, 不能移), chipset 也必需要能定址大於 4G 才能夠對 整整 4Gb 的記憶體 re-mapping 到另一個可用的空間上去. 當然, 這些動作 OS 跟 CPU description table 都需要規劃, 必需要把 TLB 對應到該去的位址上去, 但因為你其中一區是 佔滿 4G 的, 所以相對的你 TLB 不對應到 32bit 以上, 你那 4Gb 的記憶體空間勢必要和 MMIO 那些重疊, 要完全使用也是 不可能的事情. 光是基於這一點, 就非 PAE/PSE 36bit addressing 不可, 而 且是 CPU/OS/chipset 三者都必需要支援 36bit addressing, 但今天 K7 的 chipset 沒有支援 36bit address mode, 所以 根本無法使用全部的 4G 空間. 而許多只要是支援 4G 以上 memory 空間的 chipset, 也都支援 那 A32-A35 的 address line, 像我上面講的. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.81.154.161
danceking:好文推~ 06/04 09:28
> -------------------------------------------------------------------------- < 作者: dolphinus (Delphinus#3) 看板: hardware 標題: Re: [討論] memory remapping 時間: Sun Jun 4 10:14:28 2006 我直接承認, 下面下篇文就是我寫的, 也要在這裡提出修正, 還有有些 問題也直接開誠佈公的擺在陽光下討論. ※ 引述《kola12 (kola)》之銘言: : 之前有個網友一直說PAE可以解決os能不能用到全部4gb記憶體的問題 : (也就是pci以及agp用到4gb頂端近1gb位址空間的問題) : 我一直跟他解釋, : PAE不能把重疊的位址空間錯開(remapping) : PAE是cpu內部的虛擬記憶體機制之一,是做在cpu內部,與主機板chipset無關 : PAE能做的只是把虛擬記憶體分頁由兩層便到三層而已 : 該位網友並不相信這個觀念 : 為了幫助大家釐清這個觀念 : 在此和大家討論討論 : 以下我把該網有的文章轉錄出來 : 幾個部分釐清 : 1.PAE是做在cpu內部的虛擬記憶體機制(也就是記憶體管理機制)的一部分 : 與chipset無關,如過硬要說有關, : 大概就是chipset記憶體線要36條以上才能開啟pae模式 : 不過這應該是廢話,pae就是要讓cpu能使用到64gb的記憶體空間,那 : chipset當然要有64gb以上的記憶體空間對應 這裡我要講清楚, 因為 chipset 本身有 DRAM remapping 的設定在, 而 chipset 上掛載的 MMIO address 數量跟 DRAM 總數加起來若是 超過 4G 時, 有兩種做法. 第一個是直接把記憶體蓋到 MMIO address 上, 所以後面的 DRAM 空間也就全部浪費, K7 上就是這樣子. 第二 就是把 DRAM 實體空間切開, 另一部份映射到 4G+ address 上, 在 intel 975 datasheet p.199 頁裡有描述在這種情況下要怎麼操作, 優點是可以全部使用 4G, 缺點是一定要動到 PAE 或 EM64T, 才能對 chipset mapping 到的 4G+ 空間正確存取. 而動到 PAE 也就意味著幾件事 1. performance 的降低. 2. 不管你 怎麼 mapping, float addressing 只能在 32bit 內跑, 而 protect mode 下 float addressing 還是被掉的記憶體大小, 不會是全部, protect mode + PAE 下 4G 以上的空間就跟以前的 XMS 一樣意義, 再加上 OS 的限制, application 能用的空間一般只有 3G 或以下, 以上的只有 OS 自己能動到它. 所以就算可以使用, 也必需要不停的去切換 directory entry 內的 內容到 low 4G 內執行. 所以我下面說全部使用加起來超過 4G 時, 除非是消極的直接應射, 否則非動到 A31+ address 去存取不可. * 也就所以, K7 chipset 在這上面是殘念. * 而且只要動到 PAE mode, Physical address 就是輸出 36bit, 如果 chipset 本身不支援 36bit address 模式的話等同不完全解碼, 會有什麼後果難以想像, 所以我不認為 PAE 啟用時, chipset 可以 完全置身事外, 特別是 memory controller 外接的系統上面. 還有這裡我要回某人, intel 系的 chipset 只要是接 IA32/IA32e 的 CPU 且有 supported 36bit address 的, 都是指支援 PAE/PSE36 或 EM64T 等 address 延申模式, 能不能下到 A35 address order 是看 processor, 而 IA32 上 36bit address 模式也只有 PAE/PSE, 如果有 IA32 別種 36bit address 模式可用, 我很願意聞香. : 2.TLB是一種cache,cpu內部的cache是算size的(entry), : cache寬度(tlb寬度)不等於 address bus size 這邊我要修正下面所講的, protect/PAE/PSE 下, TLB cache line 寬是 20+20+1bit, 高 4bit 給 CR3 管, 而 EM64T 下 page size 是 40bit (但 TLB cache line 是 81 還 82bit 我不確定), 而這 兩者中前者對 TLB 是 32bit 出去, 後者是 48bit 也就是 64TB, float addressing 是 64bit, 也就是 16EB 而非 8TB. 而且你說 這是 databus 寬, 那我再告訴你, K8 內部 bus 都是 128bit, 而 非 64bit, 取 128bit 而非 64bit 的理由很多, 不在這詳述. 而且 TLB 對應的是全部的虛擬頁, 而非虛擬記憶體, 而是包括所有 看的到的位址包括實體包括虛擬, 我想你當初要講的應該是這個. : 3.memory remapping不是由pae or tlb負責,但是32位元的保護模式,必須使用pae : 才能使用4gb以上位址空間(k7是使用這個方式來使用超過4gb的記憶體空間) : memory remapping在amd系列中 : K7=>GART(amd-760 chipset中有)負責 : K8=>IOMMU(現在的chipset都有)負責 GART 只是 memory remapping 功能中的一個, 但不是非 PAE 不可, 我想你要講的是這個. K8 這部份要講整個 HyperTransport, 因為 K8 本身是走 NUMA, 而 HT 能接的不是只有 IO bridge, 它還有接 CPU, 而不管是 CPU 還 IO bridge 都必需設定對方過來的 address 要對應到自己的那 一塊記憶體位址上面, 而這個部份是 K8 本身的 memory manager 在負責, 而非 IOMMU, 也不會是外部 chipset 在管這部份. 如果論 K8 chipset 有能力對 IO address remapping 再送出去的, 我只 想的到 nforce4 (nf2200) 跟 C51XE(這個應該也是 nf4 的變種.), 其它的都只有 PnP 那做完就送出了. 這個差別在那裡? 因為 K8 裡面 address 空間夠寬, 只要 page mode 允取的話就可以切的開空間分配, PAE 下能做但不會比 long-mode 下做的好. reference: IA-32 Intel® Architecture Software Developer’s Manual vol.3A http://download.intel.com/design/Pentium4/manuals/25366819.pdf E7501 chipset datasheet: http://www.intel.com/design/chipsets/applnots/29227401.pdf i975 chipset datasheet: http://download.intel.com/design/chipsets/datashts/31015801.pdf --- 還有就是, 閣下講的話很容易讓人誤解... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 編輯: dolphinus 來自: 211.74.119.20 (06/04 11:07)