Changeset 2425


Ignore:
Timestamp:
11/21/22 11:48:46 (17 months ago)
Author:
jderouillat
Message:

Update the memory log system to log virtual memory, resident memory and resident peak memory

Location:
XIOS3/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • XIOS3/trunk/scripts/plotly_memory.js

    r2420 r2425  
    3737            time: +d.time, 
    3838            event: d.event, 
    39             memory: +d.memory 
     39            vsize: +d.vsize, 
     40            rss: +d.rss, 
     41            VmHWM: +d.VmHWM 
    4042        }; 
    4143    }, function(xios_mem_obj) { 
     
    4850    // transpose data to use it more easily 
    4951    var transData = []; 
    50     for(var i = 0; i < 3 ; i++){ 
     52    for(var i = 0; i < 5 ; i++){ 
    5153        transData.push([]); 
    5254    }; 
     
    5456        //console.log( xios_mem_data[i]  ); 
    5557        transData[0].push( xios_mem_data[i].time )   // x axis 
    56         transData[1].push( xios_mem_data[i].memory ) // y axis 
     58        transData[1].push( xios_mem_data[i].vsize ) // y axis 
    5759        transData[2].push( xios_mem_data[i].event )  // labels 
     60        transData[3].push( xios_mem_data[i].rss ) // y axis 
     61        transData[4].push( xios_mem_data[i].VmHWM ) // y axis 
    5862    }; 
    5963    //console.log(transData[0]); 
     
    6670        mode: 'markers', 
    6771        text: transData[2], 
     72        name:'vsize', 
    6873    }; 
    6974    data.push(result); 
     75     
     76    var result2 = { 
     77        x: transData[0], 
     78        y: transData[3], 
     79        type: 'scatter', 
     80        mode: 'markers', 
     81        text: transData[2], 
     82        name:'RSS', 
     83    }; 
     84    data.push(result2); 
     85     
     86    var result3 = { 
     87        x: transData[0], 
     88        y: transData[4], 
     89        type: 'scatter', 
     90        mode: 'markers', 
     91        text: transData[2], 
     92        name:'VmHWM', 
     93    }; 
     94    data.push(result3); 
    7095 
    7196    var layout = { 
  • XIOS3/trunk/src/mem_checker.cpp

    r2420 r2425  
    1919  bool CMemChecker::first_=true; 
    2020  double CMemChecker::vsize_init_=0; 
     21  double CMemChecker::rss_init_=0; 
     22  double CMemChecker::vmhwm_init_=0; 
    2123  double CMemChecker::time_init_=0; 
    2224  std::ofstream CMemChecker::fout_; 
     
    6466    return vsize ; 
    6567  } 
     68   
     69  // Return vector of memories amount : 
     70  //   - vector[0] : virtual memory (vsize) from /proc/self/stat 
     71  //   - vector[1] : resident set size (rss) from /proc/self/stat 
     72  //   - vector[2] : Peak resident set size (VmHWM) from /proc/self/status 
     73  std::vector<double> CMemChecker::getMemories(void) 
     74  { 
     75    std::vector<double> memories; 
     76 
     77    if (first_) check() ; 
     78    if (!enabled_) return memories; 
     79    std::ifstream statStream("/proc/self/stat",std::ios_base::in); 
     80    std::string dummy ; 
     81    for(int i=1;i<=22;i++) statStream>>dummy ; 
     82 
     83    // 1 - Virtual 
     84    double vsize;  
     85    statStream>>vsize ; 
     86    if (vsize_init_==0) { 
     87      vsize_init_ = vsize; 
     88      time_init_=MPI_Wtime(); 
     89    } 
     90    vsize -= vsize_init_; 
     91    memories.push_back(vsize); 
     92 
     93    // 2 - RSS 
     94    double rss; 
     95    statStream>>rss ; 
     96    if (rss_init_==0) { 
     97      rss_init_ = rss; 
     98    } 
     99    rss -= rss_init_; 
     100    rss *= 4096; //getconf("PAGE_SIZE");     
     101    memories.push_back(rss); 
     102 
     103    // 3 - Peak 
     104    char sbuf[1024]; 
     105    std::ifstream file( "/proc/self/status" ); 
     106    if( file.fail() ) { 
     107      return memories; 
     108    } 
     109    int fd = open( "/proc/self/status", O_RDONLY, 0 ); 
     110    int num_read=read( fd, sbuf, ( sizeof sbuf )-1 ); 
     111    close( fd ); 
     112    if( !num_read ) { 
     113      return memories;              
     114    } 
     115    // Peak resident set size 
     116    char *S=strstr( sbuf, "VmHWM:" )+6; 
     117    double vmhwm = ( int )atoi( S ); 
     118    if (vmhwm_init_==0) { 
     119      vmhwm_init_ = vmhwm; 
     120    } 
     121    vmhwm -= vmhwm_init_; 
     122    memories.push_back(vmhwm); 
     123     
     124    return memories; 
     125  } 
     126   
    66127  void CMemChecker::logMem( std::string id, bool finalizeLog ) 
    67128  { 
     
    71132    MPI_Comm_rank( MPI_COMM_WORLD, &rk ); 
    72133    std::string logName("xios_memory_"+std::to_string(rk)+".csv"); 
    73     double mem = getMemRSS(); 
    74     if (!mem) { 
     134    vector<double> mem = getMemories(); 
     135    if (!mem[0]) { 
    75136      fout_.open( logName ); 
    76       fout_ << "time,event,memory" << std::endl; 
     137      fout_ << "time,event,vsize,rss,VmHWM" << std::endl; 
    77138    } 
    78139 
    79140    fout_.precision(4); 
    80141    // Time format : YYYY-MM-DD HH:MM:SS.XXX -> seconds * 1000. 
    81     fout_ << (MPI_Wtime()-time_init_) << "," << id << "," << mem/1000000. << std::endl; 
     142    fout_ << (MPI_Wtime()-time_init_) << "," << id 
     143          << "," << mem[0]/1024./1024. 
     144          << "," << mem[1]/1024./1024. 
     145          << "," << mem[2]/1024. 
     146          << std::endl; 
    82147 
    83148    if ((MPI_Wtime()-time_init_)>flush_counter_*600.) 
  • XIOS3/trunk/src/mem_checker.hpp

    r2420 r2425  
    55#include <map> 
    66#include <fstream> 
     7#include <vector> 
    78 
    89namespace xios 
     
    2021      static double getMem(void); 
    2122      static double getMemRSS(void); 
     23      static std::vector<double> getMemories(void); 
    2224      static void logMem( std::string id, bool finalizeLog = false ); 
    2325      static CMemChecker& get(std::string name); 
     
    3941 
    4042      static double vsize_init_; 
     43      static double rss_init_; 
     44      static double vmhwm_init_; 
    4145      static double time_init_; 
    4246      static std::ofstream fout_; 
Note: See TracChangeset for help on using the changeset viewer.