kk Blog —— 通用基础

date [-d @int|str] [+%s|"+%F %T"]

ethtool命令

http://blog.sina.com.cn/s/blog_71f38909010128yf.html

用途

显示或修改以太网卡的配置信息。

语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ethtool [ -a | -c | -g | -i | -d | -k | -r | -S |] ethX

ethtool [-A] ethX [autoneg on|off] [rx on|off] [tx on|off]

ethtool [-C] ethX [adaptive-rx on|off] [adaptive-tx on|off] [rx-usecs N] [rx-frames N] [rx-usecs-irq N] [rx-frames-irq N] [tx-usecs N] [tx-frames N] [tx-usecs-irq N] [tx-frames-irq N] [stats-block-usecs N][pkt-rate-low N][rx-usecs-low N] [rx-frames-low N] [tx-usecs-low N] [tx-frames-low N] [pkt-rate-high N] [rx-usecs-high N] [rx-frames-high N] [tx-usecs-high N] [tx-frames-high N] [sample-interval N]

ethtool [-G] ethX [rx N] [rx-mini N] [rx-jumbo N] [tx N]

ethtool [-e] ethX [raw on|off] [offset N] [length N]

ethtool [-E] ethX [magic N] [offset N] [value N]

ethtool [-K] ethX [rx on|off] [tx on|off] [sg on|off] [tso on|off]

ethtool [-p] ethX [N]

ethtool [-t] ethX [offline|online]

ethtool [-s] ethX [speed 10|100|1000] [duplex half|full] [autoneg on|off] [port tp|aui|bnc|mii] [phyad N] [xcvr internal|external]

[wol p|u|m|b|a|g|s|d...] [sopass xx:yy:zz:aa:bb:cc] [msglvl N]

描述

Ethtool命令用于获取以太网卡的配置信息,或者修改这些配置。

ethX是以太网卡的名称,Linux系统将检测到的第一块以太网卡命名为eth0, 第二块为eth1,…….。

标志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-a   查看网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off
-A    修改网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off
-c    display the Coalesce information of the specified ethernet card
-C    Change the Coalesce setting of the specified ethernet card
-g    Display the rx/tx ring parameter information of the specified ethernet card
-G    change the rx/tx ring setting of the specified ethernet card
-i    显示网卡驱动的信息,如驱动的名称、版本等
-d    显示register dump信息, 部分网卡驱动不支持该选项
-e    显示EEPROM dump信息,部分网卡驱动不支持该选项
-E    修改网卡EEPROM byte
-k    显示网卡Offload参数的状态:on 或 off,包括rx-checksumming、tx-checksumming等。
-K    修改网卡Offload参数的状态
-p    用于区别不同ethX对应网卡的物理位置,常用的方法是使网卡port上的led不断的闪;N指示了网卡闪的持续时间,以秒为单位。
-r    如果auto-negotiation模块的状态为on,则restarts auto-negotiation
-S    显示NIC- and driver-specific 的统计参数,如网卡接收/发送的字节数、接收/发送的广播包个数等。
-t    让网卡执行自我检测,有两种模式:offline or online
-s    修改网卡的部分配置,包括网卡速度、单工/全双工模式、mac地址等

示例

查看机器上网卡的速度:百兆还是千兆,请输入:ethool eth0 操作完毕后,输出信息中‘Speed:’ 这一项就指示了网卡的速度。

停止网卡的发送模块TX,请输入:ethtool -A tx off eth0 操作完毕后,可输入:ethtool -a eth0,查看tx模块是否已被停止。

查看网卡eth0采用了何种驱动,请输入:ethtool -i eth0 操作完毕后,显示 driver: bnx2;version: 1.4.30 等信息。

关闭网卡对收到的数据包的校验功能,请输入:ethtool -K eth0 rx off 操作完毕后,可输入:ethtool –k eth0,查看校验功能是否已被停止。

如果机器上安装了两块网卡,那么eth0对应着哪块网卡呢?输入:ethtool -p eth0 10 操作完毕后,看哪块网卡的led灯在闪,eth0就对应着哪块网卡。

查看网卡,在接收/发送数据时,有没有出错?请输入:ethtool -S eth0

