- 主题:udp socket收包程序怎么写cpu利用率最低
有个问题想请教一下大家 现在有个linux上的应用程序需要用socket从一个fd持续收大量udp包 速率大概维持在800Mb pps大约70k 因为是嵌入式设备资源有限 所以这个程序对cpu利用率非常敏感 希望能越低越好 而且不能开多线程来运行
我理解这种场景缓冲区几乎一直是满的 用循环+recvfrom是不是已经是cpu利用率最低的方案 有没有什么其他好的方法呢 请大家不吝赐教啊
来自 V2072A
--
修改:pht398 FROM 222.94.236.*
FROM 222.94.236.*
为什么要利用率低呢?如果是怕影响别的进程运行,那就加个usleep呗,或者复杂一点,限制每秒接受多少字节
【 在 pht398 的大作中提到: 】
: 有个问题想请教一下大家 现在有个linux上的应用程序需要用socket从一个fd持续收大量udp包 速率大概维持在800Mb pps大约70k 因为是嵌入式设备资源有限 所以这个程序对cpu利用率非常敏感 希望能越低越好 而且不能开多线程来运行
: 我理解这种场景缓冲区几乎一直是满的 用循环+recvfrom是不是已经是cpu利用率最低的方案 有没有什么其他好的方法呢 请大家不吝赐教啊
:
: ...................
--
FROM 119.191.211.*
先试试把recvfrom改成recvmmsg吧。应该能省不少syscall
【 在 pht398 的大作中提到: 】
: 有个问题想请教一下大家 现在有个linux上的应用程序需要用socket从一个fd持续收大量udp包 速率大概维持在800Mb pps大约70k 因为是嵌入式设备资源有限 所以这个程序对cpu利用率非常敏感 希望能越低越好 而且不能开多线程来运行
: 我理解这种场景缓冲区几乎一直是满的 用循环+recvfrom是不是已经是cpu利用率最低的方案 有没有什么其他好的方法呢 请大家不吝赐教啊
:
: ....................
- 来自「最水木 for iPhone12,8」
--
FROM 166.216.158.*
嗯 我也想到了这个 recvmmsg我设置的flag是MSG_WAITFORONE 也就是只阻塞收一条 我理想的结果是一次recvmmsg可以把缓冲区的消息全部收到 但实际情况是调一次recvmmsg总是收到固定vlen条消息 是不是说明收的速度已经跟不上缓冲区写入的速度了呢
【 在 lambdai 的大作中提到: 】
: 先试试把recvfrom改成recvmmsg吧。应该能省不少syscall
来自 V2072A
--
FROM 49.65.246.*
要保证能处理所有收到的数据 同时cpu利用率越低越好 因为是嵌入式系统 这个核上还有别的程序要跑 引入sleep会造成接收单位数量消息的系统调用增多 恐怕不能解决问题啊
【 在 smthxes 的大作中提到: 】
: 为什么要利用率低呢?如果是怕影响别的进程运行,那就加个usleep呗,或者复杂一点,限制每秒接受多少字节
来自 V2072A
--
FROM 49.65.246.*
改成“使用率”吧,“利用率”低的含义完全是反的
轮询是对的,再进一步要在内核pass掉nic的中断和协议栈,dpdk就是这么实现的,但是不知道你的embedded环境是否支持dpdk
--
FROM 111.198.57.*
我猜recvmmsg可能更适用于缓冲区有大量数据包待接收但并非持续高速率收包的场景
【 在 lambdai 的大作中提到: 】
: 先试试把recvfrom改成recvmmsg吧。应该能省不少syscall
来自 V2072A
--
FROM 49.65.246.*
哪个系统调用会增多?
【 在 pht398 的大作中提到: 】
: 要保证能处理所有收到的数据 同时cpu利用率越低越好 因为是嵌入式系统 这个核上还有别的程序要跑 引入sleep会造成接收单位数量消息的系统调用增多 恐怕不能解决问题啊
: 来自 V2072A
--
FROM 119.191.211.*
usleep也是系统调用啊
【 在 smthxes 的大作中提到: 】
: 哪个系统调用会增多?
来自 V2072A
--
FROM 49.65.246.*
dpdk是支持的 但我理解dpdk是用轮询换中断 需要另一个核占满来轮询吧 现在已经没有资源了 问题就限于如何把收包的应用程序负载降低
【 在 eggcar 的大作中提到: 】
: 改成“使用率”吧,“利用率”低的含义完全是反的
:
: 轮询是对的,再进一步要在内核pass掉nic的中断和协议栈,dpdk就是这么实现的,但是不知道你的embedded环境是否支持dpdk
来自 V2072A
--
FROM 49.65.246.*