Changeset 2418
- Timestamp:
- 10/11/22 15:19:14 (19 months ago)
- Location:
- XIOS3/trunk
- Files:
-
- 4 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS3/trunk/src/client.cpp
r2407 r2418 18 18 #include "workflow_graph.hpp" 19 19 #include "release_static_allocation.hpp" 20 #include "mem_checker.hpp" 20 21 21 22 namespace xios … … 520 521 report(0)<< " Memory report : increasing it by a factor will increase performance, depending of the volume of data wrote in file at each time step of the file"<<endl ; 521 522 report(100)<<CTimer::getAllCumulatedTime()<<endl ; 523 report(100)<<CMemChecker::getAllCumulatedMem()<<endl ; 522 524 CWorkflowGraph::drawWorkFlowGraph_client(); 523 525 -
XIOS3/trunk/src/cxios.cpp
r2407 r2418 151 151 CClient::openErrorStream(); 152 152 } 153 CMemChecker::logMem("CXios::initClientSide"); 153 154 } 154 155 CATCH … … 156 157 void CXios::clientFinalize(void) 157 158 { 159 CMemChecker::logMem("CXios::clientFinalize", true); 160 158 161 CClient::finalize() ; 159 162 … … 233 236 #endif 234 237 CMemChecker::get("xios").suspend() ; 235 report(0)<<CMemChecker::getAllCumulatedMem() ;236 238 CServer::closeInfoStream(); 237 239 } -
XIOS3/trunk/src/filter/model_to_client_source_filter.cpp
r2143 r2418 5 5 #include <limits> 6 6 #include "workflow_graph.hpp" 7 #include "mem_checker.hpp" 7 8 8 9 namespace xios … … 37 38 packet->data.resize(connector->getDstSize()) ; 38 39 connector->transfer(data, packet->data, nanValue) ; 40 41 CMemChecker::logMem( "CModelToClientSourceFilter::streamData" ); 39 42 40 43 if (hasMissingValue_) -
XIOS3/trunk/src/filter/temporal_filter.cpp
r2195 r2418 3 3 #include "calendar_util.hpp" 4 4 #include "workflow_graph.hpp" 5 #include "mem_checker.hpp" 5 6 6 7 namespace xios … … 117 118 packet = data[0]; 118 119 120 CMemChecker::logMem( "CTemporalFilter::apply" ); 121 119 122 isFirstOperation = false; 120 123 graphCycleCompleted = true; -
XIOS3/trunk/src/interface/fortran/ixios.F90
r2338 r2418 38 38 ASSIGNMENT(=) 39 39 USE itimer, ONLY : xios(timer_resume), xios(timer_suspend), xios(timer_reset), xios(timer_get_time) 40 USE imem_checker, ONLY : xios(mem_checker_get), xios(mem_checker_log) 40 41 41 42 USE ifield, ONLY : txios(field), txios(fieldgroup), xios(is_valid_field), xios(is_valid_fieldgroup) -
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 { -
XIOS3/trunk/src/mem_checker.hpp
r2274 r2418 13 13 void suspend(void); 14 14 void resume(void); 15 void suspendRSS(void); 16 void resumeRSS(void); 15 17 void reset(void); 16 18 double getCumulatedMem(void); 17 19 static double getMem(void); 20 static double getMemRSS(void); 21 static void logMem( std::string id, bool finalizeLog = false ); 18 22 static CMemChecker& get(std::string name); 19 23 static std::string getAllCumulatedMem(void) ; … … 32 36 static bool first_ ; 33 37 static bool enabled_ ; 38 39 static double vsize_init_; 40 static double time_init_; 34 41 }; 35 42 } -
XIOS3/trunk/src/node/context.cpp
r2410 r2418 17 17 #include "xios_spl.hpp" 18 18 #include "timer.hpp" 19 #include "mem_checker.hpp" 19 20 #include "memtrack.hpp" 20 21 #include <limits> … … 888 889 TRY 889 890 { 891 CMemChecker::logMem( "CContext::closeDefinition" ); 892 890 893 CTimer::get("Context : close definition").resume() ; 891 894 … … 1159 1162 for(auto& it : fieldBufferEvaluation) it.first->setBufferSize(it.second) ; 1160 1163 1161 1162 1164 CTimer::get("Context : close definition").suspend() ; 1165 CMemChecker::logMem( "CContext::closeDefinition END" ); 1163 1166 } 1164 1167 CATCH_DUMP_ATTR … … 2022 2025 if (prevStep < step) 2023 2026 { 2027 CMemChecker::logMem( "CContext::updateCalendar_"+std::to_string(step) ); 2024 2028 if (serviceType_==CServicesManager::CLIENT) // For now we only use server level 1 to read data 2025 2029 { -
XIOS3/trunk/src/server.cpp
r2407 r2418 13 13 #include "tracer.hpp" 14 14 #include "timer.hpp" 15 #include "mem_checker.hpp" 15 16 #include "event_scheduler.hpp" 16 17 #include "string_tools.hpp" … … 159 160 CServer::openInfoStream(CXios::serverFile); 160 161 CServer::openErrorStream(CXios::serverFile); 162 163 CMemChecker::logMem( "CServer::initialize" ); 161 164 162 165 ///////////////////////////////////////// … … 431 434 CXios::getMpiGarbageCollector().release() ; // release unfree MPI ressources 432 435 436 CMemChecker::logMem( "CServer::finalize", true ); 433 437 if (!is_MPI_Initialized) 434 438 { … … 440 444 report(0)<<"Performance report : Ratio : "<<CTimer::get("Process events").getCumulatedTime()/CTimer::get("XIOS server").getCumulatedTime()*100.<<"%"<<endl ; 441 445 report(100)<<CTimer::getAllCumulatedTime()<<endl ; 446 report(100)<<CMemChecker::getAllCumulatedMem()<<endl ; 442 447 443 448 CWorkflowGraph::drawWorkFlowGraph_server();
Note: See TracChangeset
for help on using the changeset viewer.