Logo ROOT   6.21/01
Reference Guide
BidirMMapPipe_impl::PageChunk Class Reference

class representing a chunk of pages

Author
Manuel Schiller manue.nosp@m.l.sc.nosp@m.hille.nosp@m.r@ni.nosp@m.khef..nosp@m.nl
Date
2013-07-24

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...
 
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...
 
unsigned len () const
 return length of chunk More...
 
unsigned nPagesPerGroup () const
 return number of pages per page group 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...
 
void zap (Pages &p)
 free all pages except for those pointed to by p More...
 

Static Public Member Functions

static MMapVariety mmapVariety ()
 return mmap variety support found More...
 
static unsigned pagesize ()
 return the logical page size More...
 
static unsigned physPgSz ()
 return the physical page size of the system More...
 

Private Types

typedef BidirMMapPipeException Exception
 convenience typedef More...
 

Private Member Functions

 PageChunk (const PageChunk &)
 forbid copying More...
 
PageChunkoperator= (const PageChunk &)
 forbid assignment More...
 

Static Private Member Functions

static voiddommap (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...
 
static unsigned getPageSize ()
 determine page size at run time More...
 

Private Attributes

voidm_begin
 pointer to start of mmapped area More...
 
voidm_end
 pointer one behind end of mmapped area More...
 
std::list< void * > m_freelist
 free pages list More...
 
unsigned m_nPgPerGrp
 number of pages per group More...
 
unsigned m_nUsedGrp
 number of used page groups More...
 
PagePool * m_parent
 parent page pool More...
 

Static Private Attributes

static MMapVariety s_mmapworks = PageChunk::Unknown
 mmap variety that works on this system More...
 
static unsigned s_pagesize = std::min(PageChunk::s_physpgsz, 16384u)
 logical page size (run-time determined) More...
 
static unsigned s_physpgsz = PageChunk::getPageSize()
 system physical page size More...
 

#include </mnt/build/workspace/root-makedoc/rootspi/rdoc/src/master/roofit/roofitcore/src/BidirMMapPipe.h>

Member Typedef Documentation

◆ Exception

typedef BidirMMapPipeException BidirMMapPipe_impl::PageChunk::Exception
private

convenience typedef

Definition at line 62 of file BidirMMapPipe.h.

Member Enumeration Documentation

◆ MMapVariety

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.

Constructor & Destructor Documentation

◆ PageChunk() [1/2]

BidirMMapPipe_impl::PageChunk::PageChunk ( const PageChunk )
inlineprivate

forbid copying

Definition at line 81 of file BidirMMapPipe.h.

◆ PageChunk() [2/2]

BidirMMapPipe_impl::PageChunk::PageChunk ( PagePool *  parent,
unsigned  length,
unsigned  nPgPerGroup 
)

constructor

Definition at line 344 of file BidirMMapPipe.cxx.

◆ ~PageChunk()

BidirMMapPipe_impl::PageChunk::~PageChunk ( )

destructor

Definition at line 360 of file BidirMMapPipe.cxx.

Member Function Documentation

◆ contains()

bool BidirMMapPipe_impl::PageChunk::contains ( const Pages p) const

return if p is contained in this PageChunk

Definition at line 366 of file BidirMMapPipe.cxx.

◆ dommap()

void * BidirMMapPipe_impl::PageChunk::dommap ( unsigned  len)
staticprivate

mmap pages, len is length of mmapped area in bytes

Definition at line 392 of file BidirMMapPipe.cxx.

◆ domunmap()

void BidirMMapPipe_impl::PageChunk::domunmap ( void p,
unsigned  len 
)
staticprivate

munmap pages p, len is length of mmapped area in bytes

Definition at line 532 of file BidirMMapPipe.cxx.

◆ empty()

bool BidirMMapPipe_impl::PageChunk::empty ( ) const
inline

return true if no used page groups in this chunk

Definition at line 117 of file BidirMMapPipe.h.

◆ full()

bool BidirMMapPipe_impl::PageChunk::full ( ) const
inline

return true if no free page groups in this chunk

Definition at line 120 of file BidirMMapPipe.h.

◆ getPageSize()

unsigned BidirMMapPipe_impl::PageChunk::getPageSize ( )
staticprivate

determine page size at run time

Definition at line 330 of file BidirMMapPipe.cxx.

◆ len()

unsigned BidirMMapPipe_impl::PageChunk::len ( ) const
inline

return length of chunk

Definition at line 108 of file BidirMMapPipe.h.

◆ mmapVariety()

static MMapVariety BidirMMapPipe_impl::PageChunk::mmapVariety ( )
inlinestatic

return mmap variety support found

Definition at line 90 of file BidirMMapPipe.h.

◆ nPagesPerGroup()

unsigned BidirMMapPipe_impl::PageChunk::nPagesPerGroup ( ) const
inline

return number of pages per page group

Definition at line 114 of file BidirMMapPipe.h.

◆ operator=()

PageChunk& BidirMMapPipe_impl::PageChunk::operator= ( const PageChunk )
inlineprivate

forbid assignment

Definition at line 83 of file BidirMMapPipe.h.

◆ pagesize()

static unsigned BidirMMapPipe_impl::PageChunk::pagesize ( )
inlinestatic

return the logical page size

Definition at line 86 of file BidirMMapPipe.h.

◆ physPgSz()

static unsigned BidirMMapPipe_impl::PageChunk::physPgSz ( )
inlinestatic

return the physical page size of the system

Definition at line 88 of file BidirMMapPipe.h.

◆ pop()

Pages BidirMMapPipe_impl::PageChunk::pop ( )

pop a group of pages off the free list

Definition at line 369 of file BidirMMapPipe.cxx.

◆ push()

void BidirMMapPipe_impl::PageChunk::push ( const Pages p)

push a group of pages onto the free list

Definition at line 378 of file BidirMMapPipe.cxx.

◆ zap()

void BidirMMapPipe_impl::PageChunk::zap ( Pages p)

free all pages except for those pointed to by p

Definition at line 546 of file BidirMMapPipe.cxx.

Member Data Documentation

◆ m_begin

void* BidirMMapPipe_impl::PageChunk::m_begin
private

pointer to start of mmapped area

Definition at line 64 of file BidirMMapPipe.h.

◆ m_end

void* BidirMMapPipe_impl::PageChunk::m_end
private

pointer one behind end of mmapped area

Definition at line 65 of file BidirMMapPipe.h.

◆ m_freelist

std::list<void*> BidirMMapPipe_impl::PageChunk::m_freelist
private

free pages list

Definition at line 68 of file BidirMMapPipe.h.

◆ m_nPgPerGrp

unsigned BidirMMapPipe_impl::PageChunk::m_nPgPerGrp
private

number of pages per group

Definition at line 70 of file BidirMMapPipe.h.

◆ m_nUsedGrp

unsigned BidirMMapPipe_impl::PageChunk::m_nUsedGrp
private

number of used page groups

Definition at line 71 of file BidirMMapPipe.h.

◆ m_parent

PagePool* BidirMMapPipe_impl::PageChunk::m_parent
private

parent page pool

Definition at line 69 of file BidirMMapPipe.h.

◆ s_mmapworks

PageChunk::MMapVariety BidirMMapPipe_impl::PageChunk::s_mmapworks = PageChunk::Unknown
staticprivate

mmap variety that works on this system

Definition at line 59 of file BidirMMapPipe.h.

◆ s_pagesize

unsigned BidirMMapPipe_impl::PageChunk::s_pagesize = std::min(PageChunk::s_physpgsz, 16384u)
staticprivate

logical page size (run-time determined)

Definition at line 57 of file BidirMMapPipe.h.

◆ s_physpgsz

unsigned BidirMMapPipe_impl::PageChunk::s_physpgsz = PageChunk::getPageSize()
staticprivate

system physical page size

Definition at line 56 of file BidirMMapPipe.h.


The documentation for this class was generated from the following files: