Date: Sun, 5 Aug 2001 12:20:36 -0700 (PDT) From: Matt Dillon <dillon@earth.backplane.com> To: Chad David <davidc@acns.ab.ca> Cc: freebsd-hackers@FreeBSD.ORG Subject: Re: Page Coloring Message-ID: <200108051920.f75JKa581920@earth.backplane.com> References: <20010802120335.A11520@colnta.acns.ab.ca>
next in thread | previous in thread | raw e-mail | index | archive | help
: :If I added this to a man page would I be telling the truth :). : :Note, these are my notes and not the exact text that I would :add, and I have not bother with anything to do with object :coloring etc. I just want to make sure I've got this part :down. : :Chad It's a good description but it might be better to simplify it a bit. You don't need to go into that level of detail. There is a short page coloring explanation at the end of my VM article which might be more suitable to a man page: http://www.daemonnews.org/200001/freebsd_vm.html -Matt (quoted from the article): Ok, so now onto page coloring: All modern memory caches are what are known as *physical* caches. They cache physical memory addresses, not virtual memory addresses. This allows the cache to be left alone across a process context switch, which is very important. But in the UNIX world you are dealing with virtual address spaces, not physical address spaces. Any program you write will see the virtual address space given to it. The actual *physical* pages underlying that virtual address space are not necessarily physically contiguous! In fact, you might have two pages that are side by side in a processes address space which wind up being at offset 0 and offset 128K in *physical* memory. A program normally assumes that two side-by-side pages will be optimally cached. That is, that you can access data objects in both pages without having them blow away each other's cache entry. But this is only true if the physical pages underlying the virtual address space are contiguous (insofar as the cache is concerned). This is what Page coloring does. Instead of assigning *random* physical pages to virtual addresses, which may result in non-optimal cache performance , Page coloring assigns *reasonably-contiguous* physical pages to virtual addresses. Thus programs can be written under the assumption that the characteristics of the underlying hardware cache are the same for their virtual address space as they would be if the program had been run directly in a physical address space. Note that I say 'reasonably' contiguous rather than simply 'contiguous'. From the point of view of a 128K direct mapped cache, the physical address 0 is the same as the physical address 128K. So two side-by-side pages in your virtual address space may wind up being offset 128K and offset 132K in physical memory, but could also easily be offset 128K and offset 4K in physical memory and still retain the same cache performance characteristics. So page-coloring does *NOT* have to assign truely contiguous pages of physical memory to contiguous pages of virtual memory, it just needs to make sure it assigns contiguous pages from the point of view of cache performance and operation. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200108051920.f75JKa581920>