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 45 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 | |
~PageChunk () | |
destructor | |
bool | contains (const Pages &p) const |
return if p is contained in this PageChunk | |
bool | empty () const |
return true if no used page groups in this chunk | |
bool | full () const |
return true if no free page groups in this chunk | |
unsigned | len () const |
return length of chunk | |
unsigned | nPagesPerGroup () const |
return number of pages per page group | |
Pages | pop () |
pop a group of pages off the free list | |
void | push (const Pages &p) |
push a group of pages onto the free list | |
void | zap (Pages &p) |
free all pages except for those pointed to by p | |
Static Public Member Functions | |
static MMapVariety | mmapVariety () |
return mmap variety support found | |
static unsigned | pagesize () |
return the logical page size | |
static unsigned | physPgSz () |
return the physical page size of the system | |
Private Types | |
typedef BidirMMapPipeException | Exception |
convenience typedef | |
Private Member Functions | |
PageChunk (const PageChunk &) | |
forbid copying | |
PageChunk & | operator= (const PageChunk &) |
forbid assignment | |
Static Private Member Functions | |
static void * | dommap (unsigned len) |
mmap pages, len is length of mmapped area in bytes | |
static void | domunmap (void *p, unsigned len) |
munmap pages p, len is length of mmapped area in bytes | |
static unsigned | getPageSize () |
determine page size at run time | |
Private Attributes | |
void * | m_begin |
pointer to start of mmapped area | |
void * | m_end |
pointer one behind end of mmapped area | |
std::list< void * > | m_freelist |
free pages list | |
unsigned | m_nPgPerGrp |
number of pages per group | |
unsigned | m_nUsedGrp |
number of used page groups | |
PagePool * | m_parent |
parent page pool | |
Static Private Attributes | |
static MMapVariety | s_mmapworks = PageChunk::Unknown |
mmap variety that works on this system | |
static unsigned | s_pagesize = std::min(PageChunk::s_physpgsz, 16384u) |
logical page size (run-time determined) | |
static unsigned | s_physpgsz = PageChunk::getPageSize() |
system physical page size | |
convenience typedef
Definition at line 63 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 48 of file BidirMMapPipe.h.
|
inlineprivate |
forbid copying
Definition at line 82 of file BidirMMapPipe.h.
RooFit::BidirMMapPipe_impl::PageChunk::PageChunk | ( | PagePool * | parent, |
unsigned | length, | ||
unsigned | nPgPerGroup | ||
) |
constructor
Definition at line 344 of file BidirMMapPipe.cxx.
RooFit::BidirMMapPipe_impl::PageChunk::~PageChunk | ( | ) |
destructor
Definition at line 360 of file BidirMMapPipe.cxx.
return if p is contained in this PageChunk
Definition at line 366 of file BidirMMapPipe.cxx.
|
staticprivate |
mmap pages, len is length of mmapped area in bytes
Definition at line 392 of file BidirMMapPipe.cxx.
|
staticprivate |
munmap pages p, len is length of mmapped area in bytes
Definition at line 532 of file BidirMMapPipe.cxx.
|
inline |
return true if no used page groups in this chunk
Definition at line 118 of file BidirMMapPipe.h.
|
inline |
return true if no free page groups in this chunk
Definition at line 121 of file BidirMMapPipe.h.
|
staticprivate |
determine page size at run time
Definition at line 330 of file BidirMMapPipe.cxx.
|
inline |
return length of chunk
Definition at line 109 of file BidirMMapPipe.h.
|
inlinestatic |
return mmap variety support found
Definition at line 91 of file BidirMMapPipe.h.
|
inline |
return number of pages per page group
Definition at line 115 of file BidirMMapPipe.h.
forbid assignment
Definition at line 84 of file BidirMMapPipe.h.
|
inlinestatic |
return the logical page size
Definition at line 87 of file BidirMMapPipe.h.
|
inlinestatic |
return the physical page size of the system
Definition at line 89 of file BidirMMapPipe.h.
Pages RooFit::BidirMMapPipe_impl::PageChunk::pop | ( | ) |
pop a group of pages off the free list
Definition at line 369 of file BidirMMapPipe.cxx.
void RooFit::BidirMMapPipe_impl::PageChunk::push | ( | const Pages & | p | ) |
push a group of pages onto the free list
Definition at line 378 of file BidirMMapPipe.cxx.
void RooFit::BidirMMapPipe_impl::PageChunk::zap | ( | Pages & | p | ) |
free all pages except for those pointed to by p
Definition at line 546 of file BidirMMapPipe.cxx.
|
private |
pointer to start of mmapped area
Definition at line 65 of file BidirMMapPipe.h.
|
private |
pointer one behind end of mmapped area
Definition at line 66 of file BidirMMapPipe.h.
|
private |
free pages list
Definition at line 69 of file BidirMMapPipe.h.
|
private |
number of pages per group
Definition at line 71 of file BidirMMapPipe.h.
|
private |
number of used page groups
Definition at line 72 of file BidirMMapPipe.h.
|
private |
parent page pool
Definition at line 70 of file BidirMMapPipe.h.
|
staticprivate |
mmap variety that works on this system
Definition at line 60 of file BidirMMapPipe.h.
|
staticprivate |
logical page size (run-time determined)
Definition at line 58 of file BidirMMapPipe.h.
|
staticprivate |
system physical page size
Definition at line 57 of file BidirMMapPipe.h.