Changeset 2425 for XIOS3/trunk/src/mem_checker.cpp
- Timestamp:
- 11/21/22 11:48:46 (17 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS3/trunk/src/mem_checker.cpp
r2420 r2425 19 19 bool CMemChecker::first_=true; 20 20 double CMemChecker::vsize_init_=0; 21 double CMemChecker::rss_init_=0; 22 double CMemChecker::vmhwm_init_=0; 21 23 double CMemChecker::time_init_=0; 22 24 std::ofstream CMemChecker::fout_; … … 64 66 return vsize ; 65 67 } 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 66 127 void CMemChecker::logMem( std::string id, bool finalizeLog ) 67 128 { … … 71 132 MPI_Comm_rank( MPI_COMM_WORLD, &rk ); 72 133 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]) { 75 136 fout_.open( logName ); 76 fout_ << "time,event, memory" << std::endl;137 fout_ << "time,event,vsize,rss,VmHWM" << std::endl; 77 138 } 78 139 79 140 fout_.precision(4); 80 141 // 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; 82 147 83 148 if ((MPI_Wtime()-time_init_)>flush_counter_*600.)
Note: See TracChangeset
for help on using the changeset viewer.