问题标签 [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.

0 投票
1 回答
1918 浏览

linux - 流量整形 tc-htb,burst 没有效果

我正在做一些测试以尝试理解 tc-htb 参数。我正在使用 VmWare Player(2.0.5 版),Windows 7 作为主机,Ubuntu(4.4.0-93 版)作为来宾。

我的计划是使用 iperf 通过 localhost 生成已知数据流(udp 100Mbits/sec),然后使用 tc-htb 限制带宽。使用 Wireshark 监控结果。

Iperf 设置:

  • 服务器:
    iperf –s –u –p 12345
  • 客户:
    perf –c 127.0.0.1 –u –p 12345 –t 30 –b 100m

测试率参数:

我启动 Wireshark 并开始使用 iperf 发送数据,10 秒后我使用 tc 命令执行脚本:

tc qdisc add dev lo root handle 1: htb tc class add dev lo parent 1: classid 1:1 htb rate 50mbit ceil 75mbit tc filter add dev lo protocol ip parent 1: prio 1 u 32 match ip dport 12345 0xffff flowid 1:1

Wireshark 中的 I/O Graph 显示带宽从 100 Mbit/s 下降到 50 Mbit/s。好的。

测试突发参数:

我从与上面相同的带宽限制开始,再过 10 秒后,我使用以下命令运行脚本:

tc class change dev lo parent 1: classid 1:1 htb rate 50mbit ceil 75mbit burst 15k

在 I/O 图表中,我期望从 50mbit(速率级别)到 75mbit(ceil 级别)进行查看。更改命令无效,电平为 50mbit。我还测试了更大的突发值,没有效果。我究竟做错了什么?

0 投票
1 回答
1008 浏览

linux - tc 类 ceil 继承

在 Linux 上使用流量整形 (tc),尝试将吞吐量限制在 2 个级别。

1:20 类继承自 1:10,但不适用流量限制。流量正在使用最后一个类的限制进行限制。

我正在使用以下过滤器对每个站点进行过滤:

使用 iperf TCP 测试:

所有流量都通过 2 个类:

0 投票
0 回答
228 浏览

linux - tc 命令将 TCP 数据包排入队列但随机丢弃 UDP 数据包

在我的 CentOS 7.3 系统上,我想配置以太网接口,以便它立即将传出的 TCP 数据包排入队列,但以可配置的速率随机丢弃传出的 UDP 数据包。该tc(8)命令似乎能够使用附加到 root 的基本过滤器qdiscematch表达式和具有 default 的单个子类来执行此操作pfifo leaf qdisc。然而,在阅读了大量文档之后,我仍然不确定qdisc要使用什么根目录。

完成此操作的tc(8)命令是什么?

0 投票
0 回答
441 浏览

bash - 在 bash 脚本中使用 tc control 命令会产生无法解释的结果

我将数据包中的帧从客户端发送到要调整流量的服务器上的服务器。我使用这个脚本来控制流量。先降到 80 kbit,10 秒后降到 40 kbit。(我知道这太低了,我通常使用更大的值)

在我的客户端上,我生成了一个使用 GNUPlot 绘制的日志文件,并且我都计算了服务器和客户端上的平均上传速度。在这种情况下为 2740 kbit/s。我没有正确使用 tc 工具吗?

使用 GNUPlot 生成的结果图片: 上传速度

tc qdisc show dev ens3

给我

qdisc pfifo_fast 0:根 refcnt 2 个波段 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

我无法删除

如果有人能指出我正确的方向并能解释为什么会有如此高的上传速率,为什么会有帧以更高的吞吐量通过然后成形,那就太好了。谢谢你。


按照建议更新


好的 tc 中的上传速率 80 kbit 给我大约 80*8 = 640 KiloBit/s。依然无法解释小包收入的波动

0 投票
1 回答
969 浏览

firewall - pfSense 流量整形 - 均匀分配带宽

我试图在网络上平均分配每个 IP 的流量。我已经看到了一个使用 monowall 的实现,它带有一个简单的复选框,用于均匀分配带宽,但是由于 monowall 已停产,我正在求助于 pfSense 或 Opnsense。使用 pfSense,它似乎无法正常工作,并且在应用防火墙规则来完成这项工作时存在延迟。Opnsense 也与 pfSense 非常相似,因为它是它的一个分支,所以我看不到一个可行的解决方案。有谁知道如何使用 pfSense 或 Opnsense 来做到这一点?

0 投票
1 回答
184 浏览

openwrt - tc qdisc 与 openwrt 中的 GRE

我正在尝试在 openwrt 板上实现对 GRE 接口的流量控制。为此,我遵循以下步骤,

我已经在 Ubuntu PC 上测试了这个,发现可以正常工作。此外,如果我将隧道更改为 VPN 隧道而不是 GRE,它工作正常。

在 GRE 中实现 tc 需要处理任何其他事情吗?

任何帮助将不胜感激。

0 投票
0 回答
662 浏览

openwrt - 如何限制一组主机的带宽

我想通过向我的路由器添加适当的配置来限制一组本地主机的带宽。

IIUC 我可以像我想要的那样限制带宽:

除了这会影响连接到的所有机器$IF,而我只希望其中一些受到影响。我想我可以用以下内容标记相关数据包:

但是,我无法弄清楚要在哪个类调度程序上使用的缺失部分$IF,以及如何为类tbf的这些数据包添加队列1:10

[顺便说一句,我看到有人投票结束这个问题。知道为什么吗?有没有更好的地方可以问这样的问题?]

0 投票
0 回答
268 浏览

networking - sk_buff 中的传输头

是否保证skb->transport_header在入口路径上始终正确设置?具体来说,我在界面上设置了一个 tc ,并通过操作qdisc附加到它;此路径存在于数据包到达 TCP/IP 堆栈之前,因此我假设数据包层、网络和传输应该由驱动程序设置。filtertcqdisc->filter->action

我正在使用virtio_netveth驱动程序进行测试,它skb_transport_header_was_set总是返回 true,我假设这意味着传输标头总是被初始化。但这可能取决于驱动程序?

0 投票
1 回答
1265 浏览

api - 用于租户隔离的 API 流量整形/节流策略

我将通过提供一些关于我们正在做什么以及我们面临的问题的背景来开始我的问题。

  • 我们目前正在构建一个 SaaS(托管在 Amazon AWS 上),它由几个位于 API 网关后面的微服务组成(我们使用的是 Kong)。
  • 网关处理身份验证(通过具有 API 密钥的消费者)并公开我提到的这些微服务的 API,所有这些都是无状态的(没有会话、cookie 或类似内容)。
  • 每项服务都使用 ECS 服务(在一台或多台 EC2 机器上运行的每个服务一个或多个 docker 容器)部署,并使用 Amazon Application Load Balancer (ALB) 进行负载平衡。
  • 所有租户(客户端)共享相同的环境,即相同的机器和资源。鉴于我们的商业模式,我们预计(起初)只有少数但“大”的租户。
  • 在请求期间,对这些服务的大多数请求都会转化为大量资源使用(主要是 CPU)。服务一个请求所需的时间在 2-10 秒的范围内(而不是像传统的“类 web”应用程序那样毫秒)。这意味着我们每分钟处理的请求相对较少,其中每个请求都需要一段时间来处理(后台或批处理不是一种选择)。

目前,我们没有策略来限制或限制租户在给定时间段内可以发出的请求数量。考虑到上面的最后两个考虑因素,很容易看出这是一个问题,因为租户发出的请求超出我们的处理能力几乎是微不足道的,这会导致服务质量下降(即使对于其他租户来说也是如此,因为共享资源方法)。

我们正在考虑限制/限制或一般准备系统以“隔离”租户的策略,因此一个租户不能通过发出超出我们处理能力的更多请求来降低其他租户的性能:

  • 速率限制:定义租户可以发出的最大请求数/米。如果有更多请求到达,请丢弃它们。Kong甚至有一个插件。可悲的是,我们使用“按请求付费”的定价模式,而业务不允许我们使用这种策略,因为我们希望为尽可能多的请求提供服务以便获得报酬。如果租户的过多请求需要更多时间,那很好。
  • 租户隔离:为每个租户创建一个隔离的环境。这个也被丢弃了,因为它使维护变得更加困难,并导致资源使用率降低和成本增加。
  • 自动缩放:调出更多的机器来吸收爆发。根据我们的经验,Amazon ECS 在这方面的速度不是很快,当这些新机器准备就绪时,可能为时已晚。
  • 请求“节流”:在 API 网关级别使用 Leaky Bucket 或 Token Bucket 等算法,以确保请求以我们知道我们可以处理的速率到达服务。

目前,我们倾向于采用选项 4。我们希望以这样一种方式实施请求限制(流量整形),以便在与租户预先商定的速率内(由合同强制执行)提出的所有请求都将传递给服务毫不拖延。由于我们预先知道每个租户每分钟将发出多少请求(至少估计),我们可以相应地调整我们的基础设施(加上安全边际)。

如果突发到达,多余的请求将排队(达到一个限制),然后以固定速率释放(使用漏桶或类似算法)。这将确保租户不会影响其他租户的性能,因为请求将以预定义的速率访问服务。理想情况下,允许的请求率将是“动态的”,即租户可以使用其他未使用它们的租户的“每分钟请求数”(在安全范围内)。我相信这被称为“动态速率漏桶”算法。目标是最大限度地利用资源。

我的问题是:

  • 提议的策略是否可行?您知道此用例的任何其他可行策略吗?
  • 是否有可以提供这种流量整形功能的开源、商业或 SaaS 服务?据我所知,Kong 或 Tyk 不支持这样的东西,所以......还有其他 API 网关可以吗?
  • 如果Kong不支持这一点,实现我所说的插件有多难?我们必须考虑到它需要一些共享状态(例如使用 Redis),因为我们正在使用多个 Kong 实例(用于负载平衡和高可用性)。

非常感谢你,米克尔。

0 投票
2 回答
548 浏览

networking - Traffic shaping over Google Interconnect

Considering an hybrid scenario based on on-premises systems and VM/services on Google Cloud, is it possible to shape the traffic over the Google Dedicated Interconnect link (e.g. define different priorities, different bandwidth, etc.)?

Are additional SW/HW needed at the end-points? Are there some technical constraints that need to be considered?

Thanks, Luca