istio: 如何对istio数据平面进行benchmark

本文介绍了如何使用istio tools perf benchmark对istio数据平面进行性能测试,重点关注latency和资源消耗。测试结果显示,全mesh和仅服务端mesh模式相对于直连模式,时延增加不超过8ms,而高QPS下CPU使用率明显上升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景介绍

istio在应用时,会遇到的2个典型质疑是:

  • istio增加了单独的数据平面,从传输的角度来说增加了2跳,势必会带来latency的增加。那么latency的增加到底是多少呢?
  • proxy容器需要实现数据面的报文劫持、转发,以及一些策略的实施,其需要的cpu、内存,是多少呢?

要回答这些问题,就要对istio的数据面进行量化。 istio社区提供了一个工具来进行具体的测试: istio tools perf benchmark

为什么不需要对控制面进行量化呢?主要原因是数据面是O(n)的空间复杂度,而控制面几乎是O(1)的空间复杂度。另外一个原因是目前istio的遥测、限流等策略,均为envoy实现,不再交由mixer组件处理,因此集群规模提升后对控制面来说变化不大。

准备

istio tools perf benchmark需要读取Pod的监控信息,因此部署istio时,需要增加Prometheus组件。具体参考 Prometheus安装 。

tools install

安装参考 readme 即可。

注意:

  1. 资源需求比较多,要求至少32 cpu、4个node。建议使用完善的生产集群,确保硬件资源充裕。
  2. 测试套依赖python3/pip3/pipenv,所以最好是在有网环境进行安装,我这里选择的是本地PC;若离线安装,可能会遇到一些镜像源获取不到的问题。
  3. 不要在docker环境中安装,测试套运行过程中会使用docker执行一些命令,如果在docker中安装会执行失败。

安装后,将在namespace twopods-istio中部署2个Deployment:fortioclient/fortioserver。下面简要说明下。

fortioclient

Deployment的编排文件请见 deployment fortioclient 。Pod的编排文件请见pod fortioclient

来看 Pod fortioclient。其包括4个container和1个init container࿱

<think>嗯,用户问的是关于benchmark::benchmark_main的问题,我需要先理解这个是什么。看起来这是GoogleBenchmark库中的一个主函数,用于运行基准测试。用户可能想了解如何在C++中使用这个库来创建和运行基准测试。首先,我需要解释benchmark_main的作用,然后给出一个具体的例子,包括如何定义基准测试用例,编译代码,最后运行。同时,可能还需要说明一些常用的宏和参数,比如BENCHMARK_MAIN()的作用,以及如何传递命令行参数来过滤测试用例。然后,用户可能会有后续问题,比如如何传递参数到基准测试函数,或者如何比较不同算法的性能,所以需要预先准备好这些相关的问题。确保代码示例正确,并且解释清楚每个部分的作用,比如BENCHMARK宏和RegisterBenchmark的区别,以及基准测试函数中循环的设置。另外,可能还需要提醒用户注意编译时的链接选项,比如-lbenchmark和可能的-pthread选项。最后,相关问题的部分需要涵盖用户可能进一步想了解的内容,比如自定义测试参数、不同测试用例的比较、结果分析工具以及与其他框架的区别。</think>在C++性能测试领域,`benchmark::benchmark_main`是Google Benchmark库提供的主函数入口,用于自动发现并运行所有已注册的基准测试。以下是典型的使用示例: ```cpp #include <benchmark/benchmark.h> static void BM_StringCreation(benchmark::State& state) { for (auto _ : state) { std::string empty_string; benchmark::DoNotOptimize(empty_string); } } BENCHMARK(BM_StringCreation); static void BM_StringCopy(benchmark::State& state) { std::string x = "hello"; for (auto _ : state) { std::string copy(x); benchmark::DoNotOptimize(copy); } } BENCHMARK(BM_StringCopy); BENCHMARK_MAIN(); // 等效于默认的main函数实现 ``` 代码解释: 1. `BENCHMARK`宏用于注册基准测试 2. `benchmark::State&`参数控制测试循环 3. `benchmark::DoNotOptimize`阻止编译器优化掉被测代码 4. `BENCHMARK_MAIN()`自动生成main函数实现 编译命令示例: ```bash g++ benchmark_example.cpp -lbenchmark -lpthread -o mybenchmark ``` 运行时可用的参数: ```bash ./mybenchmark --benchmark_filter=BM_String.* # 过滤测试用例 ./mybenchmark --benchmark_counters_tabular=true # 表格输出 ./mybenchmark --benchmark_repetitions=5 # 重复测试次数 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值