首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【分享】嵌入式Linux系统中的CPU控制

【分享】嵌入式Linux系统中的CPU控制

作者头像
hankfu
发布于 2020-11-11 06:57:34
发布于 2020-11-11 06:57:34
4.2K00
代码可运行
举报
文章被收录于专栏:hankhank
运行总次数:0
代码可运行

目录

作者

Hank FU 付汉杰 hankf@xilinx.com

测试环境

Xilinx ZCU106 单板 Xilinx VCU TRD2020.1

介绍

嵌入式Linux系统中,Linux直接管理所有CPU。默认情况下,系统的目标是提高吞吐率,而不是实时性。为了保证实时性,可以根据应用场景,对CPU实行更加精确的控制。常见的办法有,进程CPU隔离、CPU亲和、中断CPU亲和、进程优先级。

工具

嵌入式Linux系统中,一般使用busybox中的ps、top等工具。它们小巧,但是功能有限。如果需要更强大的工具,可以从Ubuntu文件系统ubuntu-base-20.04.1-base-arm64.tar.gz中提取。 本测试中,从Ubuntu文件系统提取了ps、top等工具,并改名为u-ps、u-top,以和busybox中的ps、top区别。

CPU隔离

Linux还是可能把一个进程调度到任意一个CPU上,从而导致普通进程影响实时进程的性能。可以采用Linux内核的命令行参数isolcpus,实现CPU隔离,完全禁止Linux调度进程到某些CPU上,从而保证实时进程的响应时间。

在U-Boot下,执行下列命令,可以使Linux不再调度进程到CPU2和CPU3上。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setenv bootargs "earlycon clk_ignore_unused consoleblank=0 cma=1700M uio_pdrv_genirq.of_id=generic-uio isolcpus=2,3"

Linux启动后,可以通过命令“cat /proc/cmdline” 查看Linux内核的命令行参数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@vcu_trd:~# cat /proc/cmdline
earlycon clk_ignore_unused consoleblank=0 cma=1700M uio_pdrv_genirq.of_id=generic-uio isolcpus=2,3

