ROOT
6.06/09
Reference Guide
|
class representing a chunk of pages
allocating pages from the OS happens in chunks in order to not exhaust the maximum allowed number of memory mappings per process; this class takes care of such a chunk
a page chunk allows callers to obtain or release pages in groups of continuous pages of fixed size
Definition at line 44 of file BidirMMapPipe.h.
Public Types | |
enum | MMapVariety { Unknown, Copy, FileBacked, DevZero, Anonymous } |
type of mmap support found More... | |
Public Member Functions | |
PageChunk (PagePool *parent, unsigned length, unsigned nPgPerGroup) | |
constructor More... | |
~PageChunk () | |
destructor More... | |
bool | contains (const Pages &p) const |
return if p is contained in this PageChunk More... | |
Pages | pop () |
pop a group of pages off the free list More... | |
void | push (const Pages &p) |
push a group of pages onto the free list More... | |
unsigned | len () const |
return length of chunk More... | |
unsigned | nPagesPerGroup () const |
return number of pages per page group More... | |
bool | empty () const |
return true if no used page groups in this chunk More... | |
bool | full () const |
return true if no free page groups in this chunk More... | |
void | zap (Pages &p) |
free all pages except for those pointed to by p More... | |
Static Public Member Functions | |
static unsigned | pagesize () |
return the page size of the system More... | |
static MMapVariety | mmapVariety () |
return mmap variety support found More... | |
Private Types | |
typedef BidirMMapPipeException | Exception |
convenience typedef More... | |
Private Member Functions | |
PageChunk (const PageChunk &) | |
forbid copying More... | |
PageChunk & | operator= (const PageChunk &) |
forbid assignment More... | |
Static Private Member Functions | |
static unsigned | getPageSize () |
determine page size at run time More... | |
static void * | dommap (unsigned len) |
mmap pages, len is length of mmapped area in bytes More... | |
static void | domunmap (void *p, unsigned len) |
munmap pages p, len is length of mmapped area in bytes More... | |
Private Attributes | |
void * | m_begin |
pointer to start of mmapped area More... | |
void * | m_end |
pointer one behind end of mmapped area More... | |
std::list< void * > | m_freelist |
free pages list More... | |
PagePool * | m_parent |
parent page pool More... | |
unsigned | m_nPgPerGrp |
number of pages per group More... | |
unsigned | m_nUsedGrp |
number of used page groups More... | |
Static Private Attributes | |
static unsigned | s_pagesize = PageChunk::getPageSize() |
system page size (run-time determined) More... | |
static MMapVariety | s_mmapworks = PageChunk::Unknown |
mmap variety that works on this system More... | |
|
private |
convenience typedef
Definition at line 61 of file BidirMMapPipe.h.
type of mmap support found
Enumerator | |
---|---|
Unknown |
don't know yet what'll work |
Copy |
mmap doesn't work, have to copy back and forth |
FileBacked |
mmapping a temp file works |
DevZero |
mmapping /dev/zero works |
Anonymous |
anonymous mmap works |
Definition at line 47 of file BidirMMapPipe.h.
|
inlineprivate |
forbid copying
Definition at line 80 of file BidirMMapPipe.h.
BidirMMapPipe_impl::PageChunk::PageChunk | ( | PagePool * | parent, |
unsigned | length, | ||
unsigned | nPgPerGroup | ||
) |
constructor
Definition at line 339 of file BidirMMapPipe.cxx.
BidirMMapPipe_impl::PageChunk::~PageChunk | ( | ) |
destructor
Definition at line 355 of file BidirMMapPipe.cxx.
bool BidirMMapPipe_impl::PageChunk::contains | ( | const Pages & | p | ) | const |
return if p is contained in this PageChunk
Definition at line 361 of file BidirMMapPipe.cxx.
Referenced by push().
|
staticprivate |
mmap pages, len is length of mmapped area in bytes
Definition at line 387 of file BidirMMapPipe.cxx.
munmap pages p, len is length of mmapped area in bytes
Definition at line 527 of file BidirMMapPipe.cxx.
Referenced by ~PageChunk().
|
inline |
return true if no used page groups in this chunk
Definition at line 114 of file BidirMMapPipe.h.
Referenced by push(), and ~PageChunk().
|
inline |
return true if no free page groups in this chunk
Definition at line 117 of file BidirMMapPipe.h.
|
staticprivate |
determine page size at run time
Definition at line 325 of file BidirMMapPipe.cxx.
|
inline |
|
inlinestatic |
return mmap variety support found
Definition at line 87 of file BidirMMapPipe.h.
Referenced by BidirMMapPipe::recvpages(), and BidirMMapPipe::sendpages().
|
inline |
return number of pages per page group
Definition at line 111 of file BidirMMapPipe.h.
forbid assignment
Definition at line 82 of file BidirMMapPipe.h.
|
inlinestatic |
return the page size of the system
Definition at line 85 of file BidirMMapPipe.h.
Referenced by BidirMMapPipe_impl::Pages::pagesize(), and zap().
Pages BidirMMapPipe_impl::PageChunk::pop | ( | ) |
pop a group of pages off the free list
Definition at line 364 of file BidirMMapPipe.cxx.
push a group of pages onto the free list
Definition at line 373 of file BidirMMapPipe.cxx.
Referenced by BidirMMapPipe_impl::Pages::operator=(), and BidirMMapPipe_impl::Pages::~Pages().
free all pages except for those pointed to by p
Definition at line 541 of file BidirMMapPipe.cxx.
|
private |
pointer to start of mmapped area
Definition at line 63 of file BidirMMapPipe.h.
Referenced by PageChunk(), zap(), and ~PageChunk().
|
private |
pointer one behind end of mmapped area
Definition at line 64 of file BidirMMapPipe.h.
Referenced by len(), PageChunk(), and zap().
|
private |
free pages list
Definition at line 67 of file BidirMMapPipe.h.
Referenced by PageChunk(), pop(), push(), and zap().
|
private |
number of pages per group
Definition at line 69 of file BidirMMapPipe.h.
Referenced by nPagesPerGroup(), and pop().
|
private |
|
private |
parent page pool
Definition at line 68 of file BidirMMapPipe.h.
Referenced by push(), zap(), and ~PageChunk().
|
staticprivate |
mmap variety that works on this system
Definition at line 58 of file BidirMMapPipe.h.
Referenced by dommap(), domunmap(), getPageSize(), mmapVariety(), and zap().
|
staticprivate |
system page size (run-time determined)
Definition at line 56 of file BidirMMapPipe.h.
Referenced by dommap(), domunmap(), and pagesize().