in src/util.c [80:146]
int process_test_results(struct ntttcp_test_endpoint *tep)
{
struct ntttcp_test_endpoint_results *tepr = tep->results;
unsigned int i;
double cpu_speed_mhz;
double test_duration = tepr->actual_test_time;
uint64_t total_bytes = tepr->total_bytes;
long double cpu_ps_total_diff;
if (test_duration == 0)
return -1;
/*
* calculate for per-thread counters, even for receiver's sync thread
* we will ignore that sync thread when printing in "print_test_results()"
*/
for (i = 0; i < tep->total_threads; i++) {
if (tep->results->threads[i]->is_sync_thread == true)
continue;
tepr->threads[i]->KBps = tepr->threads[i]->total_bytes / tepr->threads[i]->actual_test_time / DECIMAL_BASED_UNIT_K;
tepr->threads[i]->MBps = tepr->threads[i]->KBps / DECIMAL_BASED_UNIT_K;
tepr->threads[i]->mbps = tepr->threads[i]->MBps * BYTE_TO_BITS;
}
/* calculate for overall counters */
cpu_speed_mhz = read_value_from_proc(PROC_FILE_CPUINFO, CPU_SPEED_MHZ);
tepr->cpu_speed_mhz = cpu_speed_mhz;
tepr->retrans_segments_per_sec = (tepr->final_tcp_retrans->retrans_segs - tepr->init_tcp_retrans->retrans_segs) / test_duration;
tepr->tcp_lost_retransmit_per_sec = (tepr->final_tcp_retrans->tcp_lost_retransmit - tepr->init_tcp_retrans->tcp_lost_retransmit) / test_duration;
tepr->tcp_syn_retrans_per_sec = (tepr->final_tcp_retrans->tcp_syn_retrans - tepr->init_tcp_retrans->tcp_syn_retrans) / test_duration;
tepr->tcp_fast_retrans_per_sec = (tepr->final_tcp_retrans->tcp_fast_retrans - tepr->init_tcp_retrans->tcp_fast_retrans) / test_duration;
tepr->tcp_forward_retrans_per_sec = (tepr->final_tcp_retrans->tcp_forward_retrans - tepr->init_tcp_retrans->tcp_forward_retrans) / test_duration;
tepr->tcp_slowStart_retrans_per_sec = (tepr->final_tcp_retrans->tcp_slowStart_retrans - tepr->init_tcp_retrans->tcp_slowStart_retrans) / test_duration;
tepr->tcp_retrans_fail_per_sec = (tepr->final_tcp_retrans->tcp_retrans_fail - tepr->init_tcp_retrans->tcp_retrans_fail) / test_duration;
tepr->packets_sent = tepr->final_tx_packets - tepr->init_tx_packets;
tepr->packets_received = tepr->final_rx_packets - tepr->init_rx_packets;
tepr->total_interrupts = tepr->final_interrupts - tepr->init_interrupts;
tepr->packets_per_interrupt = tepr->total_interrupts == 0 ? 0 : (tepr->packets_sent + tepr->packets_received) / (double)tepr->total_interrupts;
cpu_ps_total_diff = tepr->final_cpu_ps->total_time - tepr->init_cpu_ps->total_time;
tepr->cpu_ps_user_usage = (tepr->final_cpu_ps->user_time - tepr->init_cpu_ps->user_time) / cpu_ps_total_diff;
tepr->cpu_ps_system_usage = (tepr->final_cpu_ps->system_time - tepr->init_cpu_ps->system_time) / cpu_ps_total_diff;
tepr->cpu_ps_idle_usage = (tepr->final_cpu_ps->idle_time - tepr->init_cpu_ps->idle_time) / cpu_ps_total_diff;
tepr->cpu_ps_iowait_usage = (tepr->final_cpu_ps->iowait_time - tepr->init_cpu_ps->iowait_time) / cpu_ps_total_diff;
tepr->cpu_ps_softirq_usage = (tepr->final_cpu_ps->softirq_time - tepr->init_cpu_ps->softirq_time) / cpu_ps_total_diff;
/* calculate for counters for xml log (compatible with Windows ntttcp.exe) */
tepr->throughput_Bps = (double)total_bytes / test_duration;
tepr->total_bytes_MB = (double)total_bytes / DECIMAL_BASED_UNIT_M;
tepr->throughput_MBps = tepr->total_bytes_MB / test_duration;
tepr->throughput_mbps = tepr->throughput_MBps * BYTE_TO_BITS;
tepr->cycles_per_byte = total_bytes == 0 ? 0 :
cpu_speed_mhz * 1000 * 1000 * test_duration * (tepr->final_cpu_ps->nproc) * (1 - tepr->cpu_ps_idle_usage) / total_bytes;
tepr->packets_retransmitted = tepr->final_tcp_retrans->retrans_segs - tepr->init_tcp_retrans->retrans_segs;
tepr->cpu_busy_percent = ((tepr->final_cpu_usage->clock - tepr->init_cpu_usage->clock) * 1000000.0 / CLOCKS_PER_SEC)
/ (tepr->final_cpu_usage->time - tepr->init_cpu_usage->time);
tepr->errors = 0;
/* calculate TCP RTT */
if (tep->endpoint_role == ROLE_SENDER && tep->test->protocol == TCP)
run_ntttcp_rtt_calculation_for_sender(tep);
return 0;
}