# PSE-36

In computing, PSE-36 (36-bit Page Size Extension) refers to a feature of x86 processors that extends the physical memory addressing capabilities from 32 bits to 36 bits, allowing addressing to up to 64 GB of memory. Compared to the Physical Address Extension (PAE) method, PSE-36 is a simpler alternative to addressing more than 4 GB of memory. It uses the Page Size Extension (PSE) mode and a modified page directory table to map 4 MB pages into a 64 GB physical address space. PSE-36's downside is that, unlike PAE, it doesn't have 4-KB page granularity above the 4 GB mark.
PSE-36 was introduced into the x86 architecture with the Pentium II Xeon and was initially advertised as part of the "Intel Extended Server Memory Architecture" (sometimes abbreviated ESMA), a branding which also included the slightly older PAE (and thus the Pentium Pro, which only supported PAE, was advertised as having only "subset support" for ESMA).
The heyday of PSE-36 was relatively brief. PSE-36's main advantage was that, unlike PAE, it required little rework of the operating system's internals, and thus PSE-36 proved a suitable stopgap measure around the Windows NT 4.0 Enterprise Edition timeframe. Newer Microsoft operating systems, including Windows 2000, support only PAE. Some operating systems like Linux skipped PSE-36 entirely. Despite this, AMD and later Intel chose to provide up to 40 bits PSE support in their 64-bit processors, when operated in legacy mode.

## Operation
### Detection

Support for PSE-36 is indicated by EDX bit 17 (counting from 0) in the cpuid result for feature bits. (This is a different bit from plain PSE support, which is indicated by bit 3 in the same register).

### Activation and use

As far as activating PSE-36, there isn't however a separate bit from the one that turns on PSE. As long the processor (as indicated by cpuid) and chipset support PSE-36, enabling PSE alone (by setting bit 4, PSE, of the system register CR4) allows the use of large 4 MB pages (in the 64 GB range) along with normal 4 KB pages (which are however restricted to the 4 GB range).
If newer PSE-36 capability is available on the CPU, as checked using the CPUID instruction, then 4 more bits, in addition to the 10 bits used in PSE, are used inside a page directory entry pointing to a large page. This allows a large page to be located in 36 bit address space.
The PS bit (bit 7) in the Page Directory Entry (PDE) denotes whether this entry refers to a page table (that describes 1024 4-KiB pages) or one 4 MB page. PDE structures in normal mode, PSE mode, and PSE-36 mode are as follows:
Page Directory Entry for 32 bit paging :
| | 31–22 | 31–22 | 31–22 | 31–22 | 31–22 | 31–22 | 31–22 | 31–22 | 31–22 | 31–22 | 21–17 | 21–17 | 21–17 | 21–17 | 21–17 | 16–13 | 16–13 | 16–13 | 16–13 | 12 | 11–9 | 11–9 | 11–9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| non-PSE | base address of page table | base address of page table | base address of page table | base address of page table | base address of page table | base address of page table | base address of page table | base address of page table | base address of page table | base address of page table | base address of page table | base address of page table | base address of page table | base address of page table | base address of page table | base address of page table | base address of page table | base address of page table | base address of page table | base address of page table | avail | avail | avail | 0 | PS=0 | ign | A | PCD | PWT | U | W | P |
| PSE | bit 31..22 of page frame address | bit 31..22 of page frame address | bit 31..22 of page frame address | bit 31..22 of page frame address | bit 31..22 of page frame address | bit 31..22 of page frame address | bit 31..22 of page frame address | bit 31..22 of page frame address | bit 31..22 of page frame address | bit 31..22 of page frame address | reserved (must be zero) | reserved (must be zero) | reserved (must be zero) | reserved (must be zero) | reserved (must be zero) | reserved (must be zero) | reserved (must be zero) | reserved (must be zero) | reserved (must be zero) | PAT | avail | avail | avail | 0 | PS=1 | D | A | PCD | PWT | U | W | P |
| PSE-36 | bit 31..22 of page frame address | bit 31..22 of page frame address | bit 31..22 of page frame address | bit 31..22 of page frame address | bit 31..22 of page frame address | bit 31..22 of page frame address | bit 31..22 of page frame address | bit 31..22 of page frame address | bit 31..22 of page frame address | bit 31..22 of page frame address | reserved (must be zero) | reserved (must be zero) | reserved (must be zero) | reserved (must be zero) | reserved (must be zero) | bit 35..32 of page frame address | bit 35..32 of page frame address | bit 35..32 of page frame address | bit 35..32 of page frame address | PAT | avail | avail | avail | 0 | PS=1 | D | A | PCD | PWT | U | W | P |
* Page attribute table; since Pentium III, must be zero for older CPUs.
* "Dirty" bit: set to 1 by CPU if there was a write access to that page. For 4 KiB pages this flag exists in the according page table entry (PTE).

