Linux内核中网络数据的流量控制(TC: Traffic control 和 QDISC)

(个人能力有限,本文如有错误之处,欢迎交流指正)

1 简介

在进行网络数据 接收 和 发送 过程中,网卡设备到L3(网络层) 中间会经历流量控制(Traffic control)。

                                《BPF之巅.洞悉Linux系统和应⽤性能》P413

qdisc这个可选层可以⽤来管理⽹络包的流量分类(tc)、调度、修改、过滤 以及 整形操作。
                                《BPF之巅.洞悉Linux系统和应⽤性能》P417

Traffic control is the name given to the sets of queuing systems and mechanisms by which packets are received and transmitted on a router. This includes deciding (if and) which packets to accept at what rate on the input of an interface and determining which packets to transmit in what order at what rate on the output of an interface.
                                2. Overview of Concepts

When the kernel has several packets to send out over a network device, it has to decide which ones to send first, which ones to delay, and which ones to drop. This is the job of the queueing disciplines, several different algorithms for how to do this "fairly" have been proposed.

This is useful for example if some of your network devices are real time devices that need a certain minimum data flow rate, or if you need to limit the maximum data flow rate for traffic which matches specified criteria. This code is considered to be experimental.
                                <kernel-src>/net/sched/Kconfig

2 功能组成

2.1 流量控制的树状图

以HTB(qdisc)和U32(filter)为例

2.2 qdisc (queueing discipline)

2.2.1 简介

A qdisc is a scheduler. Every output interface needs a scheduler of some kind, and the default scheduler is a FIFO. Other qdiscs available under Linux will rearrange the packets entering the scheduler's queue in accordance with that scheduler's rules.
                                4. Components of Linux Traffic Control

⼏乎所有设备都会使⽤队列调度出⼝流量,⽽内核可以使⽤名为队列规则(queuing discipline)的算法安排帧,使其以最有效率的次序传输。
                                《深⼊理解LINUX⽹络技术内幕》P251, P252

qdisc对应的内核代码如下:

# ls net/sched/sch_
sch_api.c        sch_cbs.c        sch_etf.c        sch_gred.c       sch_mq.c         sch_plug.c       sch_sfq.c        
sch_atm.c        sch_choke.c      sch_fifo.c       sch_hfsc.c       sch_mqprio.c     sch_prio.c       sch_skbprio.c    
sch_blackhole.c  sch_codel.c      sch_fq.c         sch_hhf.c        sch_multiq.c     sch_qfq.c        sch_taprio.c     
sch_cake.c       sch_drr.c        sch_fq_codel.c   sch_htb.c        sch_netem.c      sch_red.c        sch_tbf.c        
sch_cbq.c        sch_dsmark.c     sch_generic.c    sch_ingress.c    sch_pie.c        sch_sfb.c        sch_teql.c   

2.2.2 可分类(classful) qdisc

2.2.2.1 简介

The flexibility and control of Linux traffic control can be unleashed through the agency of the classful qdiscs. Remember that the classful queuing disciplines can have filters attached to them, allowing packets to be directed to particular classes and subqueues.
                                7. Classful Queuing Disciplines (qdiscs)

2.2.2.2 包括的 qdisc

CBQ、HTB、HFSC、PRIO、WRR、ATM、DRR、DSMARK 和 QFQ 等。

相关资料:
                https://linux-tc-notes.sourceforge.net/tc/doc/sch_cbq.txt
                https://linux-tc-notes.sourceforge.net/tc/doc/sch_hfsc.txt
                https://linux-tc-notes.sourceforge.net/tc/doc/sch_prio.txt
                7. Classful Queuing Disciplines (qdiscs)

2.2.3 不可分类(classless) qdisc

2.2.3.1 简介

The classless qdiscs can contain no classes, nor is it possible to attach filter to a classless qdisc. Because a classless qdisc contains no children of any kind, there is no utility to classifying. This means that no filter can be attached to a classless qdisc
                                4. Components of Linux Traffic Control

Each of these queuing disciplines can be used as the primary qdisc on an interface, or can be used inside a leaf class of a classful qdiscs. These are the fundamental schedulers used under Linux. Note that the default scheduler is the pfifo_fast.
                                6. Classless Queuing Disciplines (qdiscs)

2.2.3.2 包括的 qdisc

SFQ、ESFQ、RED、GRED 和 TBF 等。

相关资料:
                https://linux-tc-notes.sourceforge.net/tc/doc/sch_tbf.txt
                6. Classless Queuing Disciplines (qdiscs)

