栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

通过域套接字传输的单个数据包的大小的实际限制是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

通过域套接字传输的单个数据包的大小的实际限制是什么?

有许多因素将决定可以在Unix套接字上发送的数据包的最大大小:

  1. wmem_max
    套接字发送缓冲区的最大尺寸的内核设置,其确定发送的最大大小缓冲器可以使用被设置
    setsockopt (SO_SNDBUF)
    。可以读取当前设置
    /proc/sys/net/core/wmem_max
    ,也可以使用进行设置
    sysctl net.core.wmem_max=VALUE
    (添加设置
    /etc/sysctl.conf
    以使更改在重新引导后保持不变)。请注意,此设置适用于所有套接字和套接字协议,而不仅适用于Unix套接字。

  2. 如果将多个数据包发送到Unix套接字(使用SOCK_DATAGRAM),则可以无阻塞发送的最大数据量取决于套接字发送缓冲区的大小(请参见上文) Unix上未读数据包的最大数目套接字(内核参数

    net.unix.max_dgram_qlen
    )。

  3. 最后,数据包(SOCK_DATAGRAM)需要连续的内存根据[Linux可以发送的AF_UNIX数据报消息的最大大小是多少?)。内核中有多少连续内存取决于许多因素(例如,系统上的I / O负载等)。

因此,为了最大程度地提高应用程序的性能,您需要大的套接字缓冲区大小(以最小化由于套接字写系统调用而导致的用户/内核空间上下文切换)和大的Unix套接字队列(以尽可能地使生产者和使用者分离)
)。但是,套接字发送缓冲区大小和队列长度的乘积不能太大,以免导致内核用尽连续的内存区域(导致写失败)。

实际数字将取决于您的系统配置和使用情况。您将需要通过测试来确定限制…从

wmem_max
256Kb和
max_dgram_qlen
32
开始说,然后继续增加一倍,
wmem_max
直到您注意到事情开始破裂。您将需要进行调整
max_dgram_qlen
以在一定程度上平衡生产者和消费者的活动(尽管如果生产者比消费者快得多或慢得多,则队列大小不会有太大影响)。

请注意,您的生产者将必须

wmem_max
通过调用来专门设置套接字发送缓冲区的大小为字节,
setsockopt(SO_SNDBUF)
并且必须将数据拆分为
wmem_max
字节块(而使用者将不得不重新组装它们)。

最佳猜测:实际限制将在wmem_max〜8Mb和unix_dgram_qlen〜32附近。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/408945.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号