① linux查看中斷綁定在哪個cpu
cpuset 允許把所有進程echo到一個cpuset目錄中,與指定的回cpu綁定。答 The following script which is a starting point for investigating willmove all the processes to a specific cpuset with one cpu. if [ ! -d /sys/fs/cgroup ]; then echo...
② linux核隔離綁定區別
Linux核隔離和綁定都桐碧是Linux內核對進程和CPU資源的管局銀舉理機制,但是它們的概念和作用有所不同。
1. 核隔離(CPU isolation):核隔離是指將CPU核心綁定到一個或多個特定進程上,從而實現不同進程之間的CPU資源隔離,避免不同進程之間的CPU競爭,並提高CPU利用率。這種方法需要使用cpuset控制工具進行設置,用於分配CPU資源給指定的進程組。
2. 綁定(CPU affinity):綁定是指將一個或多個特定的CPU核心分配給某個進程或線程,使其只能在該CPU核心上運行,其他CPU核心不參與該進程或線程的調度。通過綁定CPU核心可以避免緩存變冷、頁表失效等問題,提高CPU緩存命中率和應用程序性能。這種方法需要使用taskset命令來實現。
總之,在不同的應用場景搏廳下,可根據需求選擇不同的CPU資源管理機制,以便更好地管理和利用CPU資源。
③ linux下把進程/線程綁定到特定cpu核上運行
你那個是系統下把CPU的核說釘在五河以下是比較好的,因為吧和內心壓力非常大,發熱量非常大。
④ 如何監控linux 伺服器 cpu命令
cat /proc/cpuinfo中的信息
processor 邏輯處理器的id。
physical id 物理封裝的處理器的id。
core id 每個核心的id。
cpu cores 位於相同物理封裝的處理器中的內核數量。
siblings 位於相同物理封裝的處理器中的邏輯處理器的數量。
1 查看物理CPU的個數
#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc –l
2、 查看邏輯CPU的個數
#cat /proc/cpuinfo |grep "processor"|wc –l
3、 查看CPU是幾核
#cat /proc/cpuinfo |grep "cores"|uniq
4、 查看CPU的主頻
#cat /proc/cpuinfo |grep MHz|uniq
5、 # uname -a
6、 Linux euis1 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux
(查看當前操作系統內核信息)
7、 # cat /etc/issue | grep Linux
8、 Red Hat Enterprise Linux AS release 4 (Nahant Update 5(查看當前操作系統發行版信息)
9、 # cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
8 Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
(看到有8個邏輯CPU, 也知道了CPU型號)
9 # cat /proc/cpuinfo | grep physical | uniq -c
4 physical id : 0
4 physical id : 1
(說明實際上是兩顆4核的CPU)
10、# getconf LONG_BIT
32
(說明當前CPU運行在32bit模式下, 但不代表CPU不支持64bit)
11、# cat /proc/cpuinfo | grep flags | grep ' lm ' | wc –l
8(結果大於0, 說明支持64bit計算. lm指long mode, 支持lm則是64bit)
12、如何獲得CPU的詳細信息:
linux命令:cat /proc/cpuinfo
13、用命令判斷幾個物理CPU,幾個核等:
邏輯CPU個數:
# cat /proc/cpuinfo | grep "processor" | wc -l
物理CPU個數:
# cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
14、每個物理CPU中Core的個數:
# cat /proc/cpuinfo | grep "cpu cores" | wc -l
15、是否為超線程?如果有兩個邏輯CPU具有相同的」core id」,那麼超線程是打開的。每個物理CPU中邏輯CPU(可能是core, threads或both)的個數:
# cat /proc/cpuinfo | grep "siblings"
1.查看CPU信息命令
cat /proc/cpuinfo
2.查看內存信息命令
cat /proc/meminfo
3.查看硬碟信息命令
fdisk -l
查看CPU信息(型號)
# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
8 Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
(看到有8個邏輯CPU, 也知道了CPU型號)
# cat /proc/cpuinfo | grep physical | uniq -c
4 physical id : 0
4 physical id : 1
(說明實際上是兩顆4核的CPU)
PS:Jay added on 10th, May, 2011
# 其實是可能有超線程HT技術,不一定是有4核,也可能是2核4線程;當時還理解不清楚
# getconf LONG_BIT
32
(說明當前CPU運行在32bit模式下, 但不代表CPU不支持64bit)
#
⑤ Linux裡面ps -eo comm,pcpu命令作用是什麼
# ps -ef 顯示所有進程
# ps -eo comm,pcpu 顯圓敗示所有命令佔用的cpu的大小
e顯示所有進程,o指定命令的名字
# ps -eo comm,pmem 顯示所有命令佔用的mem的大小
ps工具標識進程的橘螞顫5種狀態碼:
D 不可中斷 uninterruptible sleep (usually IO)
R 運行 runnable (on run queue)
S 中斷 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (」zombie」物乎) process
⑥ linux cpu隔離和qemu中cpu綁定試驗
查看當前qemu進程(pid:1406)的cpu(psr)使用情況:
$ps -o pid,command,psr -q 1406
proc文件系統中cpu允許調度信息
$cat /proc/1406/status
Cpus_allowed: 8
Cpus_allowed_list: 3
綁定至某個cpu:
$taskset -cp 2 1406
cpu隔歲培離(獨占)試驗:
在linux啟動時加isocpu即可:
kernel .... root=... isolcpu=2,3
啟動時,默認進程乎渣唯就不會調度到2,3號cpu上
再加上前梁隱面的taskset,就可以控制某些cpu個某些進程獨占
⑦ linux下怎麼解除中斷和cpu綁定
在多 CPU 的環境中,還有一個中斷平衡的問題,比如,網卡中斷會教給哪個 CPU 處理,這個內參數控制哪些容 CPU 可以綁定 IRQ 中斷。其中的 {number} 是對應設備的中斷編號,可以用下面的命令找出: cat /proc/interrupt 比如,一般 eth0 的 IRQ
⑧ linux中查看虛擬內存和cpu佔用率的命令是什麼
top,free,cat/proc/meminfo,cat/proc/cpuinfo。
[root@centerlisdbproc]#dmidecode|grep-A16"MemoryDevice"|more[objectObject]。
查看內存使用情況:cat/proc/meminfo,查看CPU使用情況:cat /proc/cpuinfo。
在系統維護的過程中,隨時可能有需要查看 CPU 使用率,並根據相應信息分析系統狀況的需要。在 CentOS 中,可以通過 top 命令來查看 CPU 使用狀況。
運行 top 命令後,CPU 使用狀態會以全屏的方式顯示,並且會處在對話的模式 -- 用基於 top 的命令,可以控制顯示方式等等。退出 top 的命令為 q (在 top 運行中敲 q 鍵一次)。
top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,類似於Windows的任務管理器。
可以直接使用top命令後,查看%MEM的內容。可以選擇按進程查看或者按用戶查看,如想查看oracle用戶的進程內存使用情況的話可以使用如下的命令:$ top -u oracle。
(8)linux綁定cpu命令擴展閱讀:
一、查看內存佔用:
1、free
# free -m。
以MB為單位顯示內存使用情況。
# free -h。
以GB為單位顯示內存使用情況。
# free -t。
以總和的形式查詢內存的使用信息。
# free -s 5。
周期性的查詢內存使用信息。
每5秒執行一次命令。
二、查看CPU使用情況:
1、top。
top後鍵入P看一下誰佔用最大。
# top -d 5。
周期性的查詢CPU使用信息。
每5秒刷新一次。
2、ps auxw(查看本機的進程所佔cpu和mem的百分比情況)。
使用"ps auxw" 可以查看到本機的進程所佔cpu和mem的百分比情況。
# ps auxw | head -1
%CPU 進程的cpu佔用率。
%MEM 進程的內存佔用率。
3、查看本機所有進程的CPU佔比之和。
# cat cpu_per.sh
三、查看cpu信息(信息記錄在/proc/cpuinfo中)
# 總核數 = 物理CPU個數 X 每顆物理CPU的核數。
# 總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超線程數。
⑨ 將進程綁定到指定的CPU上
背景:為什麼要進程綁定到指定的CPU上?
1) 減少CPU切換開銷
CPU固定綁定到主機的指定CPU上,在整個運行期間,不會發生CPU浮動, 減少CPU切換開銷 ,提高虛擬機的計算性能。
2) 提供CPU cache的命中率
在多核運行的機器上,每個CPU自身會有緩存,緩存著進程使用的信息,而進程可能會被OS調度到其他CPU上,如此, CPU cache命中率 就低了,當綁定CPU後,程序就會一直在指定的cpu跑,不會由操作系統調度到其他CPU上,性能有一定的提高。
taskset:設置或頌肆檢索進程的CPU相關性
1) 如果沒有taskset命令, 安裝 包含taskset命令的util-linux工具集:yum install util-linux
2) 查看進程的CPU親和力 ,-p選項是一個十六進制數,-cp選項是一個cpu列表,表示相應的cpu核。3的二進制形式是0011,相應的第0位和第1位都是1,表示14795進程只能運行在cpu的第0個核和第1個核。
$ taskset -p 14795
pid 14795's current affinity mask: 3
$ taskset -cp 14795
pid 14795's current affinity list: 0,1
3) 綁定CPU : taskset -cp <CPU IDs> <Process ID>
$ taskset -cp 0 14795
pid 14795's current affinity list: 0,1
pid 14795's new affinity list: 0
OpenStack K版本引入了許多CPU高級特性功能,不僅支持自定義CPU拓撲功能,支持設置虛擬機CPU的socket、core、threads等,還支持CPU pinning功能,即CPU核綁定,甚至能夠配置虛擬機獨占物理CPU,虛擬機的vCPU能夠固定綁定到物理宿主機的指定pCPU上,在整個運行期間,不會發生CPU浮動,減少CPU切換開銷,提高虛擬機的計算性能。
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 40
On-line CPU(s) list: 0-39
Thread(s) per core: 2
Core(s) per socket: 10
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 63
Model name: Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz
Stepping: 2
CPU MHz: 1201.480
BogoMIPS: 4603.87
Virtualization: VT-x
L1d cache: 32K
L1i cache: 則掘 32K
L2 cache: 256K
L3 cache: 25600K
NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38
NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39
以上可知,該宿主機有兩個CPU(socket),每個CPU 10核(core),每個核可以開啟兩個 超線程(thread) ,即有40個邏輯CPU。宿主機CPU包孫櫻核含兩個NUMA node,其中node0包括0,2,4,...,38,node1包括1,3,5,...,39。
步驟1) 創建支持綁核的主機集合
不是所有的計算節點都支持CPU綁核特性,可以通過主機集合(host aggregate)把支持綁核CPU的主機放到一個集合中。
步驟2) 創建支持綁核的flavor
目前Nova並不支持啟動時直接指定主機集合的metadata(hint只支持指定server group),需要通過flavor的擴展屬性和主機集合的metadata匹配,將不匹配的主機濾掉,部署到匹配的主機上。flavor支持配置虛擬機的CPU拓撲、QoS、CPU pinning策略、NUMA拓撲以及PCI passthrough等擴展屬性。
步驟3) 通過步驟2) 的Flavor創建虛擬機,創建完成到虛機所在物理機上查看虛機綁核情況:
查詢方法1) virsh mpxml 虛機id
<vcpu placement='static'>8</vcpu>
<cputune>
<vcpupin vcpu='0' cpuset='25'/>
<vcpupin vcpu='1' cpuset='5'/>
<vcpupin vcpu='2' cpuset='8'/>
<vcpupin vcpu='3' cpuset='28'/>
<vcpupin vcpu='4' cpuset='9'/>
<vcpupin vcpu='5' cpuset='29'/>
<vcpupin vcpu='6' cpuset='24'/>
<vcpupin vcpu='7' cpuset='4'/>
<emulatorpin cpuset='4-5,8-9,24-25,28-29'/>
</cputune>
查詢方法2) 在虛擬機所運行的物理宿主機上執行virsh list找到相應虛機的實例id,然後virsh vcpupin 實例id可以查到該虛擬機所佔用的CPU具體核數。
# virsh vcpupin vm46 綁核的虛機
VCPU: CPU Affinity
----------------------------------
0: 25
1: 5
2: 8
3: 28
4: 9
5: 29
6: 24
7: 4
# virsh vcpupin vm6 未綁核的虛機
VCPU: CPU Affinity
----------------------------------
0: 0-39
1: 0-39
2: 0-39
3: 0-39
4: 0-39
5: 0-39
6: 0-39
7: 0-39
virsh vcpupin 子命令是KVM自帶的指令工具,它可以把vm實例的每個vcpu與宿主機的cpu對應綁定,這種綁定方式粒度更小。
# virsh vcpupin vm4 查看綁定情況
VCPU: CPU Affinity
----------------------------------
0: 0-23
1: 0-23
#默認2個vcpu沒有進行綁定,可以在0-23號cpu上切換
# virsh vcpuinfo vm4 查看CPU使用時長
VCPU: 0
CPU: 10 #運行在10號cpu上
State: running
CPU time: 14.2s
CPU Affinity: yyyyyyyyyyyyyyyyyyyyyyyy
VCPU: 1
CPU: 8 #運行在8號cpu上
State: running
CPU time: 6.8s
CPU Affinity: yyyyyyyyyyyyyyyyyyyyyyyy
# virsh vcpupin vm4 0 3 綁定虛機的第1個CPU到宿主機的第4號cpu上
# virsh vcpupin vm4 1 5 綁定虛機的第2個CPU到宿主機的第6號cpu上
# virsh vcpuinfo vm4
VCPU: 0
CPU: 3
State: running
CPU time: 14.5s
CPU Affinity: ---y--------------------
VCPU: 1
CPU: 5
State: running
CPU time: 7.3s
CPU Affinity: -----y------------------
# virsh vcpupin vm4
VCPU: CPU Affinity
----------------------------------
0: 3
1: 5
三種方法的相同點:都能實現綁核效果
優劣勢對比:openstack支持虛機重生虛擬遷移到其他物理主機上,第1種方法在這些操作後綁核還是有效的,但2和3就不會綁核的。此外,第1種方法是自動的,2和3是手動的,可以作為臨時補救方法。
在虛擬機上執行高密度計算,測試的Python腳本如下:
# test_compute.py
k = 0
for i in xrange(1, 100000):
for j in xrange(1, 100000):
k = k + i * j
使用shell腳本同時跑50個進程,保證CPU滿載運行:
for i in `seq 1 50`; do
python test_compute.py &
done
使用sar命令查看宿主機CPU使用情況:
sar -P ALL 1 100
結果如下:
Linux 3.10.0-229.20.1.el7.x86_64 (8409a4dcbe1d11af) 05/10/2018 _x86_64_ (40 CPU)
10:20:14 PM CPU %user %nice %system %iowait %steal %idle
10:20:15 PM all 20.48 0.00 0.15 0.03 0.00 79.34
10:20:15 PM 0 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 1 0.99 0.00 0.00 0.00 0.00 99.01
10:20:15 PM 2 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 3 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 4 100.00 0.00 0.00 0.00 0.00 0.00
10:20:15 PM 5 100.00 0.00 0.00 0.00 0.00 0.00
10:20:15 PM 6 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 7 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 8 100.00 0.00 0.00 0.00 0.00 0.00
10:20:15 PM 9 100.00 0.00 0.00 0.00 0.00 0.00
10:20:15 PM 10 1.01 0.00 0.00 0.00 0.00 98.99
10:20:15 PM 11 1.00 0.00 0.00 0.00 0.00 99.00
10:20:15 PM 12 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 13 0.00 0.00 0.99 0.00 0.00 99.01
10:20:15 PM 14 0.99 0.00 0.99 0.00 0.00 98.02
10:20:15 PM 15 1.00 0.00 0.00 0.00 0.00 99.00
10:20:15 PM 16 0.99 0.00 0.99 0.00 0.00 98.02
10:20:15 PM 17 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 18 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 19 3.96 0.00 0.99 0.00 0.00 95.05
10:20:15 PM 20 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 21 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 22 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 23 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 24 100.00 0.00 0.00 0.00 0.00 0.00
10:20:15 PM 25 100.00 0.00 0.00 0.00 0.00 0.00
10:20:15 PM 26 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 27 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 28 100.00 0.00 0.00 0.00 0.00 0.00
10:20:15 PM 29 100.00 0.00 0.00 0.00 0.00 0.00
10:20:15 PM 30 2.00 0.00 0.00 0.00 0.00 98.00
10:20:15 PM 31 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 32 2.97 0.00 0.99 0.00 0.00 96.04
10:20:15 PM 33 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 34 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 35 1.00 0.00 0.00 0.00 0.00 99.00
10:20:15 PM 36 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 37 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 38 0.00 0.00 0.00 0.00 0.00 100.00
10:20:15 PM 39 0.00 0.00 0.00 0.00 0.00 100.00
從CPU使用情況看宿主機的pCPU 4-5,8-9,24-25,28-29使用率100%,並且整個過程中沒有浮動,符合我們的預期結果,說明CPU核綁定成功。
⑩ Linux 如何綁定指定線程在某個固定CPU上
大概的介紹一下Linux 的指定CPU運行,包括進程和線程。linux下的命令是可以查看當前的cpu的運行狀態,按1可以查看系統有多少個CPU,以及每個CPU的運行狀態。
可是如何查看線程的CPU呢?top
-Hp pid,pid就是你當前程序的進程號,如果是多線程的話,是可以查看進程內所有線程的CPU和內存使用情況。
pstree可以查看主次線程,同樣的pstree -p pid。可以查看進程的線程情況。
taskset這個其實才是重點,可以查看以及設置當前進程或線程運行的CPU(設置親和力)。
taskset -pc pid,查看當前進程的cpu,當然有的時候不只是一個,taskset -pc cpu_num pid ,cpu_num就是設置的cpu。
這樣的話基本的命令和操作其實大家都知道了,接下來就是在代碼中完成這些操作,並通過命令去驗證代碼的成功率。
進程制定CPU運行:
[cpp] view plain
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/sysinfo.h>
#include<unistd.h>
#define __USE_GNU
#include<sched.h>
#include<ctype.h>
#include<string.h>
int main(int argc, char* argv[])
{
//sysconf獲取有幾個CPU
int num = sysconf(_SC_NPROCESSORS_CONF);
int created_thread = 0;
int myid;
int i;
int j = 0;
//原理其實很簡單,就是通過cpu_set_t進行位與操作
cpu_set_t mask;
cpu_set_t get;
if (argc != 2)
{
printf("usage : ./cpu num\n");
exit(1);
}
myid = atoi(argv[1]);
printf("system has %i processor(s). \n", num);
//先進行清空,然後設置掩碼
CPU_ZERO(&mask);
CPU_SET(myid, &mask);
//設置進程的親和力
if (sched_setaffinity(0, sizeof(mask), &mask) == -1)
{
printf("warning: could not set CPU affinity, continuing...\n");
}
while (1)
{
CPU_ZERO(&get);
//獲取當前進程的親和力
if (sched_getaffinity(0, sizeof(get), &get) == -1)
{
printf("warning: cound not get cpu affinity, continuing...\n");
}
for (i = 0; i < num; i++)
{
if (CPU_ISSET(i, &get))
{
printf("this process %d is running processor : %d\n",getpid(), i);
}
}
}
return 0;
}
進程設置CPU運行,其實只能是單線程。多線程設定CPU如下:
[cpp] view plain
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <sched.h>
void *myfun(void *arg)
{
cpu_set_t mask;
cpu_set_t get;
char buf[256];
int i;
int j;
//同樣的先去獲取CPU的個數
int num = sysconf(_SC_NPROCESSORS_CONF);
printf("system has %d processor(s)\n", num);
for (i = 0; i < num; i++) {
CPU_ZERO(&mask);
CPU_SET(i, &mask);
//這個其實和設置進程的親和力基本是一樣的
if (pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) < 0) {
fprintf(stderr, "set thread affinity failed\n");
}
CPU_ZERO(&get);
if (pthread_getaffinity_np(pthread_self(), sizeof(get), &get) < 0) {
fprintf(stderr, "get thread affinity failed\n");
}
for (j = 0; j < num; j++)
{
if (CPU_ISSET(j, &get))
{
printf("thread %d is running in processor %d\n", (int)pthread_self(), j);
}
}
j = 0;
while (j++ < 100000000) {
memset(buf, 0, sizeof(buf));
}
}
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
pthread_t tid;
if (pthread_create(&tid, NULL, (void *)myfun, NULL) != 0)
{
fprintf(stderr, "thread create failed\n");
return -1;
}
pthread_join(tid, NULL);
return 0;
}