2.2.4 控制网络接收流量的qdisc——ingress

前面章节介绍的qdisc是用于网络数据发送的流量控制。用于网络数据接收流量的控制的qdisc是ingress。

代码:<kernel_src>/net/sched/sch_ingress.c

2.3 class

Classes only exist inside a classful qdisc (e.g., HTB and CBQ). Classes are immensely flexible and can always contain either multiple children classes or a single child qdisc [5]. There is no prohibition against a class containing a classful qdisc itself, which facilitates tremendously complex traffic control scenarios.

Any class can also have an arbitrary number of filters attached to it, which allows the selection of a child class or the use of a filter to reclassify or drop traffic entering a particular class.

A leaf class is a terminal class in a qdisc. It contains a qdisc (default FIFO) and will never contain a child class. Any class which contains a child class is an inner class (or root class) and not a leaf class.
                                4. Components of Linux Traffic Control

2.4 qdisc 和 class 的 handle

Every class and classful qdisc requires a unique identifier within the traffic control structure. This unique identifier is known as a handle and has two constituent members, a major number and a minor number. 

The numbering of handles for classes and qdiscs

major

This parameter is completely free of meaning to the kernel. The user may use an arbitrary numbering scheme, however all objects in the traffic control structure with the same parent must share a major handle number. Conventional numbering schemes start at 1 for objects attached directly to the root qdisc.

minor

This parameter unambiguously identifies the object as a qdisc if minor is 0. Any other value identifies the object as a class. All classes sharing a parent must have unique minor numbers.

The special handle ffff:0 is reserved for the ingress qdisc.
                                4. Components of Linux Traffic Control

2.5 filter

2.5.1 简介

The filter is the most complex component in the Linux traffic control system. The filter provides a convenient mechanism for gluing together several of the key elements of traffic control. The simplest and most obvious role of the filter is to classify (see Section 3.3, “Classifying”) packets. Linux filters allow the user to classify packets into an output queue with either several different filters or a single filter.

  • A filter must contain a classifier phrase.

  • A filter may contain a policer phrase.

Filters can be attached either to classful qdiscs or to classes, however the enqueued packet always enters the root qdisc first. After the filter attached to the root qdisc has been traversed, the packet may be directed to any subclasses (which can have their own filters) where the packet may undergo further classification.
                                4. Components of Linux Traffic Control

2.5.2 classifier

2.5.2.1 简介

Filter objects

The classifiers are tools which can be used as part of a filter to identify characteristics of a packet or a packet's metadata. The Linux classfier object is a direct analogue to the basic operation and elemental mechanism of traffic control classifying.
                                4. Components of Linux Traffic Control

2.5.2.2 内核⾥的 classifier
# ls net/sched/cls_
cls_api.c       cls_bpf.c       cls_flow.c      cls_fw.c        cls_route.c     cls_rsvp.c      cls_tcindex.c   
cls_basic.c     cls_cgroup.c    cls_flower.c    cls_matchall.c  cls_rsvp6.c     cls_rsvp.h      cls_u32.c

2.6 action

2.6.1 简介

Actions get attached to classifiers and are invoked after a successful classification. They are used to overwrite the classification result, instantly drop or redirect packets, etc.
                                 <kernel_src>/net/sched/Kconfig

2.6.2 对网络数据进行修改的actions——skbedit、pedit 和 skbmod

2.6.3 对接收到的数据进行镜像(复制)的action——mirred

The mirred action allows packet mirroring (copying) or redirecting (stealing) the packet it receives. Mirroring is what is sometimes referred to as Switch Port Analyzer (SPAN) and is commonly used to analyze and/or debug flows.
                                man tc-mirred

2.6.4 对接收到的数据进行流量控制的action——police

The police action allows to limit bandwidth of traffic matched by the filter it is attached to.
A typical application of the police action is to enforce ingress traffic rate by dropping exceeding packets.
                                man tc-police

2.6.5 内核下的actions

# ls net/sched/act_
act_api.c              act_ct.c               act_ipt.c              act_mirred.c           act_police.c           act_skbmod.c
act_bpf.c              act_ctinfo.c           act_meta_mark.c        act_mpls.c             act_sample.c           act_tunnel_key.c
act_connmark.c         act_gact.c             act_meta_skbprio.c     act_nat.c              act_simple.c           act_vlan.c
act_csum.c             act_ife.c              act_meta_skbtcindex.c  act_pedit.c            act_skbedit.c 

