gpt4 book ai didi

linux - 设置 linux socket - high priority 的效果是什么?

转载 作者:IT王子 更新时间:2023-10-29 00:24:20 37 4
gpt4 key购买 nike

来自 linux 套接字 manpage :

SO_PRIORITY
Set the protocol-defined priority for all packets to be sent on this socket. Linux uses this value to order the networking queues: packets with a higher priority may be processed first depending on the selected device queueing discipline.

这是设置使用:

int optval=7 // valid values are in the range [1,7]  
// 1- low priority, 7 - high priority
setsockopt(socket, SOL_SOCKET, SO_PRIORITY, &optval, optlen)

然后说,这个过程有:
一个。来自 socket_1 - socket_10 的 10 个低优先级套接字(优先级 = 4),
b. 1 个高优先级套接字 (priority=7) - socket_11

以下场景会发生什么:

  1. send():进程在 socket_1-socket_10socket_11 上发送多个消息, socket_11 上的 IMO 消息优先于通过 socket_1-socket_10 发送的消息。

  2. recv():如果在上述所有套接字上都收到了多个消息,socket_11 是否在读取消息时获得更高的优先级 socket_1-socket_10 ?

  3. 有没有一种方法可以使用 lsofnetstat 等工具从命令行测量套接字优先级?

最佳答案

每个 Linux 网络接口(interface)都有一个所谓的qdisc(排队规则)。您的问题的答案取决于所使用的 qdisc。一些排队规则,如 pfifo and bfifo ,没有优先级的概念。因此,如果使用它们,答案很简单——不会有优先级排序

但是,使用优先级 qdisc,例如 pfifo_fast (通常是 Linux 上的默认 qdisc),套接字优先级会产生影响。

这张图片描述了 pfifo_fast qdisc 中发生的事情:

pfifo_fast queues

我们看到数据包根据其优先级放置在队列中。当接口(interface)发送下一个数据包(实际上是 frame,但我们先不谈这个)时,它将始终选择发送具有最高优先级的数据包。这意味着如果有多个数据包在等待,优先级最高的将首先发送。请注意,这需要接口(interface)拥塞 - 如果接口(interface)不拥塞并且数据包一从操作系统到达就发送,则没有排队,因此没有优先级。

其他 qdisc 有不同的结构和策略。例如 SFQ qdisc:

enter image description here

考虑到这一点,让我们回到您的问题:

  1. 是的,根据 qdisc,来自 socket_11 的数据包可能会先于来自其他套接字的数据包发送。如果使用 pfifo_fast,并且如果 socket_11 发送的流量足以使出站网络接口(interface)饱和,那么来自其他套接字的数据包甚至可能根本不会发送。这在实践中不太可能,因为通常很难在使其他资源饱和之前使网络接口(interface)饱和,除非它是无线接口(interface)。

  2. 数据包从机器的网络接口(interface)到套接字所采用的路径比网络本身快得多。而且,正如您还记得的那样,要使优先排序产生任何效果,就必须存在拥塞。在典型情况下,到达您的网络接口(interface)的数据包已经通过了网络传输的瓶颈,因此不太可能出现拥塞。

    您当然可以使用 ingress qdiscother mechanisms人为地制造瓶颈,并优先考虑传入流量。但你为什么要这样做?只有在构建流量整形器或类似网络设备时,这才有意义。另外,由于这个 qdiscs 是一个低级别的机制,发生在更高级别的套接字之下(甚至在桥接或路由之前),我怀疑套接字的优先级会对 in 产生任何影响。

  3. 我不知道,但我很乐意学习。 This kernel module接近,但它似乎无法显示优先级标志,只能显示常规套接字选项。

关于linux - 设置 linux socket - high priority 的效果是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37998404/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com