渲染任务运行中 cpu 100%的时候,对ping机器的时延 会有影响吗?
【资料图】
理论上是有一定关系的,cpu 100%时,不丢包就是好的了,延迟变大或存在一定的丢包率是符合预期的
渲染进程跑满CPU的时候,其他进程慢,网络业务可能会存在用户态收包缓慢 -------> 触发windows的特殊逻辑hold了网卡驱动收包buffer ------> 网卡驱动没有可用buffer放进收包vring进而丢包。
当用户态收包慢的时候,网卡驱动预分配的Buffer可能会被AFD持有最多1秒的时间, 在这断时间内,buffer没法被网卡驱动用来收包,只有等到用户态进程收包,或者1秒后Timer超时,Buffer才会还给网卡驱动。如果用户态收包缓慢,被AFD Timer临时持有的Buffer过多,并且这段时间外部又持续有包进来,就可能出现丢包现象。
XP、2003都没有这个优化逻辑,看了2008-2022的情况,最早出现在win2008,默认开启且无法关闭,Win2012 ---> 2022默认开启但可以通过注册表控制:
这个全局变量有对应符号,微软的变量命名也很直白:AfdDoNotHoldNICBuffers。
如果为true,AFD模块里面buffer timer相关的所有逻辑都不会执行,等同于回退到xp/2003的实现。
可以通过在注册表Services\AFD\Parameters路径下添加一个名为DoNotHoldNicBuffers的参数来控制开关:
值为1表示不允许占用网卡驱动Buffer,也就是彻底禁用掉上面说的内存拷贝优化机制;
值为0表示允许;
如果注册表中不存在这个参数(默认不存在),则在afd.sys加载时会判断当前系统版本,如果是Server则启用优化,普通桌面版则禁用。
方案:执行这句命令后重启机器,在CPU几乎打满的场景中,可以将100%丢包现象缓解为包延时变大,但不会丢包。
reg add "HKLM\SYSTEM\CurrentControlSet\Services\AFD\Parameters" /v "DoNotHoldNicBuffers" /d 1 /t REG_DWORD /f
最好是提前把这句命令做到镜像里,即关机做镜像前已经执行过这句命令。
如果要显著缓解,最好是不要用掉全部vCPU,参考:https://cloud.tencent.com/developer/article/2240284
关键词:
理论上是有一定关系的,cpu100%时,不丢包就是好的了,延迟变大或存在一定的丢包率是符合预期的
App3月20日消息,对于不合格进出口商品,上海口岸始终保持高压严查态势。2022年,上海海关累计对313批检验不合格的进口商品实施退运或销毁,对
3月17日,广发证券(000776)融资买入1 04亿元,融资偿还1 16亿元,融资净卖出1197 55万元,融资余额34 23亿元。
总投资582.2亿元!四川巴中市2023年将开展项目建设大会战
2023-01-16上能电气(300827)12月29日主力资金净卖出4347.53万元_天天微速讯
2022-12-302023年福建省普通高中学业水平合格性考试将如期举行_环球滚动
2022-12-29