挖礦cpu親和力
『壹』 Linux如何將進程綁定運行在指定CPU上
綁定cpu方式:
c語言:
sched_setaffinity(0, sizeof(mask), &mask)
shell命令:
在grup啟動時傳給內核參數: isolcpus=2-15, 這里表示隔離第3到16個CPU, Linux程序只跑在第一和第二個CPU上, 空閑的CPU我們可以指定跑進程了.
這是內核文檔里對內核參數的解釋:
isolcpus= [KNL,SMP] Isolate CPUs from the general scheler.
Format:
<cpu number>,...,<cpu number>
or
<cpu number>-<cpu number>
(must be a positive range in ascending order)
or a mixture
<cpu number>,...,<cpu number>-<cpu number>
This option can be used to specify one or more CPUs
to isolate from the general SMP balancing and scheling
algorithms. You can move a process onto or off an
"isolated" CPU via the CPU affinity syscalls or cpuset.
<cpu number> begins at 0 and the maximum value is
"number of CPUs in system - 1".
This option is the preferred way to isolate CPUs. The
alternative -- manually setting the CPU mask of all
tasks in the system -- can cause problems and
suboptimal load balancer performance.
linux nice 命令詳解
功能說明:設置優先權。
語法:nice [-n <優先等級>][--help][--version][執行指令]
補充說明:nice指令可以改變程序執行的優先權等級。
參數:-n<優先等級>或-<優先等級>或--adjustment=<優先等級> 設置欲執行的指令的優先權等級。等級的范圍從-20-19,其中-20最高,19最低,只有系統管理者可以設置負數的等級。
--help 在線幫助。
--version 顯示版本信息。
linux renice 命令詳解
功能說明:調整優先權。
語法:renice [優先等級][-g <程序群組名稱>...][-p <程序識別碼>...][-u <用戶名稱>...]
補充說明:renice指令可重新調整程序執行的優先權等級。預設是以程序識別碼指定程序調整其優先權,您亦可以指定程序群組或用戶名稱調整優先權等級,並修改所有隸屬於該程序群組或用戶的程序的優先權。等級范圍從-20--19,只有系統管理者可以改變其他用戶程序的優先權,也僅有系統管理者可以設置負數等級。
參數:
-g <程序群組名稱> 使用程序群組名稱,修改所有隸屬於該程序群組的程序的優先權。
-p <程序識別碼> 改變該程序的優先權等級,此參數為預設值。
-u <用戶名稱> 指定用戶名稱,修改所有隸屬於該用戶的程序的優先權。
taskset設定cpu親和力,cpu親和力是指
CPU調度程序屬性關聯性是「鎖定」一個進程,使他只能在一個或幾個cpu線程上運行。對於一個給定的系統上設置的cpu。給定CPU親和力和進程不會運行在任何其他CPU。注意,Linux調度器還支持自然CPU關聯:(不能讓這個cpu只為這一個進程服務)
這里要注意的是我們可以把某個程序限定在某一些CPU上運行,但這並不意味著該程序可以獨占這些CPU,其實其他程序還是可以利用這些CPU運行。如果要精確控制CPU,taskset就略嫌不足,cpuset才是可以
-a, --all-tasks 操作所有的任務線程-p, --pid 操作已存在的pid-c, --cpu-list 通過列表顯示方式設置CPU
(1)指定1和2號cpu運行25718線程的程序
taskset -cp 1,2 25718
(2),讓某程序運行在指定的cpu上 taskset -c 1,2,4-7 tar jcf test.tar.gz test
(3)指定在1號CPU上後台執行指定的perl程序
taskset –c 1 nohup perl pi.pl &
『貳』 linux下怎樣將線程分配到指定CPU
大概的介紹一下Linux 的指定CPU運行,包括進程和線程。linux下的top命令是可以查看當前的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;
}
『叄』 何時使用Windows Server 2012 R2的CPU親和力
目前,你可能已經聽說過Windows Server 2012 R2新的存儲分層特性。但是,另一個新的存儲特性同樣意義重大卻受到較少關註:存儲QoS。
在一個伺服器虛擬化環境中,一台主機伺服器的物理資源在父虛擬分區(parent partition)(主機操作系統)中被共享,各種各樣的虛擬機(VM)在主機上運行。在大多數情況下,可以限制虛擬機的硬體使用並禁止其消耗在主機上運行的其它VM所需的資源。例如,你可以把最大的內存分配給一台VM,有效地限制這台VM的物理內存的佔用。同樣,你可以把指定的CPU核數分配給一台VM,限制其對CPU的佔用。
Microsoft Hyper-V從來不允許管理員直接限制的一種資源是存儲I/O。實際上,管理員有時把物理的邏輯單元號(logical unit number,LUN)直接分配給一台VM(作為SCSI直通磁碟或者通過虛擬光纖通道),只是作為隔離這台VM磁碟I/O的一種方法,而不免影響其它VM。
通過允許你控制IOPS的Windows Server 2012 R2的Hyper-V Storage QoS特性的方式,更容易控制磁碟I/O。作為替代方案,管理員可以指定一個最低的IOPS,有效地起到IOPS預留的作用。
Storage QoS按每個虛擬硬碟(virtual hard disk,VHD)的方式實施。這意味著即使在單台VM連接多個VHD的情況下,也可以按需設定限制而無須理會其它VHD。
盡管很容易只把Storage QoS特性當成性能特性,它也可以幫助管理員更加有效地利用存儲容量。例如,假設一個特定的VHDX文件需要10,000 IOPS。以前,解決方案可能會是找來10個每個可以提供1,000 IOPS的驅動器並將那些驅動器組成一個能夠向這台VM提供10,000 IOPS的陣列。
現在假設陣列的每一個驅動器的大小是1TB,剛好是一台10TB的陣列。如果駐留在陣列的資料庫的大小隻有2TB,那麼就浪費了8TB的存儲,以便這個陣列可以提供所需的性能水平。Storage QoS允許管理員按需確定容量,可以更有效地使用存儲的同時仍然保證性能水平。
『肆』 xta處理器如何保存設置
步驟如下: 下載軟體Process Lasso, 然後安裝Process Lasso, 打開Process Lasso,設置軟體開機啟動 然後設置CPU的親和力等設置,然後保存。 重啟即可。
『伍』 linux應用如何進行cpu綁定
1 安裝taskset
$ yum install util-linux1
如果系統沒有taskset命令,使用yum安裝util-linux即可,這是一個工具集,其中包含了taskset命令。
2 查看應用的cpu親和力(affinity)
$ taskset -p 14795pid 14795's current affinity mask: 3
$ taskset -cp 14795
pid 14795's current affinity list: 0,11234
示例中,查看進程14795的cpu親和力,使用-p選項指定需要查詢的進程號,默認列印的是一個十六進制數,如果使用-cp選項列印的是一個cpu列表,表示相應的cpu核。3的二進制形式是0011,相應的第0位和第1位都是1,對應了-cp列印的0和1,表示14795進程只能運行在cpu的第0個核和第1個核。
3 將應用綁定到指定的cpu運行
$ taskset -p 0x1 14795pid 14795's current affinity mask: 3pid 14795's new affinity mask: 1123
或
$ taskset -cp 0 14795pid 14795's current affinity list: 0,1
pid 14795's new affinity list: 0123
示例中,通過taskset命令重新設置了進程14795的cpu親和力,前後2種方式設置效果一樣,都表示進程14795隻能運行在cpu的第0個核。因為-p指定的0x01二進制形式為0001,第0位是1,表示第0個cpu核。-cp直接指定了0,也表示第0個cpu核。
除了通過taskset命令綁定應用到指定的cpu上,也可以通過taskset命令啟動應用,並指定應用運行的cpu,例如:
$ taskset 0x1 sleep 10000 &
[2] 14925$ taskset -p 14925pid 14925's current affinity mask: 1
$ taskset -cp 14925
pid 14925's current affinity list: 0123456
示例中,通過taskset啟動應用(使用sleep命令模擬應用),並設置相應的cpu親和力,即進程14925隻能運行在cpu的第0個核。啟動程序後查看進程的cpu親和力,和啟動時設置的相同。
另外,除了通過taskset命令實現cpu綁定,很多語言都提供了相應的api實現cpu綁定功能,例如c的sched_setaffinity和sched_getaffinity,python 3的os.sched_setaffinity和os.sched_getaffinity。
『陸』 如何更改360殺毒和安全衛士的CPU親和力和規則…
按 Ctrl+ALT+DEL(就是小數點)調出任務管理器,點進程,找到360殺毒的「某些進程」(米用過360SD不好意思!!具體是某些進程進360的進程管理器看簡介)右擊,設置優先順序ok
或者你把想要弄高的進程改優先順序OK
提一句:這的確是一種方法,但亂限殺軟的CPU總是不好滴!!玩正規游戲一般不需要開殺軟,前提是你機子里沒病毒!單純玩游戲把360SD(殺毒)的監控關了留下360SAFE(安全衛士)就行
還有免打擾模式是說在調起全屏模式下檢測到病毒自行處理不是 就是給充分把資源都讓給游戲… 貌似效果還不錯 ,怕你在和別人PK突然跳出提示框返回桌面,然後你再回遊戲你已經掛了... ...
『柒』 如何保存CPU的相關性設置
步驟如下:
下載軟體Process Lasso,
然後安裝Process Lasso,
打開Process Lasso,設置軟體開機啟動
然後設置CPU的親和力等設置,然後保存。
重啟即可。
『捌』 什麼是CPU的親和力
。。亂彈琴啦,CPU與誰親和呀? 這是軟體漢化人的傑作啦。Process Lasso,是一款調試進程級別的系統優化工具。主要功能是動態調整各個進程的優先順序,並設為合理的優先順序以實現為系統減負的目的,可有效避免藍屏、假死、進程停止響應、進程佔用 CPU 時間過多等症狀。可能這就叫做「親和力」啦。
『玖』 如何設置一個特定的線程CPU親和力
1、在linux下修改進程的「cpu親和力」
taskset是LINUX提供的一個命令(ubuntu系統可能需要自行安裝,schetils package)。他可以讓某個程序運行在某個(或)某些CPU上。
以下均以redis-server舉例。
1)顯示進程運行的CPU
命令taskset -p 21184
顯示結果:
pid 21184's current affinity mask: ffffff
註:21184是redis-server運行的pid
顯示結果的ffffff實際上是二進制24個低位均為1的bitmask,每一個1對應於1個CPU,表示該進程在24個CPU上運行
2)指定進程運行在某個特定的CPU上
命令taskset -pc 3 21184
顯示結果:
pid 21184's current affinity list: 0-23
pid 21184's new affinity list: 3
註:3表示CPU將只會運行在第4個CPU上(從0開始計數)。http://write.blog.csdn.net/postedit?ticket=ST-133194-dCdOr36vRfv7GrhbyGZf-passport.csdn.net
3)進程啟動時指定CPU
命令taskset -c 1 ./redis-server ../redis.conf
結合這上邊三個例子,再看下taskset的manual,就比較清楚了。
OPTIONS
-p, --pid
operate on an existing PID and not launch a new task
-c, --cpu-list
specify a numerical list of processors instead of a bitmask. The list may contain multiple items, separated by comma, and ranges. For example, 0,5,7,9-11.
2、配置nginx綁定cpu
在conf/nginx.conf中
worker-processes 1;
指一個cpu,如有4個u的話,為worker-processes 3;worker-cpu-affinity 0010 0100 1000,分別代碼u 2、3、4的核心
重啟nginx後,3個進程各自用各自的進程。註:此nginx.conf配置參數網上資料
3、刨根問底
4、windows下修改cpu「親和力」
『拾』 如何永久更改某個軟體的處理器相關性
使用Process Lasso,安裝好後讓軟體開機啟動,選擇CPU親和力,很簡單。
我自己一直在用。軟體可到網路搜索
Windows 本身是沒有這個功能的,重啟就會復原,不過這款軟體可以保存不復原。
不需要使用Msconfig 或 組策略。