3 linux系统下配置流量控制 的方式

3.1 通过tc命令

第4章会举例说明

3.2 通过脚本(tcng)

参考:Traffic Control using tcng and HTB HOWTO

 

4 使用tc命令配置发送数据时的流量控制

4.1 简介

dev_queue_xmit函数是TCP/IP协议栈网络层执行发送操作与设备驱动程序之间的接口。
                                《嵌⼊式Linux⽹络体系结构设计与TCP/IP协议栈》6.5.4 dev_queue_xmit函数

在dev_queue_xmit函数内部会调用流量控制的功能。

《深⼊理解 LINUX ⽹络技术内幕》P260

4.2 tc命令用法演示

4.2.1 网络数据发送端流控示意图

4.2.2 tc命令

想要实现4.2.1小节图片中的功能,在网络数据发送端机器上执行以下tc命令:

tc qdisc add dev vmnet8 root handle 1: htb default 1           
tc class add dev vmnet8 parent 1: classid 1:1 htb rate 10mbit 
tc class add dev vmnet8 parent 1:1 classid 1:20 htb rate 4mbit  
tc class add dev vmnet8 parent 1:1 classid 1:30 htb rate 6mbit 

tc qdisc add dev vmnet8 parent 1:20 handle 2: prio  
tc qdisc add dev vmnet8 parent 1:30 handle 3: cbq avpkt 1500 bandwidth 1mbit

tc filter add dev vmnet8 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.173.129 flowid 1:1 action skbedit mark 7    
tc filter add dev vmnet8 parent 1:1 handle 7 fw  flowid 1:20 
tc filter add dev vmnet8 parent 1:1 handle 6 fw  flowid 1:30 
tc filter add dev vmnet8 protocol ip parent 2:0 prio 1 u32 match ip dport 5201 0xffff flowid 2:1       
tc filter add dev vmnet8 protocol ip parent 2:0 prio 1 u32 match ip dport 5202 0xffff flowid 2:2       

4.2.3 mark值为7时的统计信息

4.2.3.1 通过iperf命令收发数据

在数据接收端机器上执行:iperf -s -p 5201

在数据发送端机器上执行

# iperf -c 192.168.173.129  -p 5201
------------------------------------------------------------
Client connecting to 192.168.173.129, TCP port 5201
TCP window size:  128 KByte (default)
------------------------------------------------------------
[  3] local 192.168.173.1 port 42760 connected with 192.168.173.129 port 5201
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  4.88 MBytes  4.08 Mbits/sec
#
4.2.3.2 查看qdisc统计信息
# tc -s qdisc ls dev vmnet8
qdisc htb 1: root refcnt 2 r2q 10 default 0x1 direct_packets_stat 9 direct_qlen 1000
 Sent 5346774 bytes 3543 pkt (dropped 0, overlimits 2259 requeues 0) 
 backlog 0b 0p requeues 0
qdisc prio 2: parent 1:20 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
 Sent 5345060 bytes 3534 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
qdisc cbq 3: parent 1:30 rate 1Mbit (bounded,isolated) prio no-transmit
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
  borrowed 0 overactions 0 avgidle 187500 undertime 0
4.2.3.3 查看class统计信息
# tc -s -d class ls dev vmnet8
class htb 1:1 root rate 10Mbit ceil 10Mbit linklayer ethernet burst 1600b/1 mpu 0b cburst 1600b/1 mpu 0b level 7 
 Sent 5345060 bytes 3534 pkt (dropped 0, overlimits 1057 requeues 0) 
 backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 19175 ctokens: 19175

class htb 1:20 parent 1:1 leaf 2: prio 0 quantum 50000 rate 4Mbit ceil 4Mbit linklayer ethernet burst 1600b/1 mpu 0b cburst 1600b/1 mpu 0b level 0 
 Sent 5345060 bytes 3534 pkt (dropped 0, overlimits 1202 requeues 0) 
 backlog 0b 0p requeues 0
 lended: 1204 borrowed: 0 giants: 0
 tokens: -688 ctokens: -688

class htb 1:30 parent 1:1 leaf 3: prio 0 quantum 75000 rate 6Mbit ceil 6Mbit linklayer ethernet burst 1599b/1 mpu 0b cburst 1599b/1 mpu 0b level 0 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 33328 ctokens: 33328

class prio 2:1 parent 2: 
 Sent 5345060 bytes 3534 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
