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.