AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[tc](server)

Martin Hope
Gui13
Asked: 2023-04-20 18:24:03 +0800 CST

在 Linux 中使用 cgroup & tc 似乎不完全适用我的费率:10 倍差异

  • 6

我正在使用我在互联网上随处可见的“标准”方式(包括 ServerFault)来尝试使用 cgroups 和 tc 来限制进程的带宽。

我在实践中看到的是,我设置的限制tc在实践中会增加大约 10 倍,请参见此屏幕截图:

在此处输入图像描述

我将rate和设置ceil为 100kbit(不是 100kbps),所以我希望看到下面的 wget 显示大约每秒 10 KB。相反,我看到 500kBps。

如果我将我的 htp 速率更新为 100 kbps(每秒 100 千字节),我会看到我的速率飙升至 10兆字节/秒,这是 100 倍以上:

tc class change dev ens3 classid 1:1 htb rate 100kbps

# the curl in the other terminal now shoots up to 9.6MB/s
image.iso.1    53%[================>                ] 346,72M  **9,48MB/s**    tps 49s

我不明白为什么这与我的 htb 配置不一致。你知道我做错了什么吗?

tc
  • 1 个回答
  • 64 Views
Martin Hope
Hadarelv
Asked: 2022-02-06 13:34:04 +0800 CST

HTB“速率”参数限制可用带宽

  • 0

再会,

我有以下情况:从一台机器到另一台机器的 4 个 TCP 数据流。每个流都有自己的目标 TCP 端口。4 个流有不同的优先级:高、中、低、大容量。高、中、低产生 1.67Mbit/s,批量产生 10Mbit/s。(iperf3 用于生成流量)。每个流的数据包都标有适当的 DiffServ 标记 (DSCP),该标记用于 HTB qdisc 中的流量分类。

目标:HTB qdisc 的配置方式应该是在任何时候高优先级流获得所需的 1.67Mbit/s,中等优先级也保证 1.67Mbit/s,但优先级略低,其余流量应保证 50kbit /秒。如果每个流空闲并且流生成的带宽比最初指定的多,则每个流必须能够使用整个链路。

流量的产生:

High priority:
iperf3 -c 192.168.88.254 -p 5150 -t 62 -b 1.67M -l 128 -S 224 
Medium priority:
iperf3 -c 192.168.88.254 -p 5160 -t 62 -b 1.67M -l 4K -S 160 
Low priority:
iperf3 -c 192.168.88.254 -p 5170 -t 62 -b 1.67M -l 4K -S 96 
Bulk:
iperf3 -c 192.168.88.254 -p 5180 -t 62 -b 10M -l 4K -S 0 

HTB qdisc的配置

NI="eth2"
AC="sudo /sbin/tc class add dev "

# Delete previous qdiscs
sudo /sbin/tc qdisc del dev $NI root

# Add HTB as root with default class 40 for uncategorized traffic
sudo /sbin/tc qdisc add dev $NI root handle 1: htb default 40
sudo /sbin/tc class add dev $NI parent 1: classid 1:1 htb rate 3.5mbit ceil 1000mbit

# high priority stream DSCP 224 - 1110 0000 - 0xE0
$AC $NI parent 1:1 classid 1:10 htb rate 1.7mbit ceil 1000mbit prio 1
# medium priority stream 
$AC $NI parent 1:1 classid 1:20 htb rate 1.7mbit ceil 1000mbit prio 2
# low priority stream
$AC $NI parent 1:1 classid 1:30 htb rate 50kbit ceil 1000mbit prio 3
# bulk stream
$AC $NI parent 1:1 classid 1:40 htb rate 50kbit ceil 1000mbit prio 4 

# Add filters to classify packets based on dscp mark

