
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 scheduler.
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 scheduling
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 &
很多时候,我们在部署服务时,为了提高性能,降低程序在使用多个CPU时上下文切换的性能损耗,一般会采用进程绑定CPU的 *** 作。
但在使用Redis时,我们不建议这么干,原因如下。
绑定CPU的Redis,在进行数据持久化时,fork出的子进程,子进程会继承父进程的CPU使用偏好,而此时子进程会消耗大量的CPU资源进行数据持久化,子进程会与主进程发生CPU争抢,这也会导致主进程的CPU资源不足访问延迟增大。
所以在部署Redis进程时,如果需要开启RDB和AOF重写机制,一定不能进行CPU绑定 *** 作!
上面提到了,当执行AOF文件重写时会因为fork执行耗时导致Redis延迟增大,除了这个之外,如果开启AOF机制,设置的策略不合理,也会导致性能问题。
开启AOF后,Redis会把写入的命令实时写入到文件中,但写入文件的过程是先写入内存,等内存中的数据超过一定阈值或达到一定时间后,内存中的内容才会被真正写入到磁盘中。
AOF为了保证文件写入磁盘的安全性,提供了3种刷盘机制:
当使用第一种机制appendfsync always时,Redis每处理一次写命令,都会把这个命令写入磁盘,而且这个 *** 作桥肆旅是在主线程中执行的。
内存敏凳中的的数据写入磁盘,这个会加重磁盘的IO负担, *** 雹升作磁盘成本要比 *** 作内存的代价大得多。如果写入量很大,那么每次更新都会写入磁盘,此时机器的磁盘IO就会非常高,拖慢Redis的性能,因此我们不建议使用这种机制。
与第一种机制对比,appendfsync everysec会每隔1秒刷盘,而appendfsync no取决于 *** 作系统的刷盘时间,安全性不高。因此我们推荐使用appendfsync everysec这种方式,在最坏的情况下,只会丢失1秒的数据,但它能保持较好的访问性能。
当然,对于有些业务场景,对丢失数据并不敏感,也可以不开启AOF。
中断,也就是IRQ全称为Interrupt Request,通过中断,外设可以取得CPU的处理时间。修改中断号可以提高网速简单两步实现网速有所提高:
第一步:搞清楚你的的网卡在PC中到底占了那个“中断号”:
方法:开始→设置→控制面板→系统→硬件→设备管理器→网络适配器
右键点击“网络适配器”下的具体物理名称,点击“属性”,点击“资源”,就可以看到你的的网卡在PC中到底占了那个“中断号”了!
看到你的的网卡在PC中到底占了那个“中断号”的另外的两个方法:
另外方法1:开始——程序——附件——系统工具——系统信息
另外方法2:开始——运行——输入“msinfo32.exe”回车——系统信息
(注:如果已经执行过服务优化策略,请从“开始——设置——控制面板——管理工具——服务”中 启用“help and supprot”帮助和支持的服务宏锋!)
现在衡早到“系统信息”了,选“硬件资源——IRQ”,也可以看到你的的网卡在PC中到底占了那个“中断号”了!
你的网卡“中断号”是多少,我的是“IRQ18”,不过我的声卡跟它同占一个中断,如果你的也这样子,只要不发生冲突也没什么问题,当然,网卡独占一个是最好的!
第二步:已经知道自己网卡的“中断号”之后,现在来给它固定一个内存大小。
方法:开始——运行——输入“sysedit.exe”回车,现在进入“系统配置编辑器”了
会d出多个窗蔽拦晌口,也许也会有提示信息,不要管,确认就可以。
然后,切换到system.ini文件,然后找到“[386enh]”段落,在下面加上“IRQ18=6144”,(我的是IRQ18,内存512M。你的自己刚才已经知道,不要填错了!256M及以下内存的为2048,4096是对应256M以上的内存,512M以上为6144,太大了也没必要,所说内存为PC物理内存)
最后保存该文件,重新启动系统。
这样就可提高ADSL Modem的速度了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)