问题标签 [qos]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
9343 浏览

android - 如何计算 IP 连接视频的丢包、抖动和 QoS 参数?

我遇到了一个移动应用程序,它执行语音和视频质量测试,以衡量通过 IP 连接的语音/视频体验的质量。测试计算远程流的抖动、丢包等值。

我很想知道这是怎么做到的?编写这样一个移动应用程序需要什么?

任何形式的帮助表示赞赏。

谢谢。

0 投票
1 回答
252 浏览

java - Java中的通用QoS消息批处理和压缩

我们有一个用 Java 编写的自定义消息传递系统,我想实现一个基本的批处理/压缩功能,基本上在重负载下它会将一堆推送响应聚合成一个推送响应。

本质上:

  • 如果我们检测到过去一秒内发送了 3 条消息,则开始批处理响应并安排一个计时器在 5 秒内触发
  • 计时器会将接下来 5 秒内收到的所有消息响应聚合成一条消息

在我只是在 Java 中寻找最好的例子之前,我确信这已经实现了。我不是在寻找一个完整的消息传递层,只是每秒检测基本消息并安排一些任务(显然我可以自己轻松编写这个我只是想将它与任何现有算法进行比较以确保我不会错过任何边缘情况或我已尽可能简化问题)。

是否有构建基本 QoS 批处理/节流/压缩实现的好的开源示例?

0 投票
3 回答
4889 浏览

linux - 为什么我的基于 Linux prio 的 tc 没有改善网络延迟?

我正在构建一个具有各种网络流量的实时嵌入式 linux 应用程序。在一组流量中,两个连接是时间关键的。一个是输入数据,另一个是输出数据。我的应用程序需要此流量优先于其他非时间关键型流量。

我关心两件事:

  1. 尽量减少由于这两个连接上的过载而丢弃的数据包数量。
  2. 通过这两个连接上的设备(输入到输出)的延迟最小化。

我已经(有点!)加快了 Linux 流量控制的速度,并且了解它主要适用于出口流量,因为远程设备负责它发送给我的数据的优先级。我已将我的应用程序设置为实时进程,并解决了与运行它的优先级相关的问题。

我现在开始设置 tc。对于我的测试用例,这是我使用的:

基本上我的意思是:在频段 0 上发送所有优先级为 7 的流量,在频段 2 上发送所有其他流量。一旦我进行了这个简单的测试,我将在处理其他流量方面做得更好。

首先让我们验证一下我的期望:我期望的是任何具有优先级 7 的流量应该总是在具有任何其他优先级的流量之前出去。这应该使此类流量的延迟相对不受盒子上其他流量的影响,不是吗?我的 mtu 设置为 1500,我通过界面获得了大约 10 MB/秒的速度。由频段 2 流量引起的频段 0 上的最大额外延迟是一个数据包(<=1500 字节),或 150 微秒(1500 字节/10 兆字节/秒 = 150 微秒)。

这是我的测试设置:

两个 Linux 盒子。框 1 运行回显输入数据的 TCP 服务器。框 2 连接到框 1,通过 TCP 发送数据包并测量延迟(发送时间到接收时间)。

我对 box Linux 机器使用相同的 tc 设置。

在应用程序(服务器和客户端)中,我在套接字上设置 SO_PRIORITY 如下:

我使用 tc 来验证我的流量是否超过频段 0,以及所有其他流量是否超过频段 2:

问题是:当没有其他流量时,我发现延迟在 500 us 范围内。当我有其他流量(例如,复制 100 MB 文件的 scp 作业)时,延迟会上升到 10+ 毫秒。真正奇怪的是,我所做的所有 tc 工作都没有任何影响。事实上,如果我交换频段(所以我的所有流量都通过较低优先级的频段 2,而其他流量通过频段 1),我看不出延迟有任何差异。

我所期待的是,当网络上有其他流量时,我会看到延迟增加约 150 毫秒,而不是 10 毫秒!顺便说一句,我已经验证了用其他(非实时优先级)进程加载盒子不会影响延迟,也不会影响其他接口上的流量。

另一项需要注意的是,如果我将 mtu 降低到 500 字节,则延迟会降低到大约 5 毫秒。尽管如此,这比空载情况下要差一个数量级。还有——为什么改变mtu会影响这么大,但是用tc设置优先级队列却没有效果???

为什么 tc 不帮助我?我错过了什么?

谢谢!

埃里克

0 投票
1 回答
3431 浏览

linux - Linux 低延迟 tcp 流

我有一个具有此要求的嵌入式应用程序:一个传出 TCP 网络流需要绝对最高优先级,而不是所有其他传出网络流量。如果有任何数据包等待在该流上传输,它们应该是下一个发送的数据包。时期。

我的成功衡量标准如下: 衡量没有后台流量时的高优先级延迟。添加后台流量,然后再次测量。延迟的差异应该是发送一个低优先级数据包的时间。对于 100Mbps 链路,mtu=1500,大约是 150 us。我的测试系统有两个通过交叉电缆连接的 linux 盒子。