# high priority DSCP 224 - 1110 0000 - 0xE0
sudo /sbin/tc filter add dev $NI protocol ip parent 1: prio 1 u32 match ip tos 0xE0 0xff flowid 1:10
# medium priority DSCP 160 - 1010 0000 - 0xA0
sudo /sbin/tc filter add dev $NI protocol ip parent 1: prio 2 u32 match ip tos 0xA0 0xff flowid 1:20
# low priority DSCP 96 - 1100 0000 - 0x60
sudo /sbin/tc filter add dev $NI protocol ip parent 1: prio 3 u32 match ip tos 0x60 0xff flowid 1:30
# bulk DSCP 0 - 0000 0000 - 0x00
sudo /sbin/tc filter add dev $NI protocol ip parent 1: prio 4 u32 match ip tos 0x00 0xff flowid 1:40

流量分类正确。我可以看到 tc 类统计中的相关计数器在上升。我重新检查了很多次。

问题: 此配置正确地将带宽分配给高优先级和中等优先级流。Low prio 和 bulk 也获得了 50kbit。但是,我无法通过链接超过根类1:1中指定的值作为速率,即 3.5mbit。

在我阅读的每篇关于 HTB 的文章和手册中都指出,“rate”参数是该类的最低保证速率,“ceil”是它可以获得的最大数量。在我的情况下,“速率”似乎将链接限制在指定值。这绝对不是期望和预期的行为。

如果我将根类的“rate”参数设置为与“ceil”相同的值,即 1000mbit,则不会发生优先级,并且可用带宽在所有流之间平均分配。这不是所需的行为,因为在可用带宽波动的情况下,prio 流量将低于 1.67Mbit/s

我是否误解了根类中“rate”参数的含义?这个问题是否与“量子”等其他 HTB 参数有关?我还观察到,在数据传输过程中,每个类都有负数的令牌。这很糟糕吗?如果是这样,我应该调整哪些参数以及如何调整?

先感谢您!

linux qos tc htb
  • 1 个回答
  • 140 Views
Martin Hope
ePezhman
Asked: 2021-12-24 05:36:52 +0800 CST

Netem 模拟 WAN 的哪些值?

  • 0

我正在开发一个分布式应用程序,我目前正在 LAN 上的 Ubuntu VM 集群上运行该应用程序。我想评估我的应用程序在 WAN 上的性能。所以我决定用Netem和tc来增加网络延迟等。。我的问题是我不知道要为延迟、抖动、丢包等设置哪些值,这代表了一个通用的 WAN,用于创建有意义的评估结果,支持我声称应用程序已通过 WAN 进行评估的说法?到目前为止,我还没有找到一个资源表明,将我转发到这样的资源也是非常受欢迎的。非常感谢。

ubuntu wide-area-network latency tc jitter
  • 1 个回答
  • 28 Views
Martin Hope
Genie
Asked: 2021-05-01 06:25:08 +0800 CST

数据包入口的 TC 损坏

  • 0

我是 tc 的新手,这可能是个幼稚的问题,但如果我错了,请纠正我

tc qdisc change dev eth0 root netem corrupt 5%

上述命令是否仅损坏入口数据包?

如果是,输出损坏是否支持不同的命令来配置?

PS:我在网上找不到有关出口腐败的相关帮助。

unix terminal tc
  • 1 个回答
  • 115 Views
Martin Hope
red0ct
Asked: 2020-11-14 05:22:08 +0800 CST

降低 Linux 中的网络流量优先级

  • 1

我想降低特定网络流量的优先级,tc特别是tc-u32在我的 Linux 服务器中使用。换句话说,所有其他流量必须比具有指定 IP-proto 的流量具有更高的优先级。

我正在尝试应用此 tc 过滤器规则来降低传出 ICMP 流量的优先级:

tc f a dev eno1 parent 1: prio 2 u32 match ip protocol 1 0xff

但它返回此错误:

RTNETLINK answers: Invalid argument
We have an error talking to the kernel

在这种情况下,我对 tc 仍有一些不清楚的地方:

  1. 如何使这条规则正常工作?
  2. 我是否需要一些其他规则来告诉 Linux 诸如“所有其他流量以 1 优先级”之类的东西,或者这是默认完成的?
  3. 这种命名背后的基本逻辑是什么 - 1:,2:等等?是什么0xff意思?我应该明确指定classid字段吗?