再使用Ubuntu文件系统中的ps工具的psr选项,查看系统所有进程运行的CPU。下面输出的第二列,就是CPU号。可以看到,大部分进程,运行在在CPU0和CPU1上。运行在CPU2和CPU3上的进程,都是通过taskset设置了CPU亲和的进程。其中的u-ps是来自于软件包[ubuntu-base-20.04.1-base-arm64.tar.gz]。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@vcu_trd:~# u-ps -axo pid,psr,cmd,ni
  PID PSR CMD                          NI
    1   1 init                          0
    2   1 [kthreadd]                    0
    3   0 [rcu_gp]                    -20
    4   0 [rcu_par_gp]                -20
    6   0 [kworker/0:0H-kblockd]      -20
    8   0 [mm_percpu_wq]              -20
    9   0 [ksoftirqd/0]                 0
   10   1 [rcu_sched]                   0
   11   0 [migration/0]                 -
   12   0 [cpuhp/0]                     0
   13   1 [cpuhp/1]                     0
   14   1 [migration/1]                 -
   15   1 [ksoftirqd/1]                 0
   17   1 [kworker/1:0H-kblockd]      -20
   18   2 [cpuhp/2]                     0
   19   2 [migration/2]                 -
   20   2 [ksoftirqd/2]                 0
   21   2 [kworker/2:0-events]          0
   22   2 [kworker/2:0H]              -20
   23   3 [cpuhp/3]                     0
   24   3 [migration/3]                 -
   25   3 [ksoftirqd/3]                 0
   26   3 [kworker/3:0-events]          0
   27   3 [kworker/3:0H]              -20
   28   0 [kdevtmpfs]                   0
   29   1 [netns]                     -20
   30   1 [kauditd]                     0
   32   1 [oom_reaper]                  0
   33   0 [writeback]                 -20
   34   1 [kcompactd0]                  0
   35   1 [khugepaged]                 19
   37   0 [kworker/0:1-events]          0
   38   1 [kworker/u8:1-events_unboun   0
   87   1 [kblockd]                   -20
   88   0 [blkcg_punt_bio]            -20
   89   0 [edac-poller]               -20
   90   1 [watchdogd]                   -
   91   1 [rpciod]                    -20
   92   0 [kworker/u9:0]              -20
   93   1 [xprtiod]                   -20
   94   1 [cfg80211]                  -20
   95   1 [kswapd0]                     0
   96   1 [ecryptfs-kthrea]             0
   97   0 [nfsiod]                    -20
  100   0 [irq/60-a00d0000]             -
  107   1 [ion_system_heap]             -
  108   2 [irq/61-a00d1000]             -
  109   0 [kpktgend_0]                  0
  110   1 [kpktgend_1]                  0
  111   2 [kpktgend_2]                  0
  112   3 [kpktgend_3]                  0
  113   1 [ipv6_addrconf]             -20
  114   0 [krfcommd]                  -10
  115   2 [kworker/2:1-events]          0
  116   3 [kworker/3:1-events]          0
  117   0 [kworker/0:2-events_power_e   0
  118   0 [irq/47-fd4a0000]             -
  120   1 [scsi_eh_0]                   0
  121   1 [scsi_tmf_0]                -20
  122   1 [scsi_eh_1]                   0
  123   1 [scsi_tmf_1]                -20
  125   1 [spi0]                        0
  128   1 [sdhci]                     -20
  129   0 [irq/41-mmc0]                 -
  134   0 [mmc_complete]              -20
  135   0 [kworker/0:1H-mmc_complete] -20
  165   1 [kworker/1:1H-kblockd]      -20
  181   0 /sbin/udevd -d                0
  231   1 [irq/63-xilinx-v]             -
  238   1 [xilinx-hdmi-rx]            -20
  242   1 [irq/54-xilinx-h]             -
  246   1 [irq/52-xilinx-h]             -
  419   0 [irq/62-a0220000]             -
  420   2 [irq/62-a0200000]             -
  808   0 udhcpc -R -b -p /var/run/ud   0
  815   1 /usr/bin/dbus-daemon --syst   0
  818   0 /usr/sbin/haveged -w 1024 -   0
  827   1 xinit /etc/X11/Xsession --    0
  831   0 /usr/bin/Xorg :0 -br -pn     -1
  836   1 matchbox-window-manager -th   0
  841   1 dbus-launch --sh-syntax --e   0
  842   1 /usr/bin/dbus-daemon --sysl   0
  862   0 /usr/sbin/dropbear -r /etc/   0
  864   0 /usr/libexec/at-spi-bus-lau   0
  874   0 /usr/libexec/gconfd-2         0
  882   0 /usr/bin/dbus-daemon --conf   0
  885   1 /usr/sbin/inetd               0
  888   0 /usr/bin/settings-daemon      0
  898   0 /sbin/syslogd -n -O /var/lo   0
  901   0 /sbin/klogd -n                0
  910   0 matchbox-desktop              0
  911   0 matchbox-panel --start-appl   0
  921   0 /usr/sbin/tcf-agent -d -L-    0
  929   0 /bin/sh /bin/start_getty 11   0
  930   0 /sbin/getty 38400 tty1        0
  934   1 /usr/libexec/at-spi2-regist   0
  940   1 /usr/sbin/console-kit-daemo   0
 1025   0 /bin/login --                 0
 1050   1 -sh                           0
 1055   0 /usr/sbin/dropbear -r /etc/   0
 1057   0 -sh                           0
 1063   0 /usr/sbin/dropbear -r /etc/   0
 1065   0 -sh                           0
 1071   0 top                           0
 7174   0 /usr/sbin/dropbear -r /etc/   0
 7176   0 -sh                           0
22378   0 /usr/sbin/dropbear -r /etc/   0
22380   0 -sh                           0
22588   0 /usr/sbin/dropbear -r /etc/   0
22590   0 -sh                           0
22600   1 [kworker/1:0-events]          0
22601   1 [kworker/u8:0-events_unboun   0
22602   1 [kworker/1:2-events_power_e   0
22603   1 [kworker/u8:2-events_unboun   0
22606   0 u-ps -axo pid,psr,cmd,ni      0

进程CPU亲和

设置进程CPU亲和时,需要知道进程号(PID)。ps和top等工具,可以查看进程号(PID)。 工具taskset可以查看和控制进程的CPU亲和。通过‘-p选项,指定进程号(PID),可以查看对应进程的CPU亲和。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@vcu_trd:~# taskset -p 815
pid 815's current affinity mask: 1

采用如下脚本,可以检查所有进程的CPU亲和。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/sh

u-ps -axo pid,psr,cmd,ni | grep -v "gst"  | grep -v "xilinx" | grep -v "irq" | grep -v "kworker" | grep -v "grep" | grep -v "awk" | awk '{print $1}' > process_list.txt

echo -e "\nRead process list file:" ;
cat process_list.txt | while read line
do
    # echo "CPU affinity for process ID: $line"
    taskset -p $line
done

Linux系统中进程数量繁多,也可以采用如下脚本,设置所有进程的CPU亲和。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/sh

u-ps -axo pid,psr,cmd,ni | grep -v "grep" | grep -v "awk" | awk '{print $1}' > process_list.txt

cat process_list.txt | while read line
do
   
	echo -e "\nCheck process ID: $line"
   
	if [ $line -gt 500 ]; then
	   		
		# echo "Original CPU affinity for process ID: $line"
		# taskset -p $line    
		
		echo "Set priority for process ID: $line"
		taskset -a -p 1 $line    
		
		# echo "New CPU affinity for process ID: $line"
		# taskset -p $line 
		
	fi

done

对于新的任务,可以在启动时,就指定进程CPU亲和。taskset的帮助信息如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
taskset [options] [mask | cpu-list] [pid|cmd [args...]]

如果要指定进程CPU亲和,可以采用下列命令启动新的任务。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
taskset -a cpu-list  cmd

比如以命令“ taskset -a 8 top”执行top,可以看到它确实运行在CPU-3上。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@vcu_trd:~# u-ps -axo pid,psr,cmd,ni  | grep top | grep -v grep | grep -v match
22629   3 top                           0

中断CPU亲和

默认情况下,Linux使用CPU0处理普通外设的中断。通过更改/proc/irq/irq_number/smp_affinity,可以改变处理中断的CPU。也可以查看/proc/interrupts,显示系统中各个CPU处理的中断数量。

Linux系统中的中断也很多,也可以采用如下脚本,设置所有中断的CPU亲和。中断和CPU的对应关系,可以根据场景更改。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/sh

cat /proc/interrupts > interrupts_list_all.txt
cat /proc/interrupts  | grep -v "CPU"  | grep -v "IPI" | grep -v "Err" | awk '{print $1}'  > interrupts_list.txt

echo -e "\nRead interrupts list file:" ;
cat interrupts_list.txt | while read line
do
	# remove colon :
    line_new=${line/:/} 
   
	echo -e "\nCheck interrupt: $line_new"
	ls -l -h /proc/irq/$line_new/smp_affinity 

    # 48:  GICv2 122 Level     xilinx_framebuffer
    # 52:  GICv2 123 Level     xilinx-hdmi-rx
    # 54:  GICv2 125 Level     xilinx-hdmitxss
    # 55:  GICv2 127 Level     xlnx-mixer
    # 61:  GICv2 139 Level     a00d1000.sync_ip
    # 62:  GICv2 128 Level     a0200000.al5e, a0220000.al5d
    # 63:  GICv2 124 Level     xilinx-vphy
 
    if [ $line_new -eq 48 ]; then	   
		echo -e "\nSet CPU:1 affinity for interrupt: $line_new"
		echo 2 > /proc/irq/$line_new/smp_affinity 
    elif [ $line_new -eq 52 ]; then	   
		echo -e "\nSet CPU:1 affinity for interrupt: $line_new" 
		echo 2 > /proc/irq/$line_new/smp_affinity 
    elif [ $line_new -eq 54 ]; then	   
		echo -e "\nSet CPU:1 affinity for interrupt: $line_new" 
		echo 2 > /proc/irq/$line_new/smp_affinity 
    elif [ $line_new -eq 55 ]; then	   
		echo -e "\nSet CPU:1 affinity for interrupt: $line_new"
		echo 2 > /proc/irq/$line_new/smp_affinity  
    elif [ $line_new -eq 61 ]; then	   
		echo -e "\nSet CPU:2 affinity for interrupt: $line_new" 
		echo 4 > /proc/irq/$line_new/smp_affinity 
    elif [ $line_new -eq 62 ]; then	   
		echo -e "\nSet CPU:2 affinity for interrupt: $line_new" 
		echo 4 > /proc/irq/$line_new/smp_affinity 
    elif [ $line_new -eq 63 ]; then	   
		echo -e "\nSet CPU:2 affinity for interrupt: $line_new" 
		echo 2 > /proc/irq/$line_new/smp_affinity 
    else 
		echo -e "\nSet CPU:0 affinity for interrupt: $line_new" 
		echo 1 > /proc/irq/$line_new/smp_affinity 
	fi
	
	echo -e "\nNew CPU affinity for interrupt: $line_new" 
	cat /proc/irq/$line_new/smp_affinity 
done

设置中断后,查看/proc/interrupts,可以看到CPU2/CPU3,处理了中断48、52、54、55、61、62。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@vcu_trd:~# cat /proc/interrupts
           CPU0       CPU1       CPU2       CPU3
  3:     115462     135783      31811     204151     GICv2  30 Level     arch_timer
  6:          0          0          0          0     GICv2  67 Level     zynqmp_ipi
  7:          0          0          0          0     GICv2 175 Level     arm-pmu
  8:          0          0          0          0     GICv2 176 Level     arm-pmu
  9:          0          0          0          0     GICv2 177 Level     arm-pmu
 10:          0          0          0          0     GICv2 178 Level     arm-pmu
 12:     349750          0          0          0     GICv2 156 Level     zynqmp-dma
 13:          0          0          0          0     GICv2 157 Level     zynqmp-dma
 14:          0          0          0          0     GICv2 158 Level     zynqmp-dma
 15:          0          0          0          0     GICv2 159 Level     zynqmp-dma
 16:          0          0          0          0     GICv2 160 Level     zynqmp-dma
 17:          0          0          0          0     GICv2 161 Level     zynqmp-dma
 18:          0          0          0          0     GICv2 162 Level     zynqmp-dma
 19:          0          0          0          0     GICv2 163 Level     zynqmp-dma
 20:          0          0          0          0     GICv2 164 Level     Mali_GP_MMU, Mali_GP, Mali_PP0_MMU, Mali_PP0, Mali_PP1_MMU, Mali_PP1
 21:          0          0          0          0     GICv2 109 Level     zynqmp-dma
 22:          0          0          0          0     GICv2 110 Level     zynqmp-dma
 23:          0          0          0          0     GICv2 111 Level     zynqmp-dma
 24:          0          0          0          0     GICv2 112 Level     zynqmp-dma
 25:          0          0          0          0     GICv2 113 Level     zynqmp-dma
 26:          0          0          0          0     GICv2 114 Level     zynqmp-dma
 27:          0          0          0          0     GICv2 115 Level     zynqmp-dma
 28:          0          0          0          0     GICv2 116 Level     zynqmp-dma
 30:     463312          0          0          0     GICv2  95 Level     eth0, eth0
 32:        525          0          0          0     GICv2  49 Level     cdns-i2c
 33:        113          0          0          0     GICv2  50 Level     cdns-i2c
 34:          0          0          0          0     GICv2  42 Level     ff960000.memory-controller
 35:          0          0          0          0     GICv2  57 Level     axi-pmon, axi-pmon
 36:        181          0          0          0     GICv2 155 Level     axi-pmon, axi-pmon
 37:         28          0          0          0     GICv2  47 Level     ff0f0000.spi
 38:          0          0          0          0     GICv2  58 Level     ffa60000.rtc
 39:          0          0          0          0     GICv2  59 Level     ffa60000.rtc
 40:          0          0          0          0     GICv2 165 Level     ahci-ceva[fd0c0000.ahci]
 41:        233          0          0          0     GICv2  81 Level     mmc0
 42:        133          0          0          0     GICv2  53 Level     xuartps
 44:          0          0          0          0     GICv2  84 Edge      ff150000.watchdog
 45:          0          0          0          0     GICv2  88 Level     ams-irq
 46:         12          0          0          0     GICv2 154 Level     fd4c0000.dma
 47:          0          0          0          0     GICv2 151 Level     fd4a0000.zynqmp-display
 48:          0      34920          0          0     GICv2 122 Level     xilinx_framebuffer
 49:          0          0          0          0     GICv2 141 Level     xilinx_framebuffer
 50:          0          0          0          0     GICv2 142 Level     xilinx_framebuffer
 51:          0          0          0          0     GICv2 143 Level     xilinx_framebuffer
 52:          0    1142094          0          0     GICv2 123 Level     xilinx-hdmi-rx
 53:          0          0          0          0     GICv2 121 Level     xilinx_framebuffer
 54:      17669     151552          0          0     GICv2 125 Level     xilinx-hdmitxss
 55:      17672     151552          0          0     GICv2 127 Level     xlnx-mixer
 56:          0          0          0          0     GICv2 136 Level     xilinx-dma-controller
 57:          0          0          0          0     GICv2 137 Level     xilinx-dma-controller
 58:          0          0          0          0     GICv2 138 Level     xilinx-dma-controller
 59:          0          0          0          0     GICv2 140 Level     xilinx-dma-controller
 60:         81          0          0          0     GICv2 126 Level     a00d0000.i2c
 61:          0          0      69841          0     GICv2 139 Level     a00d1000.sync_ip
 62:          4          0     279353          0     GICv2 128 Level     a0220000.al5d, a0200000.al5e
 63:       1184        163          0          0     GICv2 124 Level     xilinx-vphy
 64:          0          0          0          0     GICv2  97 Level     xhci-hcd:usb1
 67:          0          0          0          0  zynq-gpio  22 Edge      sw19
IPI0:     64845      46081         35     663483       Rescheduling interrupts
IPI1:        19         58         29         29       Function call interrupts
IPI2:         0          0          0          0       CPU stop interrupts
IPI3:         0          0          0          0       CPU stop (for crash dump) interrupts
IPI4:         0          0          0          0       Timer broadcast interrupts
IPI5:         0          0          0          0       IRQ work interrupts
IPI6:         0          0          0          0       CPU wake-up interrupts
Err:          0

进程优先级

Linux下进程的优先级概念比较复杂。一般而言,可以通过工具renice设置进程的Nice值,来更改进程的优先级。Nice值越大,改进程的优先级越低。 renice的常用格式为 renice PRIORITY -p pid。其中PRIORITY是Nice值,pid是进程ID。 下面的脚本,可以把所有名字中含有关键字(脚本第一个参数,12)的值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/sh

u-ps -axo pid,psr,cmd,ni
u-ps -axo pid,psr,cmd,ni | grep $1  | grep -v "grep" | grep -v "awk" | awk '{print $1}' > process_list.txt

echo -e "\nRead process list file:" ;
cat process_list.txt | while read line
do   
    echo -e "\nSet PID: $line to priority-nice value: $2\n\n"  
   	renice $2 -p $line
done  

其它

如果为了跟进一步提高实时性能,可以考虑为Linux内核增加Linux RT Patch

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【分享】扩展MPSoC中断
MPSoC是带ARM处理器和FPGA(PL)的SoC,包含4核A53及其常用外部模块(PS)。A53(PS)使用Arm GIC-400,属于GICv2架构。如果想了解GIC-400的具体细节,请参考文档APU GIC: CoreLink GIC-400 Generic Interrupt Controller, DDI 0471B, r0p1。
hankfu
2021/04/30
1.7K0
【分享】扩展MPSoC中断
Linux收发包绑定CPU
将你的发包进程绑定在 CPU 2,那么所有 send() 都会在 CPU 2 上执行,TX 流量也就自然从 CPU 2 发出。
poi11451
2025/06/25
1450
虚机软中断竟然是可一个CPU使劲造?
了解了软中断对CPU的占用之后,如果你动手操作查看过的话,相信会和我一样会遇到下面这个的问题。
开发内功修炼
2022/03/26
7800
虚机软中断竟然是可一个CPU使劲造?
宋宝华:谈一谈Linux让实时/高性能任务独占CPU的事
本文主要讨论在高实时要求、高效能计算、DPDK等领域,Linux如何让某一个线程排他性独占CPU;独占CPU涉及的线程、中断隔离原理;以及如何在排他性独占的情况下,甚至让系统的timer tick也不打断独占任务,从而实现最低的延迟抖动。
Linux阅码场
2021/02/24
9.3K0
宋宝华:谈一谈Linux让实时/高性能任务独占CPU的事
Linux中CPU亲和性(affinity)
超线程技术(Hyper-Threading): 就是利用特殊的硬件指令,把两个逻辑内核(CPU core)模拟成两个物理芯片,(一个核模拟出两个核?)
刘盼
2023/12/04
9971
Linux中CPU亲和性(affinity)
网卡中断绑定
网卡中断 获取网卡设备所有中断 [root@PowerCycle_1_DL380G7 ~]# cat /proc/interrupts|grep -iw eth0 52: 12403 2 13291 26 14094 20 13577 32 14576 21 13772 29 PCI-MSI-edge eth0-0 53:
PedroQin
2020/03/20
4.8K0
吐血整理 | 肝翻 Linux 中断所有知识点
GIC,Generic Interrupt Controller。是ARM公司提供的一个通用的中断控制器。主要作用为:接受硬件中断信号,并经过一定处理后,分发给对应的CPU进行处理。
刘盼
2021/08/25
4.4K1
吐血整理 | 肝翻 Linux 中断所有知识点
实时操作系统
一般的linux都是GPOS(通用)内核。GPOS是不保证实时的,但是对于大多数应用程序来说是没有问题的。GPOS可以充分利用物理资源。但在实时性要求性比较高的场景需要使用实时内核,RT内核。RT的代价就是牺牲掉了资源利用率,使得相同的资源生产能力下降。
后端云
2018/10/24
2.5K1
实时操作系统
Linux 多核下绑定硬件中断到不同 CPU
硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。 现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让网卡中断独占1个 CPU (core)、磁盘 IO 中断独占1个 CPU 的话将会大大减轻单一 CPU 的负担、提高整体处理效率。 VPSee 前天收到一位网友的邮件提到了 SMP IRQ Affinity,引发了今天的话题:D,以下操作在 SUN FIre X2100 M2 服务器+
小小科
2018/05/03
6K0
Linux运维常用知识(3)
参考:http://loveyan.blog.51cto.com/829079/745164
py3study
2020/01/08
27.8K0
计算机中断浅析
中断是计算机体系结构中的一个重要概念,用于处理器响应异步事件。中断设计对于提高计算机系统的性能和响应能力至关重要。下面详细讲解中断的工作原理、类型、中断处理流程以及中断设计的关键组件,并附上逻辑示意图。
锅总
2024/06/26
5180
计算机中断浅析
Linux 中断子系统(三):中断处理知识点大全
cat 这个节点,会打印系统中所有的中断信息,如果是多核CPU,每个核都会打印出来。
Jasonangel
2021/12/15
6.5K0
Linux 中断子系统(三):中断处理知识点大全
Linux后台开发常用工具
pwdx - report current working directory of a process,格式:pwdx pid 内存分析工具 valgrind valgrind辅助工具 qcachegrind 可视化查看valgrind结果 淘宝DBA团队发布的监控脚本,使用perl开发,可以完成对linux系统和MySql相关指标的实时监控 orzdba  取指定进程名的pid pidof 进程名 性能瓶颈查看: perf top -p pid 查看调用栈: pstack pid https://www.percona.com/ 查询程序执行聚合的GDB堆栈跟踪,先进性堆栈跟踪,然后将跟踪信息汇总: pt-pmp -p pid 格式化explain出来的执行计划按照tree方式输出,方便阅读: pt-visual-explain 从log文件中读取插叙语句,并用explain分析他们是如何利用索引,完成分析之后会生成一份关于索引没有被查询使用过的报告: pt-index-usage 其它: vmstat tcpdump 网络数据包分析器   显示包的内容:   tcpdump -i eth1 -n -vv -x -e -s 600 # 仅二进制   tcpdump -i eth1 -n -vv -X -e -s 600 # 二进制和文本   抓包保存到文件供Wireshark分析:   tcpdump -i eth1 -n -vv -X -e -s 600 -w x.cap   抓取192.168.31.1的80端口的包   tcpdump -i eth1 host 192.168.31.1 and port 80   抓取目标IP为192.168.31.1和目标端口为80端口的包   tcpdump -i eth1 dst host 192.168.31.1 and dst port 80 -s 指定显示多少字节的包内容 objdump nm ldd strings iostat 输入/输出统计 ifstat 网络流量实时监控工具 vmstat 虚拟内存统计 sar (System Activity Reporter系统活动情况报告,最为全面的系统性能分析工具之一) iptraf 实时IP局域网监控 iftop 网络带宽监控 htop 进程监控 iotop 磁盘I/O监测工具 fuser 使用文件或文件结构识别进程 lsof 打开文件列表 dmesg slabtop free slurm 查看网络流量 byobu 类似于screen tmux 终端复用工具,类似于screen screen 在多个进程之间多路复用一个物理终端的窗口管理器 dtach 用来模拟screen的detach的功能的小工具 dstat 可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品 NetHogs 监视每个进程的网络带宽 MultiTail 同时监控多个文档、类似tail Monitorix 系统和网络监控 Arpwatch 以太网活动监控器 Suricata 网络安全监控 Nagios 网络/服务器监控 Collectl 一体化性能检测工具 mtr 网络连通性判断工具,集成了traceroute和ping socat 多功能的网络工具(Socket CAT,netcat加强版) netpipes socket操作 ab wget curl tsung 压力测试工具 siege 压力测试和评测工具 nmon 监控Linux系统性能 psacct 监视用户活动 ncdu 基于ncurses库的磁盘使用分析器 slurm 实时网络流量监控 findmnt 查找已经被挂载的文件系统 saidar 系统数据监控和统计工具 ss 可以替代netstat的网络连接查看工具(socket statistics) ccze 用不同颜色高亮日志协助管理员进行区分和查看分析 netstat 网络统计 ifconfig (ifup ifdown) Linux磁盘相关命令 sfdisk -l sfdisk -s fdisk -l dmesg |grep SCSI dmesg |grep -i raid df -h cat /proc/scsi/scsi hdparm /dev/sda mount 加载一块硬盘 mkfs 创建文件系统 /etc/fstab 文件内容mount命令输出一致 lscpu 查看CPU lspci
一见
2018/08/02
1.5K0
linux内核发包工具,Linux内核发包工具pktgen测试方案说明「建议收藏」
pktgen是Linux内核里包含的一个高性能发包工具,主要用来测试网络性能。一般情况下,使用pktgen就可以满足千兆网卡的测试需要。 pktgen运行在“内核态”,并不占用太多的系统资源,就可以达到非常高的发包速率。
全栈程序员站长
2022/10/04
9.1K0
linux内核发包工具,Linux内核发包工具pktgen测试方案说明「建议收藏」
Linux后台开发常用工具
sed单引号替换(特殊字符需要使用反斜线”\”进行转义) sed 's/原字符串/替换字符串/' sed双引号替换 sed "s/原字符串包含'/替换字符串包含'/"  sed
一见
2019/03/14
1.4K0
[分享]升级MPSoC Linux LTS 版本和Realtime版本
大部分项目设计需要一个稳定的Linux版本,但是又需要修复内核漏洞。这种情况下,跟随LTS版本升级,是最好的办法。 很多项目也需要改善Linux的实时特性。可以使用Linux Realtime patch实现。
hankfu
2020/07/17
3.9K0
【分享】在MPSoC上运行基于eglfs_kms的QT应用程序
Xilinx为MPSoC支持4种libMali的backend: X11, Wayland/GBM, Fbdev, Headless-EGL.
hankfu
2020/12/16
6.3K0
Nginx(5):进程绑定CPU:从nginx源码里给你刨功能出来
超线程技术(Hyper-Threading):就是利用特殊的硬件指令,把两个逻辑内核(CPU core)模拟成两个物理芯片, 让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率。 我们常听到的双核四线程/四核八线程指的就是支持超线程技术的CPU.
看、未来
2021/10/09
1.5K0
Nginx(5):进程绑定CPU:从nginx源码里给你刨功能出来
系统性能调优之绑定cpu
L1缓分成两种,一种是指令缓存,一种是数据缓存。L2缓存和L3缓存不分指令和数据。L1和L2缓存在第一个CPU核中,L3则是所有CPU核心共享的内存。L1、L2、L3的越离CPU近就越小,速度也越快,越离CPU远,速度也越慢。再往后面就是内存,内存的后面就是硬盘。我们来看一些他们的速度:
没有故事的陈师傅
2021/07/21
1.7K0
Linux 性能调优之CPU上下文切换
99%的焦虑都来自于虚度时间和没有好好做事,所以唯一的解决办法就是行动起来,认真做完事情,战胜焦虑,战胜那些心里空荡荡的时刻,而不是选择逃避。不要站在原地想象困难,行动永远是改变现状的最佳方式
山河已无恙
2024/09/12
1K0
Linux 性能调优之CPU上下文切换
相关推荐
【分享】扩展MPSoC中断
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档