我尝试了很多很多东西,尽管我已经大大改善了延迟,但没有达到目标(我目前看到后台流量增加了 5 毫秒的延迟)。我已经发布了另一个非常具体的问题,但我认为我应该从一个一般性问题重新开始。

第一个问题:这在 Linux 上可行吗?第二个问题:如果是这样,我需要做什么?

  • tc?
  • 我应该使用什么 qdisc?
  • 调整内核网络参数?哪个?
  • 我还缺少什么?

谢谢你的帮助!

埃里克

2010 年 10 月 4 日更新:我在发送端和接收端都设置了 tcpdump。这是我在传输端看到的(事情似乎很拥挤):

在接收端,我看到:

问题似乎是 SCP 数据包的长度(25208 字节)。根据 mtu(我为此测试设置为 600)将其分解为多个数据包。但是,这发生在比流量控制更低的网络层中,因此我的延迟取决于最大 tcp 传输数据包大小,而不是 mtu!啊。。

有人知道在 Linux 上设置 TCP 的默认最大数据包大小的好方法吗?

0 投票
5 回答
39195 浏览

linux - How to set the maximum TCP Maximum Segment Size on Linux?

In Linux, how do you set the maximum segment size that is allowed on a TCP connection? I need to set this for an application I did not write (so I cannot use setsockopt to do it). I need to set this ABOVE the mtu in the network stack.

I have two streams sharing the same network connection. One sends small packets periodically, which need absolute minimum latency. The other sends tons of data--I am using SCP to simulate that link.

I have setup traffic control (tc) to give the minimum latency traffic high priority. The problem I am running into, though, is that the TCP packets that are coming down from SCP end up with sizes up to 64K bytes. Yes, these are broken into smaller packets based on mtu, but this unfortunately occurs AFTER tc prioritizes the packets. Thus, my low latency packet gets stuck behind up to 64K bytes of SCP traffic.

This article indicates that on Windows you can set this value.

Is there something on Linux I can set? I've tried ip route and iptables, but these are applied too low in the network stack. I need to limit the TCP packet size before tc, so it can prioritize the high priority packets appropriately.

0 投票
1 回答
311 浏览

windows - DLL 建立的 TCP 连接的 QoS

我们的 Windows 应用程序要求第 3 方 DLL 与服务器建立 TCP 连接。我们需要对这个 TCP 连接应用 QoS 参数,以减少延迟。关于如何做到这一点的任何想法?我们对涉及外部工具的建议以及让我们的应用调用 Windows API 持开放态度。

该应用程序在 Windows XP 和更新版本上运行。

0 投票
2 回答
507 浏览

android - 安卓通话质量

在 Android 语音通话期间是否可以获取或测量通话质量?

想法是按位置了解通话期间质量音频的分布。

0 投票
1 回答
227 浏览

windows - yahoo messenger QoS 应用类型

我正在尝试为 yahoo messenger 视频/语音通话设置 QoS 规则。但是我不知道他们是什么类型的服务。它们是 IGMP、SIP、H323、RSTP、....?或者他们使用什么端口范围?

0 投票
0 回答
613 浏览

c++ - Windows Permissions/Policy required to use qWAVE

I'm attempting to use qWAVE (on Windows Server 2008 R2) to set arbitrary DSCP values on socket traffic. I think I'm setting up the flow correctly, but when I try to call QOSSetFlow(), I'm getting an ERROR_ACCESS_DENIED error ("The calling application does not have sufficient privileges for the requested operation."). The user that's running this code is a member of the Administrators group, and I've looked through the various security policies but didn't see anything that looked relevant. Does anyone know what permission I need to give the user to get this API to work?

Thanks!

UPDATE: I've got a test program that just tries to set the DSCP values, and when I check "Run as Administrator" under the Compatibility menu everything works fine. So the code is okay, and the Administrator User has the necessary permissions. Unfortunately the actual service can't be run as the Administrator User. Is there a way to give the Administrators Group (or a specific user) some of the permissions that the Administrator User has?

0 投票
1 回答
184 浏览

networking - 利他网络连接带宽估计

假设两个对等方 Alice 和 Bob 通过 IP 网络连接。Alice 和 Bob 正在交换有损压缩数据包,这些数据包是实时生成和消费的(想想 VoIP 或视频聊天应用程序)。该服务旨在应对可用带宽最少的情况,但依赖于低延迟。Alice 和 Bob 将使用适当的 QoS 配置文件标记他们的连接。

Alice 和 Bob 希望使用可变比特率压缩,并希望消耗所有剩余带宽可用于他们之间的连接,但会根据网络状态自愿降低消耗的比特率。然而,他们希望保持稳定的链接,即避免由于拥塞和带宽调整前的延迟而导致解码数据流中断。然而,他们完全有可能丢失一些数据包。

TL;DR:Alice 和 Bob 想从头开始实施 VoIP 协议,并对带宽和拥塞控制感到好奇。

您建议 Alice 和 Bob 阅读哪些论文和资源?主要在带宽估计和拥塞控制领域。