linux networking traffic-shaping tc linux-networking
  • 1 个回答
  • 570 Views
Martin Hope
Vasili Syrakis
Asked: 2020-10-02 18:39:01 +0800 CST

tc:一个 qdisc 用于两个类(多队列)

  • 2

我的服务器上的默认tc配置是:

# tc class show dev ens5
class mq :1 root
class mq :2 root

# tc qdisc show dev ens5
qdisc mq 0: root
qdisc fq 0: parent :2 limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 18030 initial_quantum 90150 low_rate_threshold 550Kbit refill_delay 40.0ms
qdisc fq 0: parent :1 limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 18030 initial_quantum 90150 low_rate_threshold 550Kbit refill_delay 40.0ms

我正在尝试复制这个确切的配置,但值已更改。

似乎我无法更改上面列出的那些,所以我尝试了以下方法:

tc qdisc add dev ens5 root mq

这会将设备的类更改为以下内容:

# tc class show dev ens5
class mq 1:1 root
class mq 1:2 root

但是,我似乎无法创建两个fq具有相同句柄的 qdisc(0:在上面的示例中)

我正在尝试这个:

# tc qdisc add dev ens5 parent 1:1 handle 10: fq initial_quantum 48448 maxrate 200Mbit
# tc qdisc add dev ens5 parent 1:2 handle 10: fq initial_quantum 48448 maxrate 200Mbit
Error: Exclusivity flag on, cannot override.

有什么方法可以让qdisc两个父类都指向一个?

linux networking tc linux-networking
  • 1 个回答
  • 872 Views
Martin Hope
RenWal
Asked: 2020-10-01 13:29:35 +0800 CST

为什么我与 multiq 的绑定接口忽略了 tc 的队列选择?

  • 0

在 Debian Buster,内核 5.4.51 上,我有两个接口tap0,并tap1以模式加入了一个绑定接口balance-xor以增加吞吐量。但是,有些流量必须通过tap0. 其余的我不在乎。

从理论上讲,bond 驱动程序可以使用tc过滤器和 multiq 来做到这一点,如驱动程序文档中所述。我可以在统计数据中看到声称使用了队列,但检查两个接口上的流量表明过滤器没有得到尊重。

这是我所做的:

我将每个分路接口分配给绑定上的队列,将排队规则设置为多队列,然后用于tc覆盖绑定的排队决策以强制流量192.168.1.100(例如)始终使用tap0.

# echo "tap0:1" > /sys/class/net/bond0/bonding/queue_id
# echo "tap1:2" > /sys/class/net/bond0/bonding/queue_id

# tc qdisc add dev bond0 handle 1 root multiq

# tc filter add dev bond0 protocol ip parent 1: prio 1 u32 match ip dst \
    192.168.1.100 action skbedit queue_mapping 1

在tc统计信息中,您可以看到实际使用了不同的队列:

# tc -s class show dev bond0
class multiq 1:1 parent 1: 
 Sent 377256252 bytes 2526104 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
class multiq 1:2 parent 1: 
 Sent 21031 bytes 2982 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
class multiq 1:3 parent 1: 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0

大多数流量采用通用队列,特殊流量采用两个特定于接口的队列中的第一个。如果我再次删除tc filter,则特定队列 1:2 上的数据包计数器将停止。

(注意bonding driver和tc之间的queue编号偏移1,所以queue 1:1的意思是“让driver决定”,queue 1:2的意思是“一直通过tap0”,queue 1:3的意思是“一直走”通过tap1“)

队列也映射到接口:

# cat /proc/net/bonding/bond
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: load balancing (xor)
Transmit Hash Policy: layer3+4 (1)
MII Status: up
MII Polling Interval (ms): 1000
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0

Slave Interface: tap0
MII Status: up
Speed: 10 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: xx:xx:xx:xx:xx:89
Slave queue ID: 1

Slave Interface: tap1
MII Status: up
Speed: 10 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: xx:xx:xx:xx:xx:d6
Slave queue ID: 2

如果我tcpdump分别在接收端的两个tap,我可以清楚地看到无论使用哪个队列,特殊流量实际上仍然使用balance-xor规则使用任一接口。现在 - 我在哪里错过了什么?

