in katran/lib/testing/BpfTester.cpp [267:311]
void BpfTester::testPerfFromFixture(uint32_t repeat, const int position) {
// for inputData format is <pckt_base64, test description>
int first_index{0}, last_index{0};
uint32_t duration{0};
uint64_t pckt_num{1};
std::string ret_val_str;
std::string test_result;
if (position < 0 || position >= config_.testData.size()) {
first_index = 0;
last_index = config_.testData.size();
} else {
first_index = position;
last_index = first_index + 1;
}
for (int i = first_index; i < last_index; i++) {
auto buf = folly::IOBuf::create(kMaxXdpPcktSize);
auto input_pckt =
parser_.getPacketFromBase64(config_.testData[i].inputPacket);
auto res = adapter_.testXdpProg(
config_.bpfProgFd,
repeat,
input_pckt->writableData(),
input_pckt->length(),
buf->writableData(),
nullptr, // output pckt size
nullptr, // retval
&duration);
if (res < 0) {
LOG(INFO) << "failed to run bpf test on pckt #" << pckt_num;
++pckt_num;
continue;
}
VLOG(2) << "pckt #" << pckt_num;
if (duration == 0) {
duration = 1;
}
auto pps = kNanosecInSec / duration;
LOG(INFO) << folly::format(
"Test: {:60} duration: {:10} ns/pckt or {} pps",
config_.testData[i].description,
duration,
pps);
++pckt_num;
}
}