Changeset 2418 for XIOS3/trunk/src/mem_checker.cpp
- Timestamp:
- 10/11/22 15:19:14 (21 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS3/trunk/src/mem_checker.cpp
r2235 r2418 7 7 #include <fstream> 8 8 9 #include <fcntl.h> 10 #include <iomanip> 11 #include <unistd.h> 12 #include <cstring> 13 9 14 namespace xios 10 15 { … … 13 18 bool CMemChecker::enabled_=true; 14 19 bool CMemChecker::first_=true; 20 double CMemChecker::vsize_init_=0; 21 double CMemChecker::time_init_=0; 15 22 16 23 CMemChecker::CMemChecker(const std::string& name) : name_(name) … … 37 44 return vsize ; 38 45 } 46 double CMemChecker::getMemRSS(void) 47 { 48 //sleep( 1 ) ; 49 if (first_) check() ; 50 if (!enabled_) return 0; 51 std::ifstream statStream("/proc/self/stat",std::ios_base::in); 52 std::string dummy ; 53 for(int i=1;i<=23;i++) statStream>>dummy ; 54 double vsize; 55 statStream>>vsize ; 56 if (vsize_init_==0) { 57 vsize_init_ = vsize; 58 time_init_=MPI_Wtime(); 59 } 60 vsize -= vsize_init_; 61 vsize *= 4096; //getconf("PAGE_SIZE"); 62 return vsize ; 63 } 64 void CMemChecker::logMem( std::string id, bool finalizeLog ) 65 { 66 // function get_xios_mem_data() { 67 // return [ 68 // ... 69 // [ "2000-01-01 01:00:10.XXX", "XIOS close context def", 1000], 70 // [ "2000-01-01 01:00:11.XXX", "update timestep" , 1000], 71 // [ "2000-01-01 01:00:15.XXX", "send field" , 2000], 72 // ... 73 // ]; 74 // } 75 76 std::ofstream fout; 77 int rk = 0; 78 MPI_Comm_rank( MPI_COMM_WORLD, &rk ); 79 std::string logName("mem_"+std::to_string(rk)+".js"); 80 double mem = getMemRSS(); 81 if (!mem) { 82 fout.open( logName ); 83 fout << "function get_xios_mem_data() {" << std::endl; 84 fout << " return [" << std::endl; 85 } 86 else 87 { 88 fout.open( logName, std::ios_base::app ); 89 } 90 91 // Time format : YYYY-MM-DD HH:MM:SS.XXX -> seconds * 1000. 92 fout << " [ " << (MPI_Wtime()-time_init_)*1000. << ", \"" << id << "\"," << mem/1000000. << "]," << std::endl; 93 94 if (finalizeLog) 95 { 96 fout << " ];" << std::endl; 97 fout << "}" << std::endl; 98 } 99 fout.close(); 100 } 101 39 102 40 103 void CMemChecker::suspend(void) … … 53 116 suspended_ = false; 54 117 } 118 119 void CMemChecker::suspendRSS(void) 120 { 121 if (first_) check() ; 122 if (!enabled_) return ; 123 if (!suspended_) cumulatedMem_ += getMemRSS() - lastMem_; 124 suspended_ = true; 125 } 55 126 127 void CMemChecker::resumeRSS(void) 128 { 129 if (first_) check() ; 130 if (!enabled_) return ; 131 if (suspended_) lastMem_ = getMemRSS(); 132 suspended_ = false; 133 } 134 135 56 136 void CMemChecker::reset(void) 57 137 {
Note: See TracChangeset
for help on using the changeset viewer.