bonding tc linux-networking
  • 1 个回答
  • 395 Views
Martin Hope
Deys Nima
Asked: 2019-01-30 13:50:42 +0800 CST

多队列 tun/tap 接口

  • 3

我试图了解 Multiqueue tuntap 接口是如何工作的。按照https://www.kernel.org/doc/Documentation/networking/tuntap.txt提供的说明, 我能够创建多个队列。但是,我不知道如何检查队列状态以及它们的创建位置。我试过了:

$ tc -s class show dev tap0

(其中 tap0 是我的点击界面),我看到大约 255 个队列,即使对于带有 IFF_MULTI_QUEUE 标志的单个 ioctl 调用也是如此。所以可能我看错地方了。以下是上述命令的输出片段:

class mq :1 root
 Sent 4741 bytes 37 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
class mq :2 root
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
.
.
.
class mq :ff root
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
class mq :100 root
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0

其次,我不确定如何使用 TC 或任何其他工具基于某些过滤器或分类器将数据包引导到这些队列。如果有人能对此有所了解,我将不胜感激。

PS:我不确定哪个是提出此类问题的最佳论坛,如果有人能指出我正确的论坛,我将不胜感激。我试过了: https ://unix.stackexchange.com/questions/496043/multiqueue-tun-tap-interface 但还没有任何令人信服的答案。谢谢!

tc
  • 1 个回答
  • 1899 Views
Martin Hope
Adones Pitogo
Asked: 2018-03-28 15:11:30 +0800 CST

如何更改classid的HTB费率?

  • 0

我有 tc htb qdisc 设置,看起来像

     1:0
      |
     1:1
    /   \
 1:10   1:11

# tc -s -d class show dev br0

以 1024kbit 速率和 ceil 显示 1:10 类:

class htb 1:10 parent 1:1 prio quantum rate 1024Kbit ceil 1024Kbit linklayer ethernet burst 15Kb/1 mpu 0b cburst 1599b/1 mpu 0b level 0 
 Sent 3271331 bytes 3482 pkt (dropped 0, overlimits 2132 requeues 0) 
 backlog 0b 0p requeues 0
 lended: 3482 borrowed: 0 giants: 0
 tokens: 1866943 ctokens: 187255

我想更改为 1:10 级的 rate/ceil。我尝试了什么:

# tc class change dev br0 classid 1:10 rate 1kbit

和

# tc class change dev br0 parent 1:0 classid 1:10 rate 1kbit prio 1

我在互联网上找不到任何使用 tc 的 change 命令的示例。我记得在 lartc 文档的某个地方有一个例子,但我再也找不到了。TC 手册页说它具有与 add 相同的命令语法,但我无法使其工作。错误说:

 Error: Qdisc "rate" is classless.
tc
  • 2 个回答
  • 1254 Views
Martin Hope
рüффп
Asked: 2016-12-31 14:30:50 +0800 CST

是否可以使用 TC 控制每个 url 的网络流量?

  • 0

我需要减慢对 Web 服务的特定调用,但仅限于同一主机上的特定 URL:我将程序配置为调用 (GET)

    URL1 = http://my-remote-system.domain.net:567/product-web-services/fastmethod?some=1&query=2&params=3

    URL2 = http://my-remote-system.domain.net:567/product-web-services/slowmethod?some=4&query=5&params=6

我想在我的程序调用第二个 url 时延迟一下,我知道tc它非常强大,但找不到适合这种情况的示例。我调用的服务器是同一个 URL,只是路径和查询参数不同。

TC 的另一种选择是在特定 IP 上进行正常(快速)调用,并且仅在该特定 IP 上每 5 次调用一次慢速调用。

我知道我可以通过使用代理来做到这一点,但这会改变我的程序配置,我更愿意直接控制网络(如果可能的话)。

我提到tc了,但如果另一个在 Linux 上运行的工具易于安装和配置,那可能是一个替代方案。

networking web-server tc
  • 1 个回答
  • 296 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve