37 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include <catch2/catch.hpp>
 | ||
| #include <iostream>
 | ||
| 
 | ||
| #include <rte_cycles.h>
 | ||
| 
 | ||
| TEST_CASE("tsc timer", "[]") {
 | ||
|     // count and print seconds since test started
 | ||
|     // stop at 30 seconds
 | ||
|     // const std::string clear(100, '\n');
 | ||
|     const uint64_t MAX_SECONDS = 30;
 | ||
|     uint64_t cycles_old = 0;
 | ||
|     uint64_t cycles = 0;
 | ||
|     uint64_t hz = rte_get_tsc_hz();
 | ||
|     uint64_t seconds = 0;
 | ||
|     uint64_t delta_t = 0;
 | ||
| 
 | ||
|     // print initial message
 | ||
|     std::cout << "cycles : " << cycles << "\t"
 | ||
|               << "hz : " << hz << "\t"
 | ||
|               << "seconds : " << seconds << "\t" << std::endl;
 | ||
| 
 | ||
|     while (seconds < MAX_SECONDS) {
 | ||
|         cycles_old = cycles;
 | ||
|         cycles = rte_get_tsc_cycles();
 | ||
|         hz = rte_get_tsc_hz();
 | ||
| 
 | ||
|         // calculate
 | ||
|         delta_t = uint64_t(1 / hz * (cycles - cycles_old));
 | ||
|         seconds += delta_t;
 | ||
| 
 | ||
|         // print
 | ||
|         // std::cout << clear;
 | ||
|         std::cout << "cycles : " << cycles << "\t"
 | ||
|                   << "hz : " << hz << "\t"
 | ||
|                   << "seconds : " << seconds << "\t" << std::endl;
 | ||
|     }
 | ||
| } |