推 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)
之前有個網友一直說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