如何使用Google基准对数据包处理功能进行基准测试?基本上具有状态约束的重复功能?

问题描述 投票:0回答:1

基本上,我想在遍历数据包转储文件时测量时间。看着谷歌基准文档,我来了:

BENCHMARK_DEFINE_F(MyFixture, FooTest)(benchmark::State& state) {
   for (auto _ : state) {
      // read
      if (readPacket() == NO_MORE_PACKET) {
          break;
      }

      if (!isPacketOfConsideration()) {
          continue;
      }

      // some extra bookkeeping code if required

      time t1{};
      processPacket();
      time t2{};
      state.SetIterationTime(t2 - t1);
  }
}

BENCHMARK_REGISTER_F(MyFixture, Footest)->UseManualTime();

上面是一个伪代码,它使用手动时间来测量和设置迭代时间。问题基本上是:

  1. 我可以在状态下使用Google基准的for循环break吗?
  2. 我可以在不设置迭代时间的情况下在状态下continue谷歌基准测试的for循环吗?
c++ benchmarking google-benchmark
1个回答
0
投票

我建议尝试黑盒测试。此处的微基准测试可能无济于事。

我将其分为几个步骤。

  1. 生成或记录很多数据包数据。
  2. 在分析器中输入此数据包数据,并测量完全处理它所需的时间。可能这可以在代码内部或整个应用程序中使用。
  3. 进行更改,重新运行基准测试,比较结果

我从事开源项目,该项目使用此方案对游戏服务器进行基准测试。首先,挂钩sendtorecv功能,并记录所有数据包。然后sleep被钩住,因此服务器在两次游戏循环之间没有处于休眠状态。 sendto刚刚返回,recv从文件中读取包数据。

Detailed description.

Black box testing

© www.soinside.com 2019 - 2024. All rights reserved.