Index: XIOS3/trunk/src/server.cpp
===================================================================
--- XIOS3/trunk/src/server.cpp	(revision 2397)
+++ XIOS3/trunk/src/server.cpp	(revision 2399)
@@ -60,5 +60,5 @@
       else is_MPI_Initialized=false ;
       MPI_Comm globalComm=CXios::getGlobalComm() ;
-
+      CTimer::get("XIOS server").resume() ;
       /////////////////////////////////////////
       ///////////// PART 1 ////////////////////
@@ -409,5 +409,5 @@
     {
       CTimer::get("XIOS").suspend() ;
-     
+      CTimer::get("XIOS server").suspend() ;
       delete eventScheduler ;
 
Index: XIOS3/trunk/src/timer.hpp
===================================================================
--- XIOS3/trunk/src/timer.hpp	(revision 2397)
+++ XIOS3/trunk/src/timer.hpp	(revision 2399)
@@ -20,4 +20,6 @@
       void resume(void);
       void reset(void);
+      void add(double time) { cumulatedTime+=time ;}
+      void minus(double time) { cumulatedTime-=time ;}
       double getCumulatedTime(void);
       static std::map<std::string,CTimer> allTimer;
@@ -26,4 +28,5 @@
       static std::string getAllCumulatedTime(void) ;
       static void release(void) { allTimer.clear() ;}
+      bool isSuspended() { return suspended; }
   };
 }
Index: XIOS3/trunk/src/transport/one_sided_client_buffer.cpp
===================================================================
--- XIOS3/trunk/src/transport/one_sided_client_buffer.cpp	(revision 2397)
+++ XIOS3/trunk/src/transport/one_sided_client_buffer.cpp	(revision 2399)
@@ -43,11 +43,9 @@
     CXios::getMpiGarbageCollector().registerWindow(winControl_) ;
 
-    
-
-    CTimer::get("create Windows").suspend() ;
-
     MPI_Barrier(winComm_) ;
     MPI_Win_attach(winControl_, control_, controlSize_*sizeof(MPI_Aint)) ;
     MPI_Barrier(winComm_) ;
+    CTimer::get("create Windows").suspend() ;
+ 
  //   MPI_Win_lock(MPI_LOCK_EXCLUSIVE, 0, 0, winControl_) ;
  //   MPI_Win_unlock(0,winControl_) ;
@@ -217,5 +215,7 @@
     {
       request = requests_.front() ;
+      if (info.isActive(logProtocol)) CTimer::get("sendTimelineEvent : MPI_Test").resume() ;
       MPI_Test(&request.mpiRequest, &flag, MPI_STATUS_IGNORE) ;
+      if (info.isActive(logProtocol)) CTimer::get("sendTimelineEvent : MPI_Test").suspend() ;
       if (flag==true)
       {
@@ -260,5 +260,7 @@
       }
     }
+    if (info.isActive(logProtocol)) CTimer::get("sendTimelineEvent : MPI_Isend").resume() ;
     MPI_Isend(request.buffer->start(),request.buffer->count(), MPI_CHAR, serverRank_, 20, interComm_, &request.mpiRequest ) ;
+    if (info.isActive(logProtocol)) CTimer::get("sendTimelineEvent : MPI_Isend").suspend() ;
     info(logProtocol)<<outStr.str()<<endl ;
     requests_.push_back(request) ;
Index: XIOS3/trunk/src/transport/one_sided_client_buffer.hpp
===================================================================
--- XIOS3/trunk/src/transport/one_sided_client_buffer.hpp	(revision 2397)
+++ XIOS3/trunk/src/transport/one_sided_client_buffer.hpp	(revision 2399)
@@ -190,5 +190,5 @@
       bool fixed_=false;
       size_t fixedSize_ = 0 ;
-      size_t currentBufferSize_=0 ;
+      size_t currentBufferSize_= 0  ;
       double growingFactor_ = 2. ; 
       MPI_Aint lastFreedBloc_=0 ;
Index: XIOS3/trunk/src/transport/one_sided_context_client.cpp
===================================================================
--- XIOS3/trunk/src/transport/one_sided_context_client.cpp	(revision 2397)
+++ XIOS3/trunk/src/transport/one_sided_context_client.cpp	(revision 2399)
@@ -96,10 +96,22 @@
         }
         itBuffer->second->eventLoop() ;
+        double time=CTimer::getTime() ;
         bool succed = itBuffer->second->writeEvent(timeLine, event)  ;
