如果通过tc来限制虚拟机网卡接收方向带宽呢,实际上使用tc对接收方向限制的不够好,使用tc ingress可以限制接收,但是功能不够多,而且会形成丢包问题。一般是采用将流量重定向到一个虚拟设备ifb上,再对虚拟设备ifb的发包方向来限制带宽,以此来达到限制接收方向带宽的目的。

对于虚拟机的网卡而言,同样也可以使用ifb设备,间接来限制接收方向的带宽,但是还有一种办法是通过限制虚拟机网卡的后端设备的发,来达到限制虚拟机网卡接收带宽的目的。

1、查找虚拟机某网卡对应的后端设备

我的方法比较笨,先是在主机上virsh dumpxml xxx可以查看生成虚拟机的xml文件,如下:

  1. <interface type='bridge'>
  2. <mac address='99:13:3a:59:22:5c'/>
  3. <source bridge='br1'/>
  4. <target dev='vnet11'/>
  5. <model type='virtio'/>
  6. <alias name='net2'/>
  7. <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x1'/>
  8. </interface>

target dev 对应的就是后端设备,我们在主机上,ifconfig,就可以查到这个后端网卡设备。我们要限制虚拟机网卡的收,就可以限制这个后端网卡设备的发。

但很多情况下,由于路由问题,实际的业务流向并不一与后端设备。如,我的虚拟机环境中,ens3f0 端口的ip地址为 129.9.240.236,在物理主机上看,对应的后端设备是vnet11,我向129.9.240.236上发数据包时,通过sar命令查看,实际的数据流向却不是走的vnet11->ens3f0。如下所示:

在主机中查看:

  1. sar -n DEV 1
  2.  
  3. Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
  4. Average: br1 25.49 0.00 1.36 0.00 0.00 0.00 0.00Average: eth0 57.46 1.29 3.86 0.26 0.00 0.00 24.45Average: vnet2 0.00 25.73 0.00 1.74 0.00 0.00 0.00
  5. Average: eth1 71491.80 2447.85 105636.68 169.77 0.00 0.00 12.42Average: vnet11 0.00 25.73 0.00 1.74 0.00 0.00 0.00
  6. Average: ovs-system 0.00 0.00 0.00 0.00 0.00 0.00 0.00Average: br0 57.42 1.25 3.07 0.26 0.00 0.00 0.00
  7. Average: vnet12 2447.85 2763.77 169.77 101206.93 0.00 0.00 0.00
  8. Average: vnet1 0.00 56.25 0.00 3.78 0.00 0.00 0.00

在虚拟机中查看:

  1. sar -n DEV 1
  2.  
  3. 08:22:26 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
  4. 08:22:27 AM ens3f3 26.00 0.00 1.52 0.00 0.00 0.00 0.00 0.00
  5. 08:22:27 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  6. 08:22:27 AM ens3f0 26.00 0.00 1.52 0.00 0.00 0.00 0.00 0.00
  7. 08:22:27 AM ens8 50.00 4.00 3.26 0.46 0.00 0.00 0.00 0.00
  8. 08:22:27 AM ens3f1 26.00 0.00 1.52 0.00 0.00 0.00 0.00 0.00
  9. 08:22:27 AM ens3f2 10305.00 8576.00 394693.92 598.61 0.00 0.00 0.00 0.00

可以看到实际的网络流量是eth1->vnet12->ens3f2。

那么在实际应用中,如果要是限制发向ip为129.9.240.236的业务流量带宽,就需要限制vnet12发出方向的带宽。

2、配置带宽限制策略

在主机上对vnet12后端设备进行限制,配置如下所以:

  1. tc qdisc add dev vnet12 root handle 1: htb default 20
  2. tc class add dev vnet12 parent 1: classid 1:1 htb rate 10000mbit
  3. tc class add dev vnet12 parent 1:1 classid 1:10 htb rate 2000mbit
  4. tc class add dev vnet12 parent 1:1 classid 1:20 htb rate 1000mbit
  5. tc class add dev vnet12 parent 1:1 classid 1:30 htb rate 500mbit
  6. tc filter add dev vnet12 protocol ip parent 1:0 prio 1 u32 match ip dport 10051 0xffff flowid 1:10
    tc filter add dev vnet12 protocol ip parent 1:0 prio 1 u32 match ip dport 10052 0xffff flowid 1:20
    tc filter add dev vnet12 protocol ip parent 1:0 prio 1 u32 match ip dport 10053 0xffff flowid 1:30

测试下,虚拟机接收端,开启三个接口,三个进程同时并发执行,如下:

  1. root@ubuntu: python demo_server.py 3
  2. 3 process concurrent....
  3. server 10051
  4. server 10052
  5. server 10053

发送端发送数据包,并统计时延时间,以及粗略计算下带宽值,结果如下:

  1. root@ubuntu: python test.py 129.9.240.236 3 1
  2. 3 process concurrent....
  3. bandwidth 155.74MB/s
  4. bandwidth 95.54MB/s
  5. bandwidth 52.78MB/s

实际结果,与我们期望的一致。

