问题标签 [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.
c - 从 Linux 内核调用流量控制 (tc)
有一个tc(8)
用于流量整形的用户空间工具,即
tc qdisc add dev eth0 root tbf rate 10mbit latency 100ms burst 5000
.
该tc
命令的内部实现使用 netlink 将特定消息发送到内核,这反过来会相应地改变事情。但是,对于这个特定过程,内核代码没有公共接口——就像没有公共 API 一样tc_qdisc_add(x,y,z)
——因为一切都取决于来自 netlink 消息本身的数据。
那么,是否有一个技巧可以简化流程并模拟来自内核的消息?有没有办法绕过用户空间调用tc
并仅从内核上下文中获得相同的结果?
google-cloud-platform - GKE 流量整形或带宽限制
有什么方法可以限制 pod 可以在 GKE 上使用的出口带宽量?
我找到了CNI Bandwidth Plugin,但是否可以将它与 GKE 一起使用。如果是这样,怎么做?
packet - 如何指定自定义配置文件为 Moongen 发送数据包?
我正在尝试发送多个数据包来测试服务器,但我需要发送不同的流量模式(发送 IPv4、ICMP、Ipv6 ...),但在发送流时我什至无法指定一种类型
[编辑-1]
CMD:./build/MoonGen ./packetgen.lua -tx 0 -rx 1
packetgen.lua 是 Moongen 的 LYA 文件夹中的默认脚本
docker - 模拟 docker 节点之间的网络延迟
描述
我正在尝试将我的应用程序部署在具有不同网络条件的多个节点上。该应用程序涉及 2-3 个节点集群和本地处理之间的数据传输。我想使用tc
和iptables
控制这些集群之间的流量。这样,我将能够模拟在不同位置部署我的应用程序并对其性能进行基准测试。
到目前为止我尝试了什么
此存储库提供了一个 docker 容器,该容器公开了一个 HTTP API 以执行流量整形。但是,这会在连接上盲目地执行流量整形。因此,每两个节点之间的延迟是它们各自延迟的总和。
我需要的
- 是否有任何具有所需功能的类似存储库?或者
- 您能否指出一些允许我进行此网络配置的资源?我需要资源来了解 docker 内部的子网、docker 网络之间的流量控制。
linux - Linux tc TBF 每秒间隔的速率控制有抖动。解决方案?
我正在使用带有 TBF 的 TC 工具来限制 Linux PC 出口链路的速率。我正在使用以下命令:
这工作正常。当我在连接到出口链接的 PC 上进行互联网速度测试时,我收到的平均速度为 40Mbps。
但是,我的要求是我想以 1 秒的间隔更改速率,即每秒,我将速率降低 1 Mbps 的步长。为此,我编写了一个 Python 代码,它以 1 秒的间隔执行以下命令:
wherereplace
是一个原子操作,它removes
和adds
新策略在同一个句柄上。虽然这些命令每秒执行一次,但我正在并行观察实时流。对于该实时流,40Mbps 到 25Mbps 足以提供高质量的流。
但问题是,每次以新的速率(比如 39Mbit)执行命令时,我观察到流中的很多抖动,就好像流中的某个人刚刚从一个位置跳到另一个位置一样。流中的平滑度被扰乱了几秒钟,比如 2-5 秒。
我幼稚的理解是,每当应用新规则时,现有 qdisc 的队列和缓冲区中的数据包都会被丢弃,并且带有新策略的新 qdisc 开始接收流的下一个数据包。由于现有的 qdisc 丢弃了这么多数据包,我观察到直播流中的抖动。
我的理解是正确的还是我遗漏了什么?
还请分享有关如何对链接进行速率控制的想法,以便顺利过渡到更新的速率。非常感谢。
linux - 单链中 BPF 过滤器之间的确切关系是什么
我有一个网络接口$dev
,它已经有一个 BPF 过滤器连接到一个特殊的 qdisc ingress
(带有 pref 1 和直接操作)。我添加了另一个(带有pref 2)。tc filter show dev $dev ingress
报告以下内容:
在这种情况下,链接过滤器之间的关系是什么:辅助过滤器(即我的)是否总是看到与第一个过滤器相同的流量,或者它是否取决于第一个过滤器返回的内容,特别是。鉴于它使用直接作用?我怀疑第二个是真的,但还不确定。
sockets - 什么情况下bpf_get_socket_cookie()返回0
bpf-helpers(7)
bpf_get_socket_cookie()
如果内部缺少套接字字段,则返回 0 的状态skb
。
在这种情况下,套接字字段在什么情况下会丢失?它是否取决于 BPF 程序附加到数据路径中的哪个位置?例如,对于bpf_get_socket_cookie()
附加的过滤器tc filter add dev ... ingress ... bpf ...
(比如在 Linux 内核 4.19 上),是否总是返回 0?
trafficshaping - 异步时间敏感网络模拟
嗨,每个人,
我正在开发低延迟应用程序,我希望使用时间敏感网络(TSN)特别是它的异步部分。
所以,我想知道您是否对支持 IEEE 802.1Qcr 或异步流量整形的开源模拟器、模型、框架有任何想法。
比所有人都好;
networking - 了解 Linux 流量控制 (TC) 花分类器设计
handle
TC Flower子系统中参数的用途和用途是什么!它在TC花艺设计中的作用和要求是什么?
linux - tc 中的入口/出口混淆
有人可以解释一下,因为我不明白以下概念。在 tc 中,您可以添加一个虚拟 qdisc,它可以通过某些特定规则处理一小部分流量。
例如,在这里为 eth0 创建一个显式入口 qdisc。顺便说一句,不知道这有什么意义,例如默认情况下不包含入口 qdisc。
然后,您应用一个过滤器,该过滤器调用一个操作以将具有某些规则 (0 0) 的传入流量重定向到虚拟设备 (ifb0)。但是过滤后的流量被标记为“出口”!为什么呢?该流量不应该在 ifb0 中也显示为入口吗?
或者入口是否意味着在 qdisk 内排队的任何流量(传入和传出流量)。因此,假设网卡收到了一些数据,并且在开始使用它之前,内核将它排入了某个 qdisc 中。该数据是入口。当这些数据出队以供系统处理时,它就变成了出口?反之亦然,应用程序将一些数据发送到某个 ip 地址,因此在将这些数据提供给网卡之前,内核会将这些数据放入适当的 qdisc 中。所以当它发生时,这些数据就变成了入口。那么在数据被适当的类处理并被出列传递给网卡之后,这些数据就变成了出口?
或者它的入口是从网卡到内核的所有流量?在这种情况下,为什么有出口
是不是因为流量是从网卡拥有的根qdisc的“入口”部分获取的,所以当“重定向”发生时,这个数据就变成了“出口”?为什么是“出口”?我不明白(