Handling of repeated requests of buffers greather than the default page size. Allocat...
authorrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 26 Oct 2010 12:33:15 +0000 (12:33 +0000)
committerrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 26 Oct 2010 12:33:15 +0000 (12:33 +0000)
Releasing unused pages whenever a new page with more capacity is allocated. Decreasing also the default page size from 50 to 30 MB.
Adding a page summary for the statistics printout in debug mode.

HLT/BASE/AliHLTDataBuffer.cxx

index f4f5e11..1874d07 100644 (file)
@@ -640,6 +640,7 @@ int AliHLTDataBuffer::PrintStatistics()
        rawpage=AliHLTDataBuffer::AliHLTRawPage::NextPage(rawpage)) {
     nofPages++;
     totalSize+=rawpage->Size();
+    if (fgLogging.CheckFilter(kHLTLogDebug)) rawpage->Print("");
   }
   //if (rawpage) rawpage->Print("global");
   fgLogging.Logging(kHLTLogInfo, "AliHLTDataBuffer::PrintStatistics", "data buffer handling", "total number of memory pages: %d   total size %d", nofPages, totalSize);
@@ -1276,7 +1277,7 @@ void AliHLTDataBuffer::AliHLTRawPage::Print(const char* option)
 
 vector<AliHLTDataBuffer::AliHLTRawPage*> AliHLTDataBuffer::AliHLTRawPage::fgGlobalPages;
 
-AliHLTUInt32_t AliHLTDataBuffer::AliHLTRawPage::fgGlobalPageSize=50*1024*1024;
+AliHLTUInt32_t AliHLTDataBuffer::AliHLTRawPage::fgGlobalPageSize=30*1024*1024;
 
 AliHLTDataBuffer::AliHLTRawBuffer* AliHLTDataBuffer::AliHLTRawPage::GlobalAlloc(AliHLTUInt32_t size, int verbosity)
 {
@@ -1307,6 +1308,14 @@ AliHLTDataBuffer::AliHLTRawBuffer* AliHLTDataBuffer::AliHLTRawPage::GlobalAlloc(
       log.Logging(kHLTLogError, "AliHLTDataBuffer::AliHLTRawPage::GlobalAlloc", "data buffer handling", "can not create raw page");
       return NULL;
     }
+
+    // check is there is at least one unused page which can be replaced by the newly created one
+    for (page=fgGlobalPages.begin(); page!=fgGlobalPages.end(); page++) {
+      if ((*page)->IsUsed()) continue;
+      delete *page;
+      fgGlobalPages.erase(page);
+      break; // delete only one page to be replaced by the new page
+    }
     fgGlobalPages.push_back(rawpage);
     if ((rawbuffer=rawpage->Alloc(size))!=NULL) {
       if (verbosity>1) {