baidu / dperf

dperf is a 100Gbps network load tester.
https://dperf.org
Apache License 2.0
5.05k stars 519 forks source link

[Bug]virtio场景下,利用多核特性测试cc,发现限制不住 #491

Closed BOY332 closed 2 months ago

BOY332 commented 2 months ago

配置描述

client: image server: image

我想利用多核来测CC,因为是在虚拟机里面使用,用的半虚拟化驱动virtio,因为不支持rss,所以配置 rss auto mq_rx_none

问题现象

1)CC限制不住,配置1000,冲到了1w多,并且不断增长 image 2) 不知为何会有fin包产生,以及TCP DROP,socket_close,我理解我配置了保活,带宽够的情况下不应该会有socket close,否则会产生新的cc。 3) PKTS速率对不上,我配置的keepalive为1s,cc为2000,速率应该为2000pps,结果不可控

基本定位思路

socket是基于每个核维护的,不支持RSS,那么流量的发和收就有可能不在同一个核上,这个时候就会产生DUP,DUP操作会增加其它核cc统计计数,就会有同样的socket分布在不同的核上,但是在显示cc的时候,并没有减去dup,造成比配置的cc多,我尝试了改成如下图su所示的代码,然后看到界面显示正常了。 image

至于FIN包是怎么来的?我估计和不支持RSS也有关系,因为我用MLX5网卡测试数据是正常的

期望

期望作者能支持一下这种情况,比如多核virtio场景下,我配置的cc是多少最终生效就应该是多少,以及发包速率应和配置对应,就是多少让产品适应更多的场景。

pengjianzhang commented 2 months ago

尝试修改一下配置

  1. 用最新的版本
  2. 去掉cps
  3. tx_busrt 4
BOY332 commented 2 months ago

现象

main分支最新拉取的代码,配置的1w cc,1s两个保活包,不知道为啥爬不上去,以及socket close image

client

image

server

image

pengjianzhang commented 2 months ago

keepalive 1s

BOY332 commented 2 months ago

client 1s, server 100s 配置10wcc,这样的配置cc差不多了,误差不大 image

另外想请教两个问题: 1)为什么会时不时有tcpdrop,以及fin包,Rt 2)可否在一定cc下控制pps,比如1s保活2个包,达到20wpps的cc流量,配置keepalive 1s 2 image

pengjianzhang commented 2 months ago
  1. 网卡RSS 有没有缺陷? 用单CPU测一下,是否有tcpdrop?
  2. keepalive 500ms
BOY332 commented 2 months ago

单cpu测了一下,还是有tcpdrop,virtio网卡是虚拟网卡,不支持RSS。 image

pengjianzhang commented 2 months ago

把并发降低,看看 是不是达到网卡极限,或者中间设备丢包了

pengjianzhang commented 2 months ago

试一下最新代码,连接数控制更加精准