+        if (succed) 
+        {
+          time=CTimer::getTime()-time ;
+          if (!CTimer::get("Blocking time").isSuspended()) CTimer::get("Blocking time").minus(time) ;
+        }
+
         if (succed) event.remove() ;
         else event.next() ;
-        if (event.isFirst()) callGlobalEventLoop() ;
-      }
-      
+        if (event.isFirst())
+        {
+          if (CTimer::get("Blocking time").isSuspended()) CTimer::get("Blocking time").resume() ;
+          callGlobalEventLoop() ;
+        } 
+      }
+      if (!CTimer::get("Blocking time").isSuspended()) CTimer::get("Blocking time").suspend() ;
+
       if (isAttachedModeEnabled()) // couldBuffer is always true in attached mode
       {
Index: XIOS3/trunk/src/transport/one_sided_context_server.cpp
===================================================================
--- XIOS3/trunk/src/transport/one_sided_context_server.cpp	(revision 2397)
+++ XIOS3/trunk/src/transport/one_sided_context_server.cpp	(revision 2399)
@@ -93,15 +93,19 @@
     int flag;
     MPI_Status status;
-    
-    traceOff();
-    MPI_Iprobe(MPI_ANY_SOURCE, 20,interComm, &flag, &status);
-    traceOn();
-    if (flag==true)
-    {
-      requests_.push_back(CRequest(interComm, status)) ;
-      if (requests_.back().test()) 
-      {
-        processRequest(requests_.back()) ;
-        requests_.pop_back() ;
+    flag=true ;
+
+    while(flag)
+    {
+      traceOff();
+      MPI_Iprobe(MPI_ANY_SOURCE, 20,interComm, &flag, &status);
+      traceOn();
+      if (flag==true)
+      {
+        requests_.push_back(CRequest(interComm, status)) ;
+        if (requests_.back().test()) 
+        {
+          processRequest(requests_.back()) ;
+          requests_.pop_back() ;
+        }
       }
     }
@@ -139,7 +143,16 @@
     if (!pendingEvents_.empty())
     {
+/*
       SPendingEvent& nextEvent = pendingEvents_.begin()->second ;
       for(auto& buffer : nextEvent.buffers ) buffer->eventLoop() ;
       if (nextEvent.nbSenders==0) pendingEvents_.erase(pendingEvents_.begin()) ;
+*/
+      for(auto it=pendingEvents_.begin() ;  it!=pendingEvents_.end() ;)
+      {
+        SPendingEvent& nextEvent = it->second ;
+        for(auto& buffer : nextEvent.buffers ) buffer->eventLoop() ;
+        if (nextEvent.nbSenders==0) it=pendingEvents_.erase(it) ;
+        else ++it ;
+      }
     }
   }
@@ -188,5 +201,5 @@
           CEventServer event(this) ;
           for(auto& buffer : it->second.buffers) buffer->fillEventServer(currentTimeLine, event) ;
-
+          MPI_Barrier(intraComm) ;
           CTimer::get("Process events").resume();
           info(100)<<"Context id "<<context->getId()<<" : Process Event "<<currentTimeLine<<" of class "<<event.classId<<" of type "<<event.type<<endl ;
@@ -281,5 +294,9 @@
     else if (event.classId==CGrid::GetType()) CGrid::dispatchEvent(event);
     else if (event.classId==CGridGroup::GetType()) CGridGroup::dispatchEvent(event);
-    else if (event.classId==CField::GetType()) CField::dispatchEvent(event);
+    else if (event.classId==CField::GetType()) 
+    {
+      if (event.type==CField::EVENT_ID_UPDATE_DATA) CField::dispatchEvent(event);
+      else CField::dispatchEvent(event);
+    }
     else if (event.classId==CFieldGroup::GetType()) CFieldGroup::dispatchEvent(event);
     else if (event.classId==CFile::GetType()) CFile::dispatchEvent(event);
Index: XIOS3/trunk/src/transport/one_sided_server_buffer.cpp
===================================================================
--- XIOS3/trunk/src/transport/one_sided_server_buffer.cpp	(revision 2397)
+++ XIOS3/trunk/src/transport/one_sided_server_buffer.cpp	(revision 2399)
@@ -61,5 +61,6 @@
     else // receive standard event
     {
-
+      info(logProtocol)<<"received request from rank : "<<clientRank_<<"  with timeline : "<<timeline
+                                                        <<"   at time : "<<CTimer::get("XIOS server").getTime()<<endl ;
       bufferIn>> nbSenders ;
       nbSenders_[timeline] = nbSenders ;
@@ -101,8 +102,10 @@
       {
         info(logProtocol)<<"Send bloc to free : "<<lastBlocToFree_<<endl ;
+        if (info.isActive(logProtocol)) CTimer::get("Send bloc to free").resume() ;
         MPI_Win_lock(MPI_LOCK_EXCLUSIVE, windowRank_, 0, winControl_) ;
         MPI_Aint target=MPI_Aint_add(controlAddr_, CONTROL_ADDR*sizeof(MPI_Aint)) ;
         MPI_Put(&lastBlocToFree_, 1, MPI_AINT, windowRank_, target, 1, MPI_AINT, winControl_) ;
         MPI_Win_unlock(windowRank_,winControl_) ; 
+        if (info.isActive(logProtocol)) CTimer::get("Send bloc to free").suspend() ;
         lastBlocToFree_ = 0 ;        
       }
@@ -126,6 +129,10 @@
     if (!pendingRmaRequests_.empty())
     {
-      int flag ;
+      int flag ;    
+
+      if (info.isActive(logProtocol)) CTimer::get("transfer MPI_Testall").resume() ;
       MPI_Testall(pendingRmaRequests_.size(), pendingRmaRequests_.data(), &flag, pendingRmaStatus_.data()) ;
+      if (info.isActive(logProtocol)) CTimer::get("transfer MPI_Testall").suspend() ;
+      
       if (flag==true) 
       {
@@ -134,11 +141,30 @@
         {
           info(logProtocol)<<"unlock window "<<win<<endl ;
+          if (info.isActive(logProtocol)) CTimer::get("transfer unlock").resume() ;
           MPI_Win_unlock(windowRank_,windows_[win]) ; 
+          if (info.isActive(logProtocol)) CTimer::get("transfer unlock").suspend() ;
         }
         windowsLocked_.clear() ;
-          
+        
+
+        if (info.isActive(logProtocol)) CTimer::get("transfer MPI_Rget from "+std::to_string(clientRank_)).suspend() ;
+        if (info.isActive(logProtocol)) CTimer::get("lastTransfer from "+std::to_string(clientRank_)).suspend() ;
+        
+        size_t transferedSize = 0 ;
+        for(auto& count : pendingRmaCount_) transferedSize+=count ;
+
+        if (info.isActive(logProtocol))
+        {
+          double time = CTimer::get("lastTransfer from "+std::to_string(clientRank_)).getCumulatedTime() ;
+          info(logProtocol)<<"Tranfer message from rank : "<<clientRank_<<"  nbBlocs : "<< pendingRmaStatus_.size()
+                           << "  total count = "<<transferedSize<<"  duration : "<<time<<" s"
+                           << "  Bandwith : "<< transferedSize/time<< "byte/s"<<endl ;
+          CTimer::get("lastTransfer from "+std::to_string(clientRank_)).reset() ;
+         }
+
         isLocked_=false ;
         pendingRmaRequests_.clear() ;
         pendingRmaStatus_.clear() ;
+        pendingRmaCount_.clear() ;
         completedEvents_.insert(onTransferEvents_.begin(),onTransferEvents_.end()) ;
         
@@ -195,5 +221,5 @@
         if (bufferResize_.front().first==timeline)
         {
-          currentBufferSize_=bufferResize_.front().second ;
+          currentBufferSize_=bufferResize_.front().second * bufferServerFactor_ ;
           info(logProtocol)<<"Received new buffer size="<<currentBufferSize_<<"  at timeline="<<timeline<<endl ;
           bufferResize_.pop_front() ;
@@ -216,4 +242,7 @@
       
       if (isLocked_) ERROR("void COneSidedServerBuffer::transferEvents(void)",<<"windows is Locked");
+      
+      if (info.isActive(logProtocol)) CTimer::get("transfer MPI_Rget from "+std::to_string(clientRank_)).resume() ;
+      if (info.isActive(logProtocol)) CTimer::get("lastTransfer from "+std::to_string(clientRank_)).resume() ;
       for(auto& bloc : blocs) 
       {
@@ -221,5 +250,8 @@
         if (windowsLocked_.count(win)==0) 
         {
+          info(logProtocol)<<"lock window "<<win<<endl ;
+          if (info.isActive(logProtocol)) CTimer::get("transfer lock").resume() ;
           MPI_Win_lock(MPI_LOCK_SHARED, windowRank_, 0, windows_[win]) ;
+          if (info.isActive(logProtocol)) CTimer::get("transfer lock").suspend() ;
           windowsLocked_.insert(win) ;
         }
@@ -233,5 +265,5 @@
         pendingBlocs_.erase(pendingBlocs_.begin()) ;
         
-//        break ; // transfering just one event temporary => to remove
+        //  break ; // transfering just one event temporary => to remove
         
         if (pendingBlocs_.empty()) break ; // no more blocs to tranfer => exit loop
@@ -244,5 +276,5 @@
           if (bufferResize_.front().first==timeline)
           {
-            currentBufferSize_=bufferResize_.front().second ;
+            currentBufferSize_=bufferResize_.front().second * bufferServerFactor_ ;
             info(logProtocol)<<"Received new buffer size="<<currentBufferSize_<<"  at timeline="<<timeline<<endl ;
             bufferResize_.pop_front() ;
@@ -259,5 +291,8 @@
             if (windowsLocked_.count(win)==0) 
             {
+              info(logProtocol)<<"lock window "<<win<<endl ;
+              if (info.isActive(logProtocol)) CTimer::get("transfer lock").resume() ;
               MPI_Win_lock(MPI_LOCK_SHARED, windowRank_, 0, windows_[win]) ;
+              if (info.isActive(logProtocol)) CTimer::get("transfer lock").suspend() ;
               windowsLocked_.insert(win) ;
             }
@@ -331,9 +366,15 @@
     MPI_Request request ;
     MPI_Aint offsetAddr=MPI_Aint_add(addr, offset) ;
-    info(logProtocol)<<"receive Bloc from client "<<clientRank_<<" : timeline="<<timeline<<"  addr="<<addr<<"  count="<<count<<" buffer="<<buffer<<"  start="<<start<<endl ;
-    info(logProtocol)<<"check dest buffers ; start_buffer="<<static_cast<void*>(buffer->getBuffer())<<"  end_buffer="<<static_cast<void*>(buffer->getBuffer()+buffer->getSize()-1)
-             <<"  start="<<static_cast<void*>(buffer->getBuffer()+start)<<"   end="<<static_cast<void*>(buffer->getBuffer()+start+count-1)<<endl ;
+    if (info.isActive(logProtocol))
+    {
+      info(logProtocol)<<"receive Bloc from client "<<clientRank_<<" : timeline="<<timeline<<"  addr="<<addr<<"  count="<<count<<" buffer="<<buffer<<"  start="<<start<<endl ;
+      info(logProtocol)<<"check dest buffers ; start_buffer="<<static_cast<void*>(buffer->getBuffer())<<"  end_buffer="<<static_cast<void*>(buffer->getBuffer()+buffer->getSize()-1)
+               <<"  start="<<static_cast<void*>(buffer->getBuffer()+start)<<"   end="<<static_cast<void*>(buffer->getBuffer()+start+count-1)<<endl ;
+    }
+    if (info.isActive(logProtocol)) CTimer::get("MPI_Rget").resume() ;
     MPI_Rget(buffer->getBuffer()+start, count, MPI_CHAR, windowRank_, offsetAddr, count, MPI_CHAR, windows_[window], &request) ;
+    if (info.isActive(logProtocol)) CTimer::get("MPI_Rget").suspend() ;
     pendingRmaRequests_.push_back(request) ;
+    pendingRmaCount_.push_back(count) ;
     onTransferEvents_[timeline].push_back({buffer,start,count,addr}) ;
   }
@@ -348,5 +389,6 @@
     
     ostringstream outStr ;
-    outStr<<"Received Event from client "<<clientRank_<<"  timeline="<<timeline<<"  nbBlocs="<<completedEvent.size()<<endl ;
+    if (info.isActive(logProtocol)) outStr<<"Received Event from client "<<clientRank_<<"  timeline="<<timeline
+                                          <<"  nbBlocs="<<completedEvent.size()<<endl ;
     int i=0 ;
     MPI_Aint addr ;
Index: XIOS3/trunk/src/transport/one_sided_server_buffer.hpp
===================================================================
--- XIOS3/trunk/src/transport/one_sided_server_buffer.hpp	(revision 2397)
+++ XIOS3/trunk/src/transport/one_sided_server_buffer.hpp	(revision 2399)
@@ -132,4 +132,5 @@
       size_t currentBufferSize_=0 ;
       double growingFactor_ = 2. ;
+      double bufferServerFactor_=10. ;
       
       std::list<CBuffer*> buffers_ ;
@@ -144,4 +145,5 @@
       vector<MPI_Request> pendingRmaRequests_ ;
       vector<MPI_Status> pendingRmaStatus_ ;
+      vector<int> pendingRmaCount_ ;
 
       map<size_t, list<SBloc>> onTransferEvents_ ; // map<size_t timeline, list<pair<char* bloc, int count>>>
