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.