F5 BIGIP LTM cpu的使用
因为不同的版本的LTM对bigip system CPU资源的分配不同,大致如下:
1.单核设备对CPU的使用:
①在BIGIP 9.0.0--9.3.1中:
单核设备cpu的使用率:在没有负载的情况下使用top命令看到CPU使用率是100%,(f5不推荐使用该命令),F5推荐使用b global命令查看CPU的使用。在tmm空闲的时候有99%的资源可给HOST使用,但tmm繁忙的时候最多给HOST预留20%的CPU 时间。
②在BIGIP 9.4.2--9.4.8中:
单核设备cpu的使用率:从9.4.2开始,空闲时tmm不再占用所有的cpu周期,tmm被限制到90%的cpu周期;TTM空闲时,cpu的周期会被分配给host 进程使用。
2.多核和多cpu系统中
①在BIGIP 9.0.0--9.3.1中:编号大的CPU会被专一的分配给TMM,top命令可以看出来,剩下的分配给其他进程。
②在BIGIP9.4.0--9.4.1:开始引入CMP特性,CPU的利用率与9.0.0--9.3.1类似,并且只能有10%的处理时间留给其他进程。因此启用了CMP时,TMM将在所有处理器上消耗至少90%的CPU时间,并且在处理流量时可能消耗100%的CPU时间。虽然bigip6400/6800也是多多处理器的,但是在当前版本上并不支持CMP特性,他们只运行一个TMM实例,处理流量的方式与9.0.0到9.3.1没有什么不同。
③在BIGIP 9.4.2--9.4.8:在具有CMP能力的多处理器平台(BIG-IP 1600,3600,3900,6900,8400,8800和8900)上,在BIG-IP 9.4.2至9.4.8中,BIG-IP系统将为每个processing unit启动单独的TMM进程。即使整个系统空闲TMM也不会消耗所有可用的CPU时间,不管负载如何,TMM被限制使用90%的CPU时间。当TMM空闲或者不怎么处理流量时,top工具显示每颗CPU和TMM实例对CPU的消耗都很低。这些变化在CR75437中被引入作为TMM内部轮询和调度机制的优化。
note:BIG-IP 6400 and 6800,在该版本中仍然不支持CMP属性。
note:BIG-IP 9.4.0 through 9.4.8 licensed for ASM or WebAccelerator在使用了ASM/WA模块的系统中,CMP自动全局禁用。TMM进程被分配到最大编号的CPU上。剩下的处理器是保留给ASM或者WA模块的和主机操作系统的。TOP命令会展现出该行为,TMM运行在一个CPU上,CPU使用率也是100%。The Configuration utility displays the correct CPU and TMM usage for each core.在安装有ASM/WA模块的设备上启用CMP特性, you must disable the module on the System > License > Modules tab, or by setting the Module.ASM or Module.WA db variables to disable.
3.BIG-IP 10.x--12.x CPU usage
说明:bigip 系统安装的处理器个数,bigip的版本,bigip 模块license的安装都会影响TMM使用CPU的方式。
①单核设备TMM CPU的使用:在BIGIP配置中CPU的资源被明确地分配。TMM空闲时,TMM空闲的CPU时间可以给其他进程使用。
②多核和多cpu系统中CPU的使用:
bigip 11.5 之前每个逻辑CPU都被分配了单独的TMM实例,每个核都处理数据层面和控制层面的任务。从11.5开始,数据层面任务和控制层面任务通过英特尔的超线程技术分开使用单独的逻辑CPU。偶数编号的逻辑核分配给了TMM,奇数编号的逻辑核分配给了其他进程。
查看命令:tmsh show /sys tmm-info
4.TMM CPU 使用率的计算
TMM cpu 使用率=((<DeltaTmTotalCycles> - (<DeltaTmIdleCycles> + <DeltaTmSleepCycles>)) / <DeltaTmTotalCycles>) *100
相关的snmp oid:
sysStatTmTotalCycles =(.1.3.6.1.4.1.3375.2.1.1.2.1.41)
sysStatTmIdleCycles =(.1.3.6.1.4.1.3375.2.1.1.2.1.42)
sysStatTmSleepCycles =(.1.3.6.1.4.1.3375.2.1.1.2.1.43)
5.TMM cpu 使用率计算脚本
#!/bin/bash #DATE 20170227 #AUTHRO Huang #DESCRIPTION:Script only for bigip ltm checking function Tmm_cpu() { #cpu usage calcuation #"((<DeltaTmTotalCycles> - (<DeltaTmIdleCycles> + <DeltaTmSleepCycles>)) / <DeltaTmTotalCycles>) *100" h="localhost" cmd="snmpwalk -cpublic -v2c" sysStatTmTotalCycles=".1.3.6.1.4.1.3375.2.1.1.2.1.41" sysStatTmIdleCycles=".1.3.6.1.4.1.3375.2.1.1.2.1.42" sysStatTmSleepCycles=".1.3.6.1.4.1.3375.2.1.1.2.1.43" tag=$(snmpwalk -cpublic -v2c $h ".1.3.6.1.4.1.3375.2.1.1.2.1.45") if [ $? -eq 0 ];then total_init=$($cmd $h $sysStatTmTotalCycles|awk '{print $NF}') idle_init=$($cmd $h $sysStatTmIdleCycles|awk '{print $NF}') slp_init=$($cmd $h sysStatTmSleepCycles|awk '{print $NF}') sleep 30s total_ter=$($cmd $h $sysStatTmTotalCycles|awk '{print $NF}') idle_ter=$($cmd $h $sysStatTmIdleCycles|awk '{print $NF}') slp_ter=$($cmd $h sysStatTmSleepCycles|awk '{print $NF}') else echo -e "\033[31m Something is wrong,$(snmpwalk -cpublic -v2c $h ".1.3.6.1.4.1.3375.2.1.1.2.1") \33[5m" break fi declare -i ds declare -i dtt declare -i dti delta_tm_total=$(($total_ter-$total_init)) dtt=${delta_tm_total#-} delta_tm_idle=$(($idle_ter-$idle_init)) dti=${delta_tm_idle#-} delta_sleep=$(($slp_ter-$slp_init)) ds=${delta_sleep#-} cpu_consum=$(($dtt-$dti-$ds)) #echo "$dtt" cpu_usage=$(echo "$cpu_consum $dtt"|awk '{printf "%.2f",$1/$2*100}') echo $cpu_usage } echo "TMM CPU_USAGE:";Tmm_cpu