IP Library Granted Patent US 7,594,093
Granted Patent B1
US 7,594,093 · App. 11/580,339 · Granted Sep 22, 2009

Virtual memory mapping for efficient memory usage

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 7,594,093
App. No.
11/580,339
Granted
Sep 22, 2009
Kind
B1
Abstract

A processor (e.g. utilizing an operating system and/or circuitry) may access physical memory by paging, where a page is the smallest partition of memory mapped by the processor from a virtual address to a physical address. An application program executing on the processor addresses a virtual address space so that the application program may be unaware of physical memory paging mechanisms. A memory control layer manages physical memory space in units of sub-blocks, wherein a sub-blocks is smaller than a size of the page. Multiple virtual address blocks may be mapped to the same physical page in memory. A sub-block can be moved from a page (e.g. from one physical memory to a second physical memory) without moving other sub-blocks within the page in a manner that is transparent to the application program.

Claims (81)

1. A system comprising:

a memory control module configured to:

select, based on a size of first data, a first sub-block from a set of sub-blocks having sub-blocks of at least two different sizes, wherein the first sub-block is resident in a first page of physical memory, and wherein the first sub-block has a size smaller than a predetermined page size;

map a first virtual address associated with the first data to the first page of physical memory; and

allocate the first sub-block for storing the first data.

2. The system of claim 1 wherein the memory control module is further configured to:

select, based on a size of second data, a second sub-block from the set of sub-blocks, the second sub-block also being resident in the first page of physical memory;

map a second virtual address associated with the second data to the first page of physical memory; and

allocate the second sub-block for storing the second data.

3. The system of claim 2 wherein the memory control module is further configured to move the first sub-block from a first physical memory to a second physical memory without moving the second sub-block from the first physical memory.

4. The system of claim 3 wherein the first physical memory comprises expensive storage and the second physical memory comprises inexpensive storage.

5. The system of claim 2 wherein a size of the first sub-block and a size of the second sub-block are the same.

6. The system of claim 2 wherein a size of the first sub-block and a size of the second sub-block are different.

7. The system of claim 1 wherein the system further comprises a packet processor configured to receive a data packet, and wherein the first sub-block is selected from the set of sub-blocks based upon a size of the data packet.

8. A method comprising:

selecting, based on a size of first data, a first sub-block from a set of sub-blocks having sub-blocks of at least two different sizes, wherein the first sub-block is resident in a first page of physical memory, and wherein the first sub-block is smaller than a predetermined page size;

mapping a first virtual address associated with the first data to the first page of physical memory; and

allocating the first sub-block for storing the first data.

9. The method of claim 8 further comprising:

selecting, based on a size of second data, a second sub-block from the set of sub-blocks, the second sub-block also being resident in the first page of physical memory;

mapping a second virtual address associated with the second data to the first page of physical memory; and

allocating the second sub-block for storing the second data.

10. The method of claim 9 further comprising moving the first sub-block from a first physical memory to a second physical memory without moving the second sub-block from the first physical memory.

11. The method of claim 9 wherein a size of the first sub-block is the same as a size of the second sub-block.

12. The method of claim 9 wherein a size of the first sub-block is different from a size of the second sub-block.

13. The method of claim 8 further comprising receiving a data packet, wherein the first sub-block is selected from the set of sub-blocks based on a size of the data packet.

14. A system comprising:

a processor configured to:

specify a first virtual address; and

map the first virtual address to a first sub-block in a first page of memory, the first sub-block having a size smaller than a predetermined page size,

wherein a size of the first sub-block is based upon a size of a received data packet.

15. The system of claim 14 wherein the processor is further configured to:

specify a second virtual address; and

map the second virtual address to a second sub-block in the first page.

16. The system of claim 15 wherein the processor is further configured to move the first sub-block from a first physical memory to a second physical memory and not move the second sub-block from the first physical memory.

17. The system of claim 15 wherein a size of the first sub-block is the same as a size of the second sub-block.