将千兆网卡的速度降为百兆,请输入:ethtool -s eth0 speed 100

数据来源

ethtool命令显示的信息来源于网卡驱动层,即TCP/IP协议的链路层。

该命令在Linux内核中实现的逻辑层次为:

最重要的结构体struct ethtool_ops,该结构体成员为用于显示或修改以太网卡配置的一系列函数指针,见下表中的第二列。

网卡驱动负责实现(部分)这些函数,并将其封装入ethtool_ops结构体,为网络核心层提供统一的调用接口。因此,不同的网卡驱动会给应用层返回不同的信息。

ethtool命令选项、struct ethtool_ops成员函数、ethtool命令显示参数的来源,三者间的对应关系如下表所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
命令选项     struct ethtool_ops成员函数      ethtool命令显示参数的来源(以网卡驱动BNX2为例)

-s        get_settingsget_wol             从网卡寄存器中获得网卡速度等信息,可配置
		get_msglevel
		get_link
		set_settings
		set_wol
		set_msglevel

-a -A     get_pauseparam set_pauseparam   从网卡寄存器中获得 Autonegotiate/RX/TX模块的状态:on or off,可配置

-c -C     get_coalesceset_coalesce        从网卡寄存器中获得coalescing参数:TX/RX一个数据包后,推迟发生TX/RX中断的时间(us)/数据包个数。—减小该值可以提高网卡的响应时间。
									  当rx-usecs&rx-frames同时被设为0时,RX中断停止。
									  当tx-usecs&tx-frames同时被设为0时,TX中断停止。
-g -G     get_ringparam set_ringparam     除当前TX/RX ring的值(从网卡寄存器中读取得到,可配置)外,其它为网卡bnx2自己固定的信息。

-k -K get_rx_csumget_tx_csum          显示信息从保存该状态的变量中读取得到,没有对应的寄存器。因此,TX/RX校验等模块一直处于on状态,实际上是无法修改的。
		get_sg
		get_tso
		set_rx_csum
		set_tx_csum
		set_sg
		set_tso

-i        get_drvinfo[self_test_count,    网卡bnx2自己固定的信息,如
		get_stats_coun,t              ——————————————————–
		get_regs_len,                 driver: bnx2
		get_eeprom_len]                   version: 1.4.30
									  firmware-version: 1.8.0.5
									  bus-info: 0000:09:00.0
									  ——————————————————–
-d        get_drvinfoget_regs             不支持,即bnx2中没有实现函数get_regs
-e -E     get_eepromset_eeprom            不支持,即bnx2中没有实现函数get_eeprom
-r        nway_reset                      配置网卡MII_BMCR寄存器,重启Auto negotiation模块
-p        phys_id                         配置网卡BNX2_EMAC_LED寄存器,实现LED闪功能
-t        self_test                       通过配置网卡寄存器,逐一测试网卡的硬件模块:registers,memory,loopback,Link stat,interrupt
-S        get_ethtool_stats               显示信息来源于网卡驱动中的结构体变量stats_blk。(网卡通过DMA方式,将寄存器BNX2_HC_STATISTICS _ADDR_L和
									  BNX2_HC_STATISTICS_ADDR_H中的数据实时地读取到结构体变量struct statistics_block *stats_blk中。)
									  —显示的数据都是从网卡寄存器中统计得到的,各项的含义需查询网卡(芯片)手册。

由上可见,ethtool命令用于显示/配置网卡硬件(寄存器)。

ubuntu安装kvm虚拟机

1
sudo apt-get install qemu-kvm libvirt-bin virt-manager

用 virt-manager

参考 http://nmszh.blog.51cto.com/4609205/1539502


http://www.sysstem.at/category/linux/

问题一:

1
2
3
ERROR internal error: Process exited while reading console log output: char device redirected to /dev/pts/45 (label charserial0)
ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy
failed to initialize KVM: Device or resource busy

This is mostly because you have either VirtualBox or VMware running on the same machine. The reason (at least that’s what I think) is that the kernel module of VirtualBox or VMware and KVM can’t take Advantage of Intel VT-x or AMD-V at the same time.