class prio 2:2 parent 2: 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
class prio 2:3 parent 2: 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
class cbq 3: root rate 1Mbit linklayer ethernet cell 16b (bounded,isolated) prio no-transmit/8 weight 1Mbit allot 1514b 
level 0 ewma 5 avpkt 1500b maxidle 374us 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
  borrowed 0 overactions 0 avgidle 187500 undertime 0

在4.2.2小节中,使用了skbedit action,将MARK值设置为7,所以最终发送的数据会进入prio 队列。

4.2.4 mark值为6时的统计信息

4.2.4.1 修改mark值为6

在执行完4.2.2小节中的tc命令后,修改skbedit action的mark值为6,执行以下命令

# tc actions change skbedit mark 6 index 1
# tc actions list action skbedit
total acts 1

	action order 0: skbedit  mark 6 pipe
	 index 1 ref 1 bind 1

mark值除了可以使用skbedit action设置,还可以使用iptables命令设置,如下:

iptables -t mangle -A POSTROUTING -o vmnet8 -j MARK --set-mark 6
4.2.4.2 通过iperf命令收发数据

在数据接收端机器上执行:iperf -s -p 5202

在数据发送端机器上执行

# iperf -c 192.168.173.129  -p 5202
------------------------------------------------------------
Client connecting to 192.168.173.129, TCP port 5202
TCP window size:  128 KByte (default)
------------------------------------------------------------
[  3] local 192.168.173.1 port 57256 connected with 192.168.173.129 port 5202
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.2 sec  7.38 MBytes  6.04 Mbits/sec
4.2.4.3 查看qdisc统计信息
# tc -s qdisc ls dev vmnet8
qdisc htb 1: root refcnt 2 r2q 10 default 0x1 direct_packets_stat 5 direct_qlen 1000
 Sent 8086838 bytes 5349 pkt (dropped 0, overlimits 2159 requeues 0) 
 backlog 0b 0p requeues 0
qdisc prio 2: parent 1:20 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
qdisc cbq 3: parent 1:30 rate 1Mbit (bounded,isolated) prio no-transmit
 Sent 8085960 bytes 5344 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
  borrowed 0 overactions 0 avgidle -2.52893e+07 undertime 0
4.2.4.4 查看class统计信息
# tc -s -d class ls dev vmnet8
class htb 1:1 root rate 10Mbit ceil 10Mbit linklayer ethernet burst 1600b/1 mpu 0b cburst 1600b/1 mpu 0b level 7 
 Sent 8085960 bytes 5344 pkt (dropped 0, overlimits 1075 requeues 0) 
 backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 19175 ctokens: 19175

class htb 1:20 parent 1:1 leaf 2: prio 0 quantum 50000 rate 4Mbit ceil 4Mbit linklayer ethernet burst 1600b/1 mpu 0b cburst 1600b/1 mpu 0b level 0 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 50000 ctokens: 50000

class htb 1:30 parent 1:1 leaf 3: prio 0 quantum 75000 rate 6Mbit ceil 6Mbit linklayer ethernet burst 1599b/1 mpu 0b cburst 1599b/1 mpu 0b level 0 
 Sent 8085960 bytes 5344 pkt (dropped 0, overlimits 1084 requeues 0) 
 backlog 0b 0p requeues 0
 lended: 1087 borrowed: 0 giants: 0
 tokens: 31953 ctokens: 31953

class prio 2:1 parent 2: 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
class prio 2:2 parent 2: 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
class prio 2:3 parent 2: 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
class cbq 3: root rate 1Mbit linklayer ethernet cell 16b (bounded,isolated) prio no-transmit/8 weight 1Mbit allot 1514b 
level 0 ewma 5 avpkt 1500b maxidle 374us 
 Sent 8085894 bytes 1086 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
  borrowed 0 overactions 0 avgidle -2.52893e+07 undertime 2.50558e+07

5 使用tc命令配置接收数据时的流量控制

5.1 使用police

       A typical application of the police action is to enforce ingress traffic rate by dropping exceeding packets.  Although  better  done  on  the
       sender's  side, especially in scenarios with lack of peer control (e.g. with dial-up providers) this is often the best one can do in order to
       keep latencies low under high load. The following establishes input bandwidth policing to 1mbit/s using the ingress qdisc and u32 filter:

# tc qdisc add dev eth0 handle ffff: ingress
# tc filter add dev eth0 parent ffff: u32 \
                   match u32 0 0 \
                   police rate 1mbit burst 100k

                                参考:man tc-police