使用tc配置后端设备,来限制虚拟机网卡带宽的更多相关文章

  1. VirtualBox + CentOS 虚拟机网卡配置

    摘要: 要学好Linux,还是得自己搭建虚拟机. VirtualBox比较小巧简单,容易上手.在配合CentOS 6.4使用时,首要的问题就是网卡配置,尤其是使用SSH终端仿真程序(例如SecureC ...

  2. 手把手教你玩转nginx负载均衡(五)----配置后端服务器组

    引言 在前面几篇中,我们成功的搭建起了一台nginx服务器,所以我们要重复前面的步骤,把服务器的数量增加到3台以上,我这里已经建好了另外两台,分别是centos7-22,centos7-23,对应的i ...

  3. 虚拟机下Linux读取USB设备的问题虚拟机下Linux无法读取USB设备的解决方案

    我们在虚拟机中识别USB设备有三种情况导致Linux系统不能读取到USB设备: 1. .当虚拟机的USB服务没有开启的时候 2. 若虚拟机的USB连接的设置选项没有设置好 3. Widows抢先一步, ...

  4. Linux:配置Linux网络和克隆虚拟机并更改配置

    Linux学习笔记1:配置Linux网络和克隆虚拟机并更改配置   一.配置Linux网络 在安装Linux的时候,一定要保证你的物理网络的IP是手动设置的,要不然会在Linux设置IP连通网络的时候 ...

  5. Hadoop集群(第2期)虚拟机网卡的介绍和配置

    很多人安装虚拟机的时候,经常遇到不能上网的问题,而vmware有三种网络模式,对初学者来说也比较眼花聊乱,今天我就来基于虚拟机3种网络模式,帮大家普及下虚拟机上网的背景知识 虚拟机网络模式 无论是vm ...

  6. CCNA 之 四 管理和配置CISCO设备

    管理和配置CISCO设备 路由器组件 cpu 执行操作系统的指令 随机访问存储器RAM - RAM中内容断电丢失 - 运行操作系统: - 运行配置文件: - IP 路由表: - ARP 缓存; - 数 ...

  7. VirtualBox 安装CentOS虚拟机网卡配置

    VirtualBox虚拟机网络设置(NAT+HOST-ONLY) 目标: 虚拟机可以像宿主机一样访问互联网和其他主机 宿主机和虚拟机可以相互访问 使用NAT实现目标一 使用Host-Only实现目标二 ...

  8. KVM之virsh管理虚拟机网卡配置

    虚拟机网卡管理 virsh attach-interface 添加网卡: [root@ubuntu ~]# virsh domiflist CentOS-V6.5.23-server01 Interf ...

  9. Hyper-V下的Linux虚拟机网卡丢失问题原因及解决办法

    Hyper-V下的Linux虚拟机网卡丢失问题原因及解决办法   虚拟化大势所趋 公司推行了虚拟化,全部用的是Microsoft Windows 2008 R2 Enterprise with Hyp ...

随机推荐

  1. Linux命令安装Mysql

    关键步骤: 4.创建用户组和用户 groupadd mysql useradd -r -g mysql mysql 5.修改权限 chown -R mysql:mysql ./ 6.安装数据库 ./s ...

  2. windows server2012搭建邮箱服务器+客户端界面(hmailserver+afterlogic)+批量创建邮箱

    1.简介 由于需要较多邮箱,如果去注册需要很多的手机号码去验证,一个人不可能买一堆的手机号,所以自己搭建一个邮箱服务器可以大批量的创建自己的邮箱账号和收发邮件. 2.安装部署hmailserver 下 ...

  3. Dubbo扩展点应用之三异步调用

    Dubbo不只提供了堵塞式的同步调用,同时提供了异步调用的方式.这种方式主要应用于提供者接口响应耗时明显,消费者端可以利用调用接口的时间去做一些其他的接口调用,利用Future模式来异步等待和获取结果 ...

  4. Java邮件发送中的setRecipient方法使用

    ​ 一.方法setRecipient(Message.RecipientType type, Address address),是用于设置邮件的接收者. 1.有两个参数,第一个参数是接收者的类型,第二 ...

  5. 思迈特软件Smartbi:机器学习高深难懂?本文深入浅出给你讲明白!

    人工智能(Artificial Intelligence,缩写为AI)是对人的意识.思维过程进行模拟的一门新学科.如今,人工智能从虚无缥缈的科学幻想变成了现实.计算机科学家们在人工智能的技术核心--机 ...

  6. 重点收藏!BI数据分析工具哪家强?

    信息爆炸时代,大数据晋升为一个时髦词汇.不论是在哪个行业领域,大数据分析成为各企业备受推崇的决策工具.对于海量数据的挖掘,有助于统计事情发生的概率,帮助人们计算做某些事情成功的几率.企业正在数据的海洋 ...

  7. 【C# .Net GC】sos.dll 混合模式调试(托管调试+本机)

    当我们想使用本机调试器(如CDB或WinDBG)调试.NET应用程序时,我们必须在本机调试器和托管世界之间使用"桥",因为本机调试器本身并不理解托管代码.它是本机调试器.为了提供这 ...

  8. linux基础-jdk1.8和weblogic12.2.1.3.0安装

    转至:https://www.cnblogs.com/jiarui-zjb/p/9642416.html 1.环境探查与准备 安装jdk和weblogic前需要对进行安装的linux系统硬件和软件环境 ...

  9. 「BUAA OO Unit 1 HW1」面向测试小白的简易评测机

    「BUAA OO Unit 1 HW1」面向测试小白的简易评测机 声明:本评测机所使用数据生成来自郭鸿宇同学,这对本评测机非常重要 目录 「BUAA OO Unit 1 HW1」面向测试小白的简易评测 ...

  10. Chrome:插件安装

    1.首先要下载一油猴插件管理器 得到crx文件 2.打开'扩展程序',在Chrome右上角 3.启动开发者模式(右上角),然后将油猴crx文件拖入界面中,会自动安装油猴 安装完成后,在工具栏中会出现油 ...