Ignore:
Timestamp:
09/02/21 17:06:35 (3 years ago)
Author:
ymipsl
Message:

Revisiting Memory tracking :

  • MemTrack? has been improved
    • Not need anymore to use private external libaddr2line, fork addr2line process internaly and use bidrectionnale pipe to send stack adress et get in return the demangle stack name
    • Can use cxa_demangle in backup
  • Block memory leak report is output in separate file (xios_xxx.mem),memory block are ordonned in decreasing size.
  • Possibility to output only the n bigest bloc with : "memtrack_blocs" xios parameters
  • Possibility to output only bloc over a given size with : "memtrack_size" xios parameters
  • Implement new method to retrieve the memory consumed in a time interval very similarely to xios timer :

CMemTracker("xios").resume()
CMemTracker("xios").suspend() ;
etc....

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/cxios.cpp

    r2209 r2212  
    1414#include "services_manager.hpp" 
    1515#include "servers_ressource.hpp" 
     16#include "mem_checker.hpp" 
    1617 
    1718namespace xios 
     
    155156 
    156157#ifdef XIOS_MEMTRACK_FULL 
    157      MemTrack::TrackListMemoryUsage() ; 
    158      MemTrack::TrackDumpBlocks(); 
     158      report(0) << " Memory report : current memory used by XIOS : "<<  MemTrack::getCurrentMemorySize()*1.0/(1024*1024)<<" Mbyte" << endl ; 
     159      report(0) << " Memory report : maximum memory used by XIOS : "<<  MemTrack::getMaxMemorySize()*1.0/(1024*1024)<<" Mbyte" << endl ; 
     160       
     161      ofstream memReport ; 
     162      std::filebuf* fb = memReport.rdbuf(); 
     163      CClient::openStream(clientFile, ".mem", fb); 
     164       
     165      MemTrack::TrackListMemoryUsage() ; 
     166      size_t memtrack_blocks=0 ; 
     167      memtrack_blocks=xios::CXios::getin("memtrack_blocks",memtrack_blocks) ; 
     168      size_t memtrack_size=0 ; 
     169      memtrack_size=xios::CXios::getin("memtrack_size",memtrack_size) ; 
     170      MemTrack::TrackDumpBlocks(memReport, memtrack_blocks,memtrack_size); 
     171      memReport.close(); 
    159172#endif 
    160173 
     
    177190  void CXios::initServerSide(void) 
    178191  { 
     192    CMemChecker::get("xios").resume() ; 
    179193    initServer(); 
    180194    isClient = false; 
     
    193207 
    194208#ifdef XIOS_MEMTRACK_FULL 
    195      MemTrack::TrackListMemoryUsage() ; 
    196      MemTrack::TrackDumpBlocks(); 
    197 #endif 
    198 #endif 
     209      report(0) << " Memory report : current memory used by XIOS : "<<  MemTrack::getCurrentMemorySize()*1.0/(1024*1024)<<" Mbyte" << endl ; 
     210      report(0) << " Memory report : maximum memory used by XIOS : "<<  MemTrack::getMaxMemorySize()*1.0/(1024*1024)<<" Mbyte" << endl ; 
     211      ofstream memReport ; 
     212      std::filebuf* fb = memReport.rdbuf(); 
     213      CClient::openStream(serverFile, ".mem", fb); 
     214       
     215      MemTrack::TrackListMemoryUsage() ; 
     216      size_t memtrack_blocks=0 ; 
     217      memtrack_blocks=xios::CXios::getin("memtrack_blocks",memtrack_blocks) ; 
     218      size_t memtrack_size=0 ; 
     219      memtrack_size=xios::CXios::getin("memtrack_size",memtrack_size) ; 
     220      MemTrack::TrackDumpBlocks(memReport,memtrack_blocks,memtrack_size); 
     221      memReport.close() ; 
     222#endif 
     223#endif 
     224    CMemChecker::get("xios").suspend() ; 
     225    report(0)<<CMemChecker::getAllCumulatedMem() ; 
    199226    CServer::closeInfoStream(); 
    200227  } 
Note: See TracChangeset for help on using the changeset viewer.