### Extension up to 40 bits

AMD extends this scheme to 40 address bits by interpreting bits 20..13 of a PDE as bit 39..32 of the page base address in their AMD64 processors when operated in legacy mode, so only bit 21 is reserved (must be zero). Note however that CR4.PSE is ignored in long mode and PSE-style 4 MB pages are not available in that mode. The total amount of physical memory addressable in AMD64 legacy mode using PSE 4-MB pages is, thus, 1024 GB. Tom Shanley has called this extension PSE-40, although such a designation does not appear in the official AMD documentation.
The latest Intel manuals (February 2014) also indicate support for up to 40 bits in PSE. The exact number of PSE bits supported on Intel CPUs can be less though, and must be determined by using CPUID to query the maximum physical-address width supported by the processor by invoking CPUID with function 80000008H and checking the result in EAX[7:0].

## Usage

Practical usefulness of the PSE-36 feature depends on chipset support for more than 4 GB of RAM. Most chipsets from the Pentium II timeframe did not support this much memory, with 1 GB being the maximum for the Intel 440BX typical desktop chipset, and 2 GB for the 440GX workstation chipset. Only the high-end server Intel 450NX chipset supported 8 GB. Support for PSE-36 (ESMA) was thus usually advertised for servers.
As suitable operating system supporting PSE-36, in 1998 Intel advertised Microsoft Windows NT Server, Enterprise Edition 4.0 and supposedly the upcoming NT 5.0, both enabling use via a PSE36 device driver, which kept most of the operating system unaware of PSE-36 (only the PSE36 driver enabled it temporarily), and which driver had to be called by applications that wanted to access more than 4 GB. Windows NT 4.0 Enterprise Edition thus used the PSE-36 feature essentially as a RAM disk. The PSE36 driver was used by some applications on Windows NT 4.0 Enterprise Edition servers, for example SAP liveCache, Microsoft SQL Server 7.0, Oracle 8.1.5, and IBM DB2. The tuning documentation for the latter noted however that "Unfortunately in most cases performance gains obtained using the PSE-36 driver are not spectacular. In many cases the server will run slower with 8 GB using the PSE-36 driver than it runs with 4 GB without the driver. [...] After more than a year of experimentation and tuning, Microsoft and IBM dropped support for PSE-36 due to insufficient performance gains. The driver is still available for vendors from Intel, but it is not useful for end customer use."
Windows 2000 (NT 5.0) ended up not supporting PSE-36, due to low performance when compared with the alternative PAE. Windows 2000 also replaced the API of the PSE36 driver with a new API called Address Windowing Extensions (AWE), which used PAE underneath. (AWE was only available in the Datacenter Server and Advanced Server of Windows 2000.) Windows applications consequently migrated to this new API, e.g. starting with Oracle 8.1.6 or MS SQL Server 2000.
PSE-36 was never used by Linux.

## Compared to PAE

Physical Address Extension (PAE) is an alternative to PSE-36 which also allows 36-bit addressing. PSE-36 has the advantages that the hierarchy of page tables is not changed, and that page entries keep their old 32-bit format and are not extended to 64 bits. The obvious disadvantage of PSE-36 is that only large pages can be located in 64 GB of physical memory, and small pages can still be located only in the first 4 GB of physical memory.

## Intel Extended Server Memory Architecture

The Intel Extended Server Memory Architecture is defined to include two 36-bit addressing modes in the core processor: PAE-36 and PSE-36.