bool ZeroMQPublisher::test(uint32_t datasize) { m_times.clear(); zmq::message_t command(1); *(char*)(command.data())='S'; //READY mp_commandpub->send(command); mp_commandsub->recv(&command); if(*(char*)command.data()!=2) return false; //cout << endl; //BEGIN THE TEST: uint32_t result; m_clock.setTimeNow(&m_t1); for(uint32_t i = 0;i<(uint32_t)n_samples;++i) { zmq::message_t latency_out(datasize+4); zmq::message_t latency_in; memset(latency_out.data(),65,datasize+4); #if defined(_WIN32) sprintf_s((char*)(latency_out.data()),datasize+4, "%d", i); #else sprintf((char*)(latency_out.data()),"%d",i); #endif mp_datapub->send(latency_out); mp_datasub->recv(&latency_in); // std::istringstream iss(static_cast<char*>(latency_in.data())); // cout << "RECEIVED DATA: "<< iss.str()<< endl; sscanf_s((char*)latency_in.data(),"%d",&result); // cout << "recevied result: "<< result << " and i is: "<<i << endl; // cout << "SENT/REC: "<< *(uint32_t*)latency_out.data() <<" / "<<*(uint32_t*)latency_in.data()<<endl; if(result != i) { cout << "RECEIVED BAD MESSAGE, STOPPING TEST"<<endl; *(char*)(command.data()) = 10; mp_commandpub->send(command); return false; } } m_clock.setTimeNow(&m_t2); m_times.push_back(TimeConv::Time_t2MicroSecondsDouble(m_t2) -TimeConv::Time_t2MicroSecondsDouble(m_t1)-m_overhead); analizeTimes(datasize); printStat(m_stats.back()); return true; }
bool ZeroMQSubscriber::test(uint32_t datasize) { cout << "Preparing test with data size: " << datasize+4<<endl; zmq::message_t command(1); //cout << "WAITING FOR COMMAND"<<endl; mp_commandsub->recv(&command); //cout << "COMMAND RECEIVED"<<endl; if(*(char*)command.data()!='S') { return false; } *(char*)command.data()=2; mp_commandpub->send(command); for(uint32_t i = 0;i<(uint32_t)n_samples;++i) { //cout << "waiting for data "<<endl; zmq::message_t latency_in; zmq::message_t latency_out(datasize+4); mp_datasub->recv(&latency_in); if(n_sub == 1) { //cout << "received of size:"<<latency_in.size()<<endl; // std::istringstream iss(static_cast<char*>(latency_in.data())); // cout << "RECEIVED DATA: "<< iss.str()<< endl; // // memset(latency_out.data(),'S',datasize+4); memcpy(latency_out.data(),latency_in.data(),latency_in.size()); // cout << "REC/SENT: "<< *(uint32_t*)latency_in.data() <<" / "<<*(uint32_t*)latency_out.data()<<endl; mp_datapub->send(latency_out); } } cout << "TEST OF SiZE: "<< datasize +4 << " ENDS"<<endl; eClock::my_sleep(100); return true; }
void latency_q2c(struct d_info *dip, __u64 tstamp, __u64 latency) { plat_x2c(dip->q2c_plat_handle, tstamp, latency); latency_out(dip->q2c_ofp, tstamp, latency); }