问题标签 [trafficshaping]
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.
algorithm - 从突发中传播数据
我正在尝试分散突发接收的数据。这意味着我有一些其他应用程序大量接收的数据。对于每个数据条目,我需要在某个服务器上执行一些额外的请求,我应该在这些服务器上限制流量。因此,我尝试在下一个数据突发到达之前的时间内分散请求。
目前我正在使用令牌桶来分散数据。然而,由于我收到的数据已经很糟糕,我仍然要么填满待处理请求的队列,要么每当有突发事件出现时我都会出现尖峰。所以这个算法似乎没有做我需要的那种整形。
还有哪些其他算法可以限制请求?我知道我有高负载和低负载的时候,所以应用程序应该很好地处理这两者。
我不确定我是否真的能够解释我目前遇到的问题。如果您需要任何澄清,请告诉我。
编辑:
我将尝试进一步澄清问题并解释为什么简单的速率限制器不起作用。
问题在于流量的突发性质以及突发在不同时间具有不同大小的事实。几乎不变的是每次突发之间的延迟。因此,我们得到了一堆数据记录进行处理,我们需要在下一批进入之前将它们尽可能均匀地分布。但是,我们不能 100% 确定下一批何时会进入,只是大致上,所以一个简单divide time by number of records
的不能正常工作。
速率限制不起作用,因为以这种方式传播数据是不够的。如果我们接近速率饱和,一切都很好,并且我们均匀分布(尽管这种情况不应该经常发生)。如果我们低于阈值,那么传播会变得更糟。
我将举一个例子来使这个问题更清楚:
假设我们将流量限制为每秒 10 个请求,并且新数据大约每 10 秒出现一次。
当我们在一个时间帧开始时获得 100 条记录时,我们将每秒查询 10 条记录,并且我们有一个完美的均匀分布。但是,如果我们只获得 15 条记录,我们将有 1 秒查询 10 条记录,1 秒查询 5 条记录和 8 秒查询 0 条记录,因此随着时间的推移,我们的流量水平非常不均。相反,如果我们每秒只查询 1.5 条记录会更好。然而,设置这个速率也会产生问题,因为新数据可能会更早到达,所以我们没有完整的 10 秒,并且 1.5 次查询是不够的。如果我们使用令牌桶,问题实际上会变得更糟,因为令牌桶允许突发在时间框架开始时通过。
然而这个例子过于简单了,因为实际上我们不能完全知道在任何给定时刻挂起的请求的数量,而只是一个上限。所以我们每次都必须根据这个数字进行节流。
linux - CentOS 6 中 OpenVZ 的默认流量整形规则
我有以下配置:
- OpenVZ主机运行CentOS 6(2.6.32-042stab049.6),千兆连接
- 在该 OpenVZ 上运行的单个容器
主机具有用于入站和出站连接的全千兆连接。容器对所有传出流量都具有千兆比特,但传入流量似乎受默认流量整形规则的约束,其中允许“突发”。下载大型二进制文件的速度为 15MB/s,持续几秒钟,然后又回落到 50Kb/s。
同样的文件可以一遍又一遍地全速下载到主机上。
未启用流量整形:
IPtables 没有什么花哨的:
实际上,我发现自己有点卡住了,并且正在考虑这可能只是 CentOS 6 的 OpenVZ 内核中的一个错误。我没有选择在不久的将来在 CentOS 5 上对其进行测试。有没有人对如何进行故障排除有任何其他想法?还是听起来很熟悉?鉴于主机运行只是 find 并且只有 CT 有传入带宽问题,我将 OpenVZ 视为原因。
linux-kernel - Linux 网络调度程序 (tc qdisc) 中的 POLICED 一词是以什么命名的?
POLICED 表示入口数据包的速度将受到限制,超出的数据包将被丢弃。
我在 include/linux/netdevice.h 中看到一条评论“skb 被警察枪杀”。
这当然是一样的,但是这个名字背后有什么故事吗?
c++ - 在Linux中寻找流量控制函数(即QOS)库
我尝试将一些 C++ 代码从 Windows 移植到 Linux,但在 Linux 中找不到用于流量控制功能的类似 API。
我需要这些功能。如果您知道我在哪里可以找到这样的 API,请帮忙?
感谢您的时间。
linux - 使用 tc 进行流量整形
我正在做一个学校项目,我试图模拟缓冲区膨胀的网络现象。这本质上是延迟,因为由于内存价格便宜,路由器中的缓冲区会随着时间变得越来越大。
现在,要开始这个项目,我已经对 linux "tc"-command 以及如何使用它进行了一些研究,但是我看不到如何根据我的需要设置正确的配置。情况如下;我有3台电脑。PC1 连接到 PC2,PC2 连接到 PC3。在此配置中,PC2 充当使用大缓冲区的路由器。流量通过 PC2 从 PC1 发送到 PC3。现在,我的意图是限制 PC2 可以用来将传入数据从 PC1 发送到 PC3 的带宽。
我打算通过在 PC2 上设置一个大缓冲区来执行此操作,并延迟从缓冲区中获取数据包以模拟较慢的链接。这应该会导致大缓冲区填满并引入延迟。
现在,我想向这个社区询问有关如何使用“tc”命令或其他适合该工作的工具来配置它的想法。或者,如果您对如何模拟缓冲区膨胀有其他想法,也欢迎您提出。
谢谢你的耐心。
linux - 使用 tc 进行流量整形不准确,带宽和延迟较高
我正在使用tc
内核 2.6.38.8 进行流量整形。限制带宽有效,添加延迟有效,但是当使用延迟对带宽进行整形时,如果限制>1.5 Mbps 左右,则实现的带宽总是远低于限制。
例子:
产生 201 毫秒的延迟(来自 ping),但容量仅为 1.66 Mbps(来自 iperf)。如果我消除延迟,带宽正好是 2 Mbps。如果我指定 1 Mbps 和 200 ms RTT 的带宽,一切正常。我也尝试过 ipfw + dummynet,它产生了类似的结果。
我已经尝试在 Kconfig 中使用重建内核HZ=1000
——但这并没有解决问题。其他想法?
linux - 如何使用 tc 和 cgroups 优先化数据包
我正在尝试对从某个进程组生成的数据包进行优先级排序,以便首先选择它们以从 PC 传输。我的目标是通过使用 cgroups 和 tc 来做到这一点,但它似乎不起作用。
首先我在ubuntu上设置cgroups如下,
在Firefox中浏览并运行后,
我明白了,
相反,我希望流量流入句柄 10,我做错了什么?
linux - 流量整形工具
我必须执行一项测试,根据目标端口和 IP 地址的组合区分(延迟或部分丢弃)我的一些传出流量。
我正在考虑在我进行测试的 linux 机器上进行本地操作。
有什么工具可以做到这一点?它们有多灵活?
jmeter - JMeter 突发流量整形
我想为我的 webapp 运行以下测试:
- 客户端应该使用 T 个线程
- 客户端应每秒生成 R 个请求 (rps)。交通不应该是统一的。相反,请求应该以 X 项的突发生成,其中 X > R,并且每个突发都尽快发生。
因此,如果 T=40,X = 10,000 且 R = 200:
- 在 t0,客户端尝试使用 40 个线程尽可能快地发送 10,000 个请求。
- 成功发送前 10,000 个批次后,客户端等待直到 t1 = t0 + 50 秒 (X/R)。如果发送第一批的时间超过 50 秒,则会生成错误。
- 在 t1,客户端尝试发送下一个 10,000 批次等
这可以用现有的 JMeter 配置或插件来模拟吗?
谢谢
testing - 减慢以太网连接
我有一个基于以太网的设备,我需要对其进行一些网络连接测试。
理想情况下,我既想降低带宽(低至 10 秒的 Kb/s),又想尽可能在被测设备和服务器之间的网络连接中引入延迟(一秒左右)。
关于我将如何做到这一点的任何想法?我在考虑可能以 QoS 为起点的路由器,但不确定我是否可以得到一个既会引入延迟又会减少带宽的路由器。