18. The system of claim 15 wherein a size of the first sub-block is different than a size of the second sub-block.

19. A network switch comprising:

a switching fabric; and

plural blades coupled to the switching fabric, at least one of the blades comprising:

a memory control module configured to:

select, based on a size of first data, a first sub-block from a set of sub-blocks having sub-blocks of at least two different sizes, wherein the first sub-block is resident in a first page of physical memory, and wherein the first sub-block has a size smaller than the first page;

map a first virtual address associated with the first data to the first page of physical memory; and

allocate the first sub-block for storing the first data.

20. The network switch of claim 19 wherein the memory control module is further configured to:

select, based on a size of second data, a second sub-block from the set of sub-blocks, the second sub-block also being resident in the first page of physical memory;

map a second virtual address associated with the second data to the first page of physical memory; and

allocate the second sub-block for storing the second data.

21. The system of claim 1 wherein the set of sub-blocks includes at least a first pool of sub-blocks having sub-blocks of a first size and a second pool of sub-blocks having sub-blocks of a second size,

wherein the first size is smaller than the second size, and

wherein selecting the first sub-block comprises:

determining if there are free sub-blocks available in the first pool;

if there are free sub-blocks available in the first pool, determining if the size of the first data is greater than the first size; and

if the size of the first data is not greater than the first size, allocating a free sub-block from the first pool for storing the first data.

22. The system of claim 21 wherein selecting the first sub-block further comprises:

if there are no free sub-blocks available in the first pool or if the size of the first data is greater than the first size, determining if there are free sub-blocks available in the second pool;

if there are free sub-blocks available in the second pool, determining if the size of the first data is greater than the second size;

if the size of the first data is not greater than the second size, allocating a free sub-block from the second pool for storing the first data; and

if there are no free sub-blocks available in the second pool or if the size of the first data is greater than the second size, generating an error indicating that no appropriate sub-block can be allocated.

23. The method of claim 8 wherein the set of sub-blocks includes at least a first pool of sub-blocks having sub-blocks of a first size and a second pool of sub-blocks having sub-blocks of a second size,

wherein the first size is smaller than the second size, and

wherein selecting the first sub-block comprises:

determining if there are free sub-blocks available in the first pool;

if there are free sub-blocks available in the first pool, determining if the size of the first data is greater than the first size; and

if the size of the first data is not greater than the first size, allocating a free sub-block from the first pool for storing the first data.

24. The method of claim 23 wherein selecting the first sub-block further comprises:

if there are no free sub-blocks available in the first pool or if the size of the first data is greater than the first size, determining if there are free sub-blocks available in the second pool;

if there are free sub-blocks available in the second pool, determining if the size of the first data is greater than the second size;

if the size of the first data is not greater than the second size, allocating a free sub-block from the second pool for storing the first data; and

if there are no free sub-blocks available in the second pool or if the size of the first data is greater than the second size, generating an error indicating that no appropriate sub-block can be allocated.

25. The network switch of claim 19 wherein the set of sub-blocks includes at least a first pool of sub-blocks having sub-blocks of a first size and a second pool of sub-blocks having sub-blocks of a second size,

wherein the first size is smaller than the second size, and

wherein selecting the first sub-block comprises:

determining if there are free sub-blocks available in the first pool;

if there are free sub-blocks available in the first pool, determining if the size of the first data is greater than the first size; and

if the size of the first data is not greater than the first size, allocating a free sub-block from the first pool for storing the first data.

26. The network switch of claim 25 wherein selecting the first sub-block further comprises:

if there are no free sub-blocks available in the first pool or if the size of the first data is greater than the first size, determining if there are free sub-blocks available in the second pool;

if there are free sub-blocks available in the second pool, determining if the size of the first data is greater than the second size;

if the size of the first data is not greater than the second size, allocating a free sub-block from the second pool for storing the first data; and

if there are no free sub-blocks available in the second pool or if the size of the first data is greater than the second size, generating an error indicating that no appropriate sub-block can be allocated.