关闭virtualbox等其他虚拟机就好


http://ask.xmodulo.com/hda-duplex-not-supported-in-this-qemu-binary.html

问题二:

1
Unable to complete install: 'unsupported configuration: hda-duplex not supported in this QEMU library
Solution One: Virt-Manager

On virt-manager, open the VM’s virtual hardware details menu, go to sound device section, and change the device model from default to ac97.

Click on “Apply” button to save the change. See if you can start the VM now.

也就是 最后一步 “勾选安装之前配置“,完成,然后将声卡改成ac97即可

Solution Two: Virsh

If you are using virsh, not virt-manager, you can edit the VM’s XML file accordingly. Look for sound section inside section, and change the sound model to ac97 as follows.

1
2
3
4
5
6
7
  <devices>
	. . .
	<sound model='ac97'>
	  <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
	</sound>
	. . .
  </device>

http://wiki.ubuntu.org.cn/Kvm%E6%95%99%E7%A8%8B

centos安装kvm虚拟机

  • 最好在centos6装

  • TODO 虚拟机网桥连接没试

http://docs.openstack.org/zh_CN/image-guide/content/virt-install.html

安装

1
yum install qemu-kvm libvirt virt-manager

管理界面

1
virt-manager

图形化安装过程见: http://nmszh.blog.51cto.com/4609205/1539502

命令行创建安装

1
qemu-img create -f qcow2 ttt.img 10G
1
2
3
4
5
6
7
8
9
10
11
12
virt-install --virt-type kvm --name centos-6.4 --ram 1024 \
--cdrom=/data/CentOS-6.4-x86_64-netinstall.iso \
--disk path=/data/centos-6.4.qcow2,size=10,format=qcow2 \
--network network=default \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux --os-variant=rhel6

Starting install...
Creating
domain...  |    0 B     00:00
Domain installation still in progress. You can reconnect to
the console to complete the installation process.

KVM 虚拟化使用 centos-6.4 名称,1024MB内存启动虚拟机。虚拟机还有一个关联文件/data/CentOS-6.4-x86_64-netinstall.iso 的虚拟的 CD-ROM,并拥有 10GB 的qcow2格式的硬盘,硬盘文件位置在 /data/centos-6.4.qcow2。虚拟机配置了网络使用 libvirt 的默认网络。且 VNC 服务监听所有的网卡,并且 libvirt 不会自动启动 VNC 客户端也不会显示字符界面控制台(–no-autoconsole)。最后,libvirt 将尝试以RHEL 6.x 发行版来优化虚拟机配置。

运行

1
virt-install --os-variant list

命令查看 --os-variant 允许的选项范围。

使用命令获取 VNC 端口号。

1
2
3
4
virsh vncdisplay vm-name

  # virsh vncdisplay centos-6.4
  :1

在上面的示例中,虚拟机 centos-6.4 使用 VNC 显示器 :1,对应的 TCP 端口是 5901。你应该使用本地 VNC 客户端连接到远程服务器的 :1 显示器并且完成安装步骤。

用vncviewer连接虚拟机完成安装

1
vncviewer IP:5901
  • 装好后会生成 /etc/libvirt/qemu/ttt.xml 配置文件,可以修改

http://os.51cto.com/art/201404/435193.htm

http://tianhao936.blog.51cto.com/1043670/1343767

虚拟机操作

常用virsh指令

1
2
3
4
5
6
7
8
9
1)virsh list               列出当前虚拟机列表,不包括未启动的
2)virsh list --all         列出所有虚拟机,包括所有已经定义的虚拟机
3)virsh start vm-name      启动虚拟机
4)virsh destroy vm-name    关闭虚拟机  
5)virsh undefine vm-name   删除虚拟机
6)virsh shutdown vm-name   停止虚拟机
7)virsh reboot vm-name     重启虚拟机
8)virsh edit vm-name       编辑虚拟机xml文件
9)virsh autostart vm-name  虚拟机随宿主机启动 

http://blog.csdn.net/justlinux2010/article/details/8977705

http://www.centoscn.com/image-text/config/2014/0801/3407.html


错误

1
Could not initialize SDL(No available video device) - exiting

