Ignore:
Timestamp:
10/11/21 14:41:56 (3 years ago)
Author:
ymipsl
Message:
  • Update of the tranfer protocol using one sided communication
  • Introduce MPI_Improb/MPI_mrecv to listen incomming request
  • Introducing latency when looping over managers

YM

File:
1 edited

Legend:

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

    r1764 r2246  
    77#include "server.hpp" 
    88#include "servers_ressource.hpp" 
     9#include "timer.hpp" 
    910 
    1011namespace xios 
     
    5556    int poolSize ; 
    5657     
     58    info(40)<<"CServicesManager : waiting for pool info : "<<poolId<<endl ; ; 
    5759    bool ok=CXios::getRessourcesManager()->getPoolInfo(poolId, poolSize, leader) ; 
    5860    if (wait) 
     
    6769    if (ok)  
    6870    { 
     71      info(40)<<"CServicesManager : create service notification to leader "<<leader<<", serviceId : "<<serviceId<<", size : "<<size<<endl ; 
    6972      createServicesNotify(leader, serviceId, type, size, nbPartitions) ; 
    7073      return true ; 
     
    9497    { 
    9598      auto info = notifications_.front() ; 
     99      xios::info(40)<<"CServicesManager : receive create service notification : "<<get<0>(info)<<endl ; 
    96100      CServer::getServersRessource()->getPoolRessource()->createService(get<0>(info), get<1>(info), get<2>(info), get<3>(info)) ; 
    97101      notifications_.pop_front() ; 
     
    104108  void CServicesManager::eventLoop(void) 
    105109  { 
    106     checkCreateServicesNotification() ; 
     110    CTimer::get("CServicesManager::eventLoop").resume(); 
     111    double time=MPI_Wtime() ; 
     112    if (time-lastEventLoop_ > eventLoopLatency_)  
     113    { 
     114      checkCreateServicesNotification() ; 
     115      lastEventLoop_=time ; 
     116    } 
     117    CTimer::get("CServicesManager::eventLoop").suspend(); 
    107118  } 
    108119 
     
    176187  { 
    177188     
     189    info(40)<<"CServicesManager : registering service, poolId : "<<poolId<<", serviceId : "<<serviceId<<endl ; ; 
     190 
     191    winServices_->lockWindowExclusive(managerGlobalLeader_) ; 
     192    winServices_->updateFromLockedWindow(managerGlobalLeader_, this, &CServicesManager::servicesDumpIn) ; 
     193    winServices_->flushWindow(managerGlobalLeader_) ; 
     194    services_[std::tuple<std::string, std::string,int>(poolId,serviceId,partitionId)]=std::make_tuple(type,size,nbPartitions,leader) ; 
     195    winServices_->updateToLockedWindow(managerGlobalLeader_, this, &CServicesManager::servicesDumpOut) ; 
     196    winServices_->unlockWindow(managerGlobalLeader_) ; 
     197 
     198/* 
    178199    winServices_->lockWindow(managerGlobalLeader_,0) ; 
    179200    winServices_->updateFromWindow(managerGlobalLeader_, this, &CServicesManager::servicesDumpIn) ; 
    180201    services_[std::tuple<std::string, std::string,int>(poolId,serviceId,partitionId)]=std::make_tuple(type,size,nbPartitions,leader) ; 
    181202    winServices_->updateToWindow(managerGlobalLeader_, this, &CServicesManager::servicesDumpOut) ; 
    182     winServices_->unlockWindow(managerGlobalLeader_,0) ; 
     203    winServices_->unlockWindow(managerGlobalLeader_,0) ;*/ 
    183204  } 
    184205 
     
    186207                                        int& size, int& nbPartitions, int& leader) 
    187208  { 
     209     
     210    winServices_->lockWindowShared(managerGlobalLeader_) ; 
     211    winServices_->updateFromLockedWindow(managerGlobalLeader_, this, &CServicesManager::servicesDumpIn) ; 
     212    winServices_->unlockWindow(managerGlobalLeader_) ; 
     213/* 
    188214    winServices_->lockWindow(managerGlobalLeader_,0) ; 
    189215    winServices_->updateFromWindow(managerGlobalLeader_, this, &CServicesManager::servicesDumpIn) ; 
    190     winServices_->unlockWindow(managerGlobalLeader_,0) ; 
     216    winServices_->unlockWindow(managerGlobalLeader_,0) ;*/ 
    191217 
    192218    auto it=services_.find(std::tuple<std::string,std::string,int>(poolId,serviceId,partitionId)) ; 
Note: See TracChangeset for help on using the changeset viewer.