#!/bin/bash
set +x

vcpu_num=`lscpu |grep -v -e "On-line" -e "NUMA" |grep "CPU(s)"|awk '{print $2}'`> /dev/null    
#暂时没用,解耦的时候有用    
phycpu_num=`lscpu | grep 'Socket(s):'|awk '{print $2}'`
HAVE_CORE=0 

# 2*2403, 或 1*atom,  
if [ $vcpu_num -eq 8  ];then
    if [ $phycpu_num -eq 1  ];then
	    #维持原有的C72,单atom 不变 
	    CORE_NAME=`cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2}'`
	    for i in 5 6
		do
			for j in $CORE_NAME
			do
				if [ $i == $j ]
				then
					HAVE_CORE=1
					break
				fi
			done

			if [ $HAVE_CORE == 0 ]
			then
				echo "failed!"
				exit
			fi

			HAVE_CORE=0
		done
	    NOT_RPC_THREAD=`ps -eFl |awk '{if ($13==5||$13==6) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat"`
    else
	    #M节点,双2403
		CORE_NAME=`cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2}'`
	    for i in 4 5
		do
			for j in $CORE_NAME
			do
				if [ $i == $j ]
				then
					HAVE_CORE=1
					break
				fi
			done

			if [ $HAVE_CORE == 0 ]
			then
				echo "failed!"
				exit
			fi

			HAVE_CORE=0
		done
	    NOT_RPC_THREAD=`ps -eFl |awk '{if ($13==4||$13==5) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat"`
    fi               
# 2*2603, 暂不支持单2420  
elif [ $vcpu_num -eq 12  ];then
    if [ $phycpu_num -eq 1  ];then
		CORE_NAME=`cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2}'`
	    for i in 4 5
		do
			for j in $CORE_NAME
			do
				if [ $i == $j ]
				then
					HAVE_CORE=1
					break
				fi
			done

			if [ $HAVE_CORE == 0 ]
			then
				echo "failed!"
				exit
			fi

			HAVE_CORE=0
		done
	    NOT_RPC_THREAD=`ps -eFl |awk '{if ($13==4||$13==5) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat"`
    else
		CORE_NAME=`cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2}'`
	    for i in 6 7
		do
			for j in $CORE_NAME
			do
				if [ $i == $j ]
				then
					HAVE_CORE=1
					break
				fi
			done

			if [ $HAVE_CORE == 0 ]
			then
				echo "failed!"
				exit
			fi

			HAVE_CORE=0
		done
	    NOT_RPC_THREAD=`ps -eFl |awk '{if ($13==6||$13==7) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat"`
    fi
# 目前只有:单*2620V4, 
elif [ $vcpu_num -eq 16  ];then
	CORE_NAME=`cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2}'`
	for i in 4 5
	do
		for j in $CORE_NAME
		do
			if [ $i == $j ]
			then
				HAVE_CORE=1
				break
			fi
		done

		if [ $HAVE_CORE == 0 ]
		then
			echo "failed!"
			exit
		fi

		HAVE_CORE=0
	done
	NOT_RPC_THREAD=`ps -eFl |awk '{if ($13==4||$13==5) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat"`
# 2*2420 或   2*2620-V3 
elif [ $vcpu_num  -eq  24 ];then
	CORE_NAME=`cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2 " " $3 " " $4}'`
	for i in 6 7 8 9
	do
		for j in $CORE_NAME
		do
			if [ $i == $j ]
			then
				HAVE_CORE=1
				break
			fi
		done

		if [ $HAVE_CORE == 0 ]
		then
			echo "failed!"
			exit
		fi

		HAVE_CORE=0
	done	
	NOT_RPC_THREAD=`ps -eFl |awk '{if ($13==7||$13==8||$13==9||$13==6) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat"`
# 32个vCPU, 2*2620-V4
elif [ $vcpu_num  -eq 32 ];then
	CORE_NAME=`cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2 " " $3 " " $4}'`
	for i in 8 9 10 11
	do
		for j in $CORE_NAME
		do
			if [ $i == $j ]
			then
				HAVE_CORE=1
				break
			fi
		done

		if [ $HAVE_CORE == 0 ]
		then
			echo "failed!"
			exit
		fi

		HAVE_CORE=0
	done
	NOT_RPC_THREAD=`ps -eFl |awk '{if ($13==11||$13==8||$13==9||$13==10) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat"`
#40个vCPU，2*4114
elif [ $vcpu_num  -eq 40 ];then
    CORE_NAME=`cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2 " " $3 " " $4}'`
    for i in 10 11 12 13
    do
        for j in $CORE_NAME
        do
            if [ $i == $j ]
            then
                HAVE_CORE=1
                break
            fi
        done

        if [ $HAVE_CORE == 0 ]
        then
            echo "failed!"
            exit
        fi

        HAVE_CORE=0
    done
    NOT_RPC_THREAD=`ps -eFl |awk '{if ($13==11||$13==12||$13==13||$13==10) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat"`
# 5120T，14核
elif [ $vcpu_num  -eq 56 ];then
    CORE_NAME=`cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2 " " $3 " " $4 " " $5 " " $6}'`
    for i in 14 15 16 17 18 19
    do
        for j in $CORE_NAME
        do
            if [ $i == $j ]
            then
                HAVE_CORE=1
                break
            fi
        done

        if [ $HAVE_CORE == 0 ]
        then
            echo "failed!"
            exit
        fi

        HAVE_CORE=0
    done
    NOT_RPC_THREAD=`ps -eFl |awk '{if ($13==15||$13==16||$13==17||$13==18||$13==19||$13==14) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat"`
else
	#未经验证的不支持分支,  
	CORE_NAME=`cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2 " " $3 " " $4}'`
	for i in 6 7 8 9
	do
		for j in $CORE_NAME
		do
			if [ $i == $j ]
			then
				HAVE_CORE=1
				break
			fi
		done

		if [ $HAVE_CORE == 0 ]
		then
			echo "failed!"
			exit
		fi

		HAVE_CORE=0
	done
	NOT_RPC_THREAD=`ps -eFl |awk '{if ($13==7||$13==8||$13==9||$13==6) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat"`
fi



if [ -z "$NOT_RPC_THREAD" ]
then
echo "pass!"
else
echo "$NOT_RPC_THREAD"
fi






