网卡绑cpu的脚本

今天开始实践将网卡的中断绑定到特定处理器核,于是用到将二进制转换成十六进制的需求。

目标是将网卡的中断“均匀”绑定到特定的处理器核上去:

#网卡数组
net_dev=(`for dev in /sys/class/net/*/device ; do awk -F/ ‘{print $5}’ <<< ${dev} ; done`)

#激活网卡IRQ数组
net_irq=(`for i in ${net_dev[@]} ; do awk ‘/’${i}’-/{print $1}’ /proc/interrupts | sed ‘s/[: ]//g’ ; done`)

#激活网卡队列数
net_q=${#net_irq[@]}

#处理器核数
cpu_n=`grep -c processor /proc/cpuinfo`

#绑定法则
#中断号数组下标%处理器核数,求余,为CPU编号
for((i=0;i<net_q;i++)) ; do
irq=${net_irq[i]}
m=$((i % cpu_n))
cpu=`echo -n ’1′; for((n=0;n<m;n++)); do echo -n ’0′ ; done`
smp_affinity=`echo “obase=16;ibase=2; $cpu” | bc`
echo $smp_affinity > /proc/irq/$irq/smp_affinity
done

其中:

echo “obase=16;ibase=2; $cpu” | bc

是利用bc将二进制数转化成十六进制数。

当下的网卡大都已经支持多队列了。

多队列,网卡就可以把“中断”呼叫分派给不同的处理器,而不必以前那样,只有一个处理器在处理网络流量。

“多队列”需要网卡硬件以驱动程序两者配合才能发挥作用。升级内核到最新(发行版自带的),这很重要。

查看/proc/interrupts中是否包含多个eth0-,有几个就有几个队列。有几个队列,就可以同时“中断”几个CPU,相当于可以有几个“并发”处理。

irqbalance这个应用本来是好意,但是在网卡多队列的时候,这个东东还是关闭为好。然后将“中断”绑定到固定的CPU上,这样:

1. 可以提高CPU缓存的命中率(这个对速度的提高,效果很明显)。

2. 可以降低CPU互斥。

如何绑定,查看内核文档:filesystems/proc.txt、IRQ-affinity.txt

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,下面是一个可以在 Linux 系统中打印服务器 CPU、内存、网卡等相关信息的 shell 脚本: ``` #!/bin/bash # 打印 CPU 信息 echo "CPU 信息:" cat /proc/cpuinfo | grep "model name" | uniq # 打印内存信息 echo "内存信息:" cat /proc/meminfo | grep "MemTotal" # 打印网卡信息 echo "网卡信息:" ifconfig -a ``` 这个脚本使用了一些 Linux 系统内置的命令来获取信息,例如 `cat`、`grep` 和 `uniq` 等。 - `cat /proc/cpuinfo` 命令可以用来获取 CPU 的相关信息,其中包括 CPU 型号。 - `cat /proc/meminfo` 命令可以用来获取内存的相关信息,其中包括总内存大小。 - `ifconfig -a` 命令可以用来获取网卡的相关信息,其中包括网卡名称和 IP 地址。 注意,这个脚本仅适用于 Linux 系统,如果你使用的是其他操作系统,可能需要使用不同的命令来获取信息。 ### 回答2: 编写一个 shell 脚本可以使用 Linux 系统内置的命令来获取服务器的 CPU、内存、网卡等相关信息。 #!/bin/bash # 获取 CPU 信息 cpu_info=$(lscpu) # 获取内存信息 memory_info=$(free -h) # 获取网卡信息 network_info=$(ifconfig -a) # 打印 CPU 信息 echo "CPU 信息:" echo "$cpu_info" # 打印内存信息 echo "内存信息:" echo "$memory_info" # 打印网卡信息 echo "网卡信息:" echo "$network_info" 保存以上代码为一个文件,比如 get_server_info.sh,并使用 chmod 命令给该文件添加执行权限。 然后在终端中运行该脚本,即可打印出服务器的 CPU、内存、网卡等相关信息。 $ ./get_server_info.sh 输出示例: CPU 信息: Architecture: x86_64 ... (省略部分输出) 内存信息: total used free Mem: 7.8G 3.2G 4.6G ... (省略部分输出) 网卡信息: eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ... (省略部分输出) ### 回答3: 编写一个 shell 脚本来获取服务器的 CPU、内存和网卡信息可以使用一些内置命令和工具来实现。下面是一个简单的示例: ```shell #!/bin/bash # 获取 CPU 信息 cpu_info=$(cat /proc/cpuinfo | grep 'model name' | uniq) echo "CPU 信息:" echo "$cpu_info" echo # 获取内存信息 mem_info=$(free -h | awk '/Mem:/ {print "总内存:" $2, "已用内存:" $3, "可用内存:" $4}') echo "内存信息:" echo "$mem_info" echo # 获取网卡信息 net_info=$(ifconfig | awk '/encap:Ethernet/ {print "接口名称:" $1, "MAC 地址:" $5}') echo "网卡信息:" echo "$net_info" ``` 以上的脚本使用了一些常用的命令和工具来获取服务器的 CPU、内存和网卡信息。通过读取`/proc/cpuinfo`文件来获取 CPU 信息,使用`free`命令来获取内存信息,使用`ifconfig`命令来获取网卡信息。 脚本通过将获取的信息存储到变量中,然后使用`echo`命令将信息打印出来。在执行脚本时,可以使用`./script.sh`命令运行。请注意,在运行脚本之前,需要给脚本添加可执行权限,可以使用`chmod +x script.sh`命令来添加权限。 希望这个简单的脚本能够帮助你获取服务器的 CPU、内存和网卡信息。如果需要更详细的信息,可以使用其他命令和工具来扩展脚本的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值