5.2 使用mirred

Limit ingress bandwidth on eth0 to 1mbit/s, redirect exceeding traffic to lo for debugging purposes:

# tc qdisc add dev eth0 handle ffff: ingress
# tc filter add dev eth0 parent ffff: u32 \
                   match u32 0 0 \
                   action police rate 1mbit burst 100k conform-exceed pipe \
                   action mirred egress redirect dev lo

6 参考资料

Linux TC 流量控制与排队规则 qdisc 树型结构详解(以HTB和RED为例)-CSDN博客

Traffic Control HOWTO

流量控制 · GitBook

Linux TC(Traffic Control)框架原理解析_linux tc原理-CSDN博客

Index of /tc/doc

https://www.cnblogs.com/acool/p/7779159.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/749997.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【博士每天一篇文献-综述】Biological underpinnings for lifelong learning machines

阅读时间&#xff1a;2023-12-17 1 介绍 年份&#xff1a;2015 作者&#xff1a;Dhireesha Kudithipudi&#xff0c;Mario Aguilar-Simon&#xff0c;其中通讯作者Josh Bongard教授也是另一篇论文的通讯作者《Neural modularity helps organisms evolve to learn new skills …

智慧校园-缴费管理系统总体概述

在构建现代化教育环境的过程中&#xff0c;智慧校园缴费管理系统脱颖而出&#xff0c;成为提升校园财务管理效率与服务质量的关键一环。缴费管理系统需要精心设计&#xff0c;通过科技力量&#xff0c;让原本繁琐的缴费流程变得简单快捷&#xff0c;同时增强家校之间的互动与信…

通过代理从ARDUINO IDE直接下载开发板包

使用免费代理 实现ARDUINO IDE2.3.2 下载ESP8266/ESP32包 免费代理 列表 测试代理是否可用的 网站 有时&#xff0c;代理是可用的&#xff0c;但依然有可能找不到开发板管理器的资料包。 可以多换几个代理试试。 代理的配置 文件 -> 首选项 -> 网络 进入后做如下配置…

linux 安装腾讯会议和解决ubuntu打开腾讯会议提示:不兼容 wayland 协议

一. 下载腾讯会议安装包 腾讯会议下载链接 二. 命令行安装 cd [安装包路径] sudo dpkg -i TencentMeeting_0300000000_3.19.1.400_x86_64_default.publish.deb 三. 打开腾讯会议提示无法支持wayland 协议 解决方法: 打开终端 sudo vi /etc/gdm3/custom.conf打开 #Wayland…

Zabbix 监控系统部署

Zabbix 监控系统部署 Zabbix是一个企业级开源分布式监控解决方案&#xff0c;可监控网络的众多参数以及服务器、虚拟机、应用程序、服务、数据库、网站、云等的运行状况和完整性。 Zabbix 使用灵活的通知机制&#xff0c;允许用户为几乎任何事件配置基于电子邮件的警报。这允许…

Linux-笔记 嵌入式gdb远程调试

目录 前言 实现 1、内核配置 2、GDB移植 3、准备调试程序 4、开始调试 前言 gdb调试器是基于命令行的GNU项目调试器&#xff0c;通过gdb工具我们可以实现许多调试手段&#xff0c;同时gdb支持多种语言&#xff0c;兼容性很强。 在桌面 Linux 系统&#xff08;如 Ubuntu、Cent…

从新手到高手:彻底掌握MySQL表死锁

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 从新手到高手&#xff1a;彻底掌握MySQL表死锁 前言什么是死锁mysql死锁的原因1. 互斥资源的竞争…

加速鸿蒙生态共建,蚂蚁mPaaS助力鸿蒙原生应用开发创新

6月21日-23日&#xff0c;2024华为开发者大会&#xff08;HDC 2024&#xff09;如期举行。在22日的【鸿蒙生态伙伴SDK】分论坛中&#xff0c;正式发布了【鸿蒙生态伙伴SDK市场】&#xff0c;其中蚂蚁数科旗下移动开发平台mPaaS&#xff08;以下简称&#xff1a;蚂蚁mPaaS&#…

科林Linux7_网络爬虫

一、爬虫 网络资源的下载工具&#xff0c;工作与万维网环境&#xff0c;持续获取网页网站中的网络信息。可持续的数据采集机器人 1、搜索引擎技术使用爬虫 2、数据分析、数据挖掘领域&#xff0c;需要爬虫进行数据准备 3、数据批处理、采集&#xff0c;大量获取某些网站中的…

