- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在构建一个具有各种网络流量的实时嵌入式 Linux 应用程序。在这组流量中,有两个连接是时间关键的。一个是输入数据,另一个是输出数据。我的应用程序需要此流量优先于其他非时间关键流量。
我关心两件事:
我已经(有点!)加快了 Linux 流量控制的速度,并且了解到它主要适用于导出流量,因为远程设备负责它发送给我的数据的优先级。我已将我的应用程序设置为实时进程,并解决了与运行它的优先级相关的问题。
我现在开始设置 tc。对于我的测试用例,这是我使用的:
tc qdisc add dev eth0 root handle 1: prio bands 3 priomap 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2
tc qdisc add dev eth0 parent 1:1 handle 10: pfifo
tc qdisc add dev eth0 parent 1:2 handle 20: pfifo
tc qdisc add dev eth0 parent 1:3 handle 30: pfifo
基本上我是说:通过频段 0 发送所有优先级为 7 的流量,并通过频段 2 发送所有其他流量。一旦我进行了这个简单的测试,我就会更好地处理其他流量。
首先让我们验证一下我的期望:我期望的是任何具有优先级 7 的流量应该总是在具有 任何 其他优先级的流量之前出去。这应该使此类流量的延迟相对不受盒子上其他流量的影响,不是吗?我的 mtu 设置为 1500,我通过界面获得大约 10 MB/秒的速度。频带 2 流量导致的频带 0 上的最大额外延迟是一个数据包(<=1500 字节)或 150 微秒(1500 字节/10 兆字节/秒 = 150 微秒)。
这是我的测试设置:
两个 Linux 盒子。框 1 运行一个 TCP 服务器来回显输入数据。盒子 2 连接到盒子 1,通过 TCP 发送数据包并测量延迟(发送时间到接收时间)。
我对 box Linux boxes 使用相同的 tc 设置。
在应用程序(服务器和客户端)中,我在套接字上设置 SO_PRIORITY 如下:
int so_priority = 7;
setsockopt(m_socket.native(), SOL_SOCKET, SO_PRIORITY, &so_priority, sizeof(so_priority));
我使用 tc 来验证我的流量是否通过 band 0,以及所有其他流量是否通过 band 2:
tc -s qdisc ls dev eth0
问题在于:当没有其他流量时,我发现延迟在 500 微秒左右。当我有其他流量时(例如,复制 100 MB 文件的 scp 作业),延迟会上升到 10+ ms。真正奇怪的是,我所做的 tc 工作没有任何影响。事实上,如果我交换频段(因此我的所有流量都通过优先级较低的频段 2,而其他流量通过频段 1),我看不到延迟有任何差异。
我的预期是,当网络上有其他流量时,我会看到延迟增加了大约 150 微秒,而不是 10 毫秒!顺便说一下,我已经验证用其他(非实时优先级)进程加载盒子不会影响延迟,也不会影响其他接口(interface)上的流量。
另一项注意事项是,如果我将 mtu 降低到 500 字节,则延迟会降低到大约 5 毫秒。尽管如此,这仍然比未加载的情况差一个数量级。还有--为什么改mtu影响这么大,而用tc设置优先级队列却没有效果???
为什么 tc 不帮助我?我错过了什么?
谢谢!
埃里克
最佳答案
您没有说您网络的其余部分,但我猜您正在上游路由器处排队,通常有很长的队列来优化吞吐量。解决它的最佳方法是将您的优先级队列馈送到带宽刚好低于上行带宽的整形器中。这样,您的批量优先级数据包将在您的盒子内排队,而不是在外部路由器处排队,从而允许您的高优先级数据包按您的预期跳到队列的前面。
关于linux - 为什么我的基于 Linux prio 的 tc 没有改善网络延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3756249/
我想调整我的 Linux 机器中的流量或控制带宽。但是我找不到任何与 Linux 中的 tc 命令功能相关的 API。正如您可能猜到的那样,我正在尝试使用 API 而不是命令。 任何建议都会有所帮助。
正如您在附图中看到的那样,根据 MediaInfo,我的文件中有两个不同的时间码。有没有办法将它们设置为不同的值? 谢谢你。 最佳答案 您可以使用 -timecode ffmpeg 的选项。 我有一个
请在问题中告诉我。我正在基于 CentOS x86_64 构建流量整形器,Linux 版本 2.6.32-431.3.1.el6.x86_64。所以,它有大约 10 个 u32 哈希表,所有的除数都是
我希望添加一组过滤器,这些过滤器会丢弃与参数匹配的数据包。似乎 tc 过滤器不支持基于匹配的丢弃操作,而是基于 qos 参数。有没有人能够放置 tc 下拉过滤器? 到目前为止,我发现的最常见的方法是使
我目前正在使用以下脚本: #!/bin/bash # # tc uses the following units when passed as a parameter. # kbps: Kilob
本文整理了Java中com.tc.util.ZipBuilder类的一些代码示例,展示了ZipBuilder类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平
我编写了一个脚本,可以让我通过 ts 限制我的带宽。 Ubuntu 18.04.5 LTS 上的工具。 问题是,即使上传速度正确限制在我在脚本上设置的限制,下载速度也不会被限制,我不明白为什么。 链接
我是使用 tc 命令的新手。 我正在编写一个测试脚本来为接口(interface)添加延迟。这是使用python和fabric api完成的 因此脚本将执行以下操作: sudo tc qdisc ad
我正在尝试使用命令 tc 模拟慢速网络链接.我用 netem模拟延迟和丢包,htb 模拟窄带宽,但我发现 netem 中有一个限制选项,这个选项有什么作用?会影响最终带宽吗? 我用谷歌搜索并在 htt
我已经成功安装了 spring 工具套件 n eclipse jee,现在正在设置 Pivotal tc 服务器,但我无法在 eclipse 中找到 Pivotal tc 服务器的安装目录。请帮忙..
我有 Spring Tool Suite (3.9.2.RELEASE),默认情况下它与 Pivotal TC Web 服务器一起提供,它是 Apache Tomcat 的一个变体。据我了解,为了为
我想让流量控制 TC 优先处理流量。例如,我需要 TCP 通过 band0,UDP 通过 band1,其他流量通过 band3。 我按如下方式创建 qdisc: tc qdisc add dev et
我第一次在 C 库中遇到以 .tc 和 .th 结尾的文件( http://www.vlfeat.org/api/files.html ,那里只列出了 .tc 文件。要查看 .th 文件,必须下载其源
很多时候,如果 mysql/mariadb 没有启动,因为像“无法初始化 tc.log”这样的错误,很多人建议删除这个文件。我想知道 mysql 在文件中存储了哪些信息。这是一个二进制文件,我找不到任
我尝试使用此命令为所有数据包添加固定数量的延迟(# tc qdisc add dev eth0 root netem delay 100ms) 输入后显示“找不到设备“eth0” 最佳答案 输入命令
我正在尝试使用 ubuntu 上的 tc 命令模拟来自源端口 7000 的 tcp 数据包的固定时间延迟。我使用的命令是: sudo tc qdisc add dev eth1 root handle
我正在做一个学校项目,在这个项目中我试图模拟缓冲区膨胀的网络现象。这本质上是延迟,由于内存价格便宜,路由器中的缓冲区随着时间的推移变得越来越大。 现在,为了开始这个项目,我已经对 linux“tc”-
我是 linux 的新手,我的目标是使用 tc 命令(或其他命令,如 ifconfig 或 iptables,但我认为我不需要它们)为“eth0”或“lo”创建一个简单的流量控制. 我的内核是 2.6
本文整理了Java中com.tc.admin.common.XScrollPane类的一些代码示例,展示了XScrollPane类的具体用法。这些代码示例主要来源于Github/Stackoverfl
本文整理了Java中com.tc.admin.common.XObjectTable类的一些代码示例,展示了XObjectTable类的具体用法。这些代码示例主要来源于Github/Stackover
我是一名优秀的程序员,十分优秀!