需要在桌面环境运行qemu-kvm

vnc远程连接,远程登录服务器或者虚拟机

http://blog.csdn.net/gg296231363/article/details/6899655

服务器端

1 安装

1
yum install vnc* tigervnc tigervnc-server pixman pixman-devel libXfont

2

1
vi /etc/sysconfig/vncservers

修改成

1
2
VNCSERVERS="2:root"
VNCSERVERARGS[2]="-geometry 800x600"

3 设置登录密码

1
vncpasswd

4

1
2
service vncserver start
service iptables stop

客户机端

1
vncviewer IP:PORT

centos5 有可能出现的错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ vncviewer 127.0.0.1:5900

VNC Viewer Free Edition 4.1.2 for X - built Apr 20 2011 12:04:25
Copyright (C) 2002-2005 RealVNC Ltd.
See http://www.realvnc.com for information on VNC.

Mon Jul  6 14:16:43 2015
 CConn:       connected to host 127.0.0.1 port 5900
 CConnection: Server supports RFB protocol version 3.8 
 CConnection: Using RFB protocol version 3.8 
 TXImage:     Using default colormap and visual, TrueColor, depth 24. 
 CConn:       Using pixel format depth 6 (8bpp) rgb222
 CConn:       Using ZRLE encoding

Mon Jul  6 14:16:44 2015
 CConn:       Throughput 20000 kbit/s - changing to hextile encoding
 CConn:       Throughput 20000 kbit/s - changing to full colour
 CConn:       Using pixel format depth 24 (32bpp) little-endian rgb888
 CConn:       Using hextile encoding
unknown message type 98
 main:        unknown message type

加上 -FullColor 选项就好

1
$ vncviewer -FullColor 127.0.0.1:5900

不是必需

5

1
2
3
4
5
vi ~/.vnc/xstartup
gnome-session &   //添加gnome,使用gnome图形界面登录
#twm &            //注销默认的窗口管理器 简陋而且很多图形显示不了

service vncserver restart

crash kmem

一、kmem -s 查看slab

1
2
3
4
5
6
crash> kmem -s
CACHE            NAME                 OBJSIZE  ALLOCATED     TOTAL  SLABS  SSIZE
...
ffff8808132d1ac0 request_sock_TCP         128          2        30      1     4k
ffff8808135e1400 sock_inode_cache         704        298       470     94     4k
...

二、kmem -S 查看slab中详细内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
crash> kmem -S request_sock_TCP
CACHE            NAME                 OBJSIZE  ALLOCATED     TOTAL  SLABS  SSIZE
ffff8808132d1ac0 request_sock_TCP         128          2        30      1     4k
SLAB              MEMORY            TOTAL  ALLOCATED  FREE
ffff88078b9c6000  ffff88078b9c60c0     30          2    28
FREE / [ALLOCATED]
   ffff88078b9c60c0
   ffff88078b9c6140
   ffff88078b9c61c0
   ffff88078b9c6240
   ffff88078b9c62c0
   ffff88078b9c6340
   ffff88078b9c63c0
   ffff88078b9c6440
   ffff88078b9c64c0
   ffff88078b9c6540
   ffff88078b9c65c0
   ffff88078b9c6640
   ffff88078b9c66c0
  [ffff88078b9c6740]
  [ffff88078b9c67c0]
   ffff88078b9c6840
   ffff88078b9c68c0
   ffff88078b9c6940
   ffff88078b9c69c0
...

request_sock_TCP 是 struct request_sock 类型,所以对于已分配的地址可以直接查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
crash> struct request_sock 0xffff88078b9c6740
struct request_sock {
  dl_next = 0x0, 
  mss = 1460, 
  retrans = 0 '\000', 
  cookie_ts = 0 '\000', 
  window_clamp = 8388480, 
  rcv_wnd = 14600, 
  ts_recent = 0, 
  expires = 4302901768, 
  rsk_ops = 0xffffffff81c0e840 <tcp_request_sock_ops>, 
  sk = 0xffff880771dad800, 
  secid = 3039208612, 
  peer_secid = 3672081930
}

http://blog.csdn.net/u011279649/article/details/17529315