学习笔记(linux高级编程)7

2._exit 系统调用 void _exit(int status); 功能: 让进程退出,不刷新缓存区 参数: status:进程退出状态 返回值: 缺省 回调函数 3.atexit int atexit(void (*function)(void)); 功能: 注册进程退出前执行的函数 参数: function:函数指针 指向void返回值void参数的函数指针 返…

14、电科院FTU检测标准学习笔记-录波功能2

作者简介&#xff1a; 本人从事电力系统多年&#xff0c;岗位包含研发&#xff0c;测试&#xff0c;工程等&#xff0c;具有丰富的经验 在配电自动化验收测试以及电科院测试中&#xff0c;本人全程参与&#xff0c;积累了不少现场的经验 ———————————————————…

优思学院|工厂的部门架构管理与精益生产

工厂内有不同部门&#xff0c;各部门之间必须协调合作才能发挥整体功能。工厂最主要的部分是制造产品的现场&#xff0c;这里安装了生产工具&#xff0c;还有操作员进行加工或生产制造。 制造时使用的材料或零组件&#xff0c;需要对外采购。对于加工组装型的工厂&#xff0c;…

MMCV【mmclassification】 从0到1 之 Docker 容器环境搭建步骤总结

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 📙 Linux 下 Docker 安装环境检查Docker 安装 [ root 或者 sudo 权限用户可安装 ]给 普通用户 加入 Docker …

【新闻】技术工种魅力大增,美国Z世代职场新出路

美国需要更多水管工&#xff0c;Z世代正在响应这一号召。 长期受到劳动力短缺困扰的技工行业&#xff0c;如今对美国最年轻的就业群体产生新的吸引力&#xff0c;他们中许多人正选择放弃读大学。随着从焊接到机械加工等领域出现技术迭代&#xff0c;薪资正在上涨&#xff0c;这…

第4章 客户端-客户端管理

1. 客户端API 1.1client list client list命令能列出与Redis服务端相连的所有客户端连接信息。 127.0.0.1:6379> client list id254487 addr10.2.xx.234:60240 fd1311 name age8888581 idle8888581 flagsN db0 sub0 psub0 multi-1 qbuf0 qbuf-free0 obl0 oll0 omem0 events…

SpringBoot启动出错:无法访问org.springframework.boot.autoconfigure.SpringBootApplication

无法访问org.springframework.boot.autoconfigure.SpringBootApplication类文件具有错误的版本 61.0&#xff0c;应为 52.0请删除该文件或确保该文件位于正确的类路径子目录中。 出现该问题是由于版本不兼容&#xff0c; 在pom.xml文件中&#xff0c;修改版本为2开头即可

抖音营销新策略:MessageBox与HubSpot集成,引领企业获客新潮流

在全球数字化浪潮中&#xff0c;抖音以其独特的短视频形式、庞大的用户群体和高度互动性&#xff0c;成为了企业出海战略中不可或缺的一环。抖音营销不仅仅是简单的内容发布和互动&#xff0c;它更是一种深度策略和创新思维的体现。今天将深入探讨抖音营销的核心价值、应用场景…

【人工智能学习之图像操作(一)】

【人工智能学习之图像操作&#xff08;一&#xff09;】 图像读写创建图片并保存视频读取色彩空间与转换色彩空间的转换通道分离理解HSV基本图形绘制 阀值操作OTSU二值化简单阀值自适应阀值 图像读写 图像的读取、显示与保存 import cv2 img cv2.imread(r"1.jpg")…

OpenAI推迟ChatGPT高级语音模式发布!谷歌将推出明星网红AI聊天机器人|AI日报

文章推荐 时序预测双飞轮&#xff0c;全面超越Transformer&#xff0c;纯MLP模型实现性能效能齐飞 OpenAI将终止对我国提供API服务&#xff0c;国内大模型将迎来“六小强”格局&#xff01;&#xff5c;AI日报 推迟ChatGPT高级语音模式发布&#xff01;OpenAI将计划在秋季向…

主流先进封装技术介绍

主流先进封装技术介绍 先进封装是指封装集成电路 (IC) 以提高性能的多种创新技术。 本质上&#xff0c;就是将传统封装中被延缓的数据传输速度和被损耗的大量功耗&#xff0c;通过技术和结构的创新极大程度的找回。 1. FO 封装 FO封装包括三大类&#xff1a; 核心扇出型&a…