`

linux 调整CPU程序调度的几种方法

阅读更多

一,使用taskset充分利用多核cpu,让cpu的使用率均衡到每个cpu上

#taskset
-p,    设定一个已存在的pid,而不是重新开启一个新任务
-c,    指定一个处理,可以指定多个,以逗号分隔,也可指定范围,如:2,4,5,6-8。

1,切换某个进程到指定的cpu上
taskset -cp 3 13290

2,让某程序运行在指定的cpu上
taskset -c 1,2,4-7 tar jcf test.tar.gz test

需要注意的是,taskset -cp 3 13290在设定一个已经存在的pid时,子进程并不会继承父进程的,
因此像tar zcf xxx.tar.gz xxx这样的命令,最好在启动时指定cpu,如果在已经启动的情况下,则需要指定tar调用的gzip进程。

二,使用nice和renice设置程序执行的优先级
格式:nice [-n 数值] 命令

nice 指令可以改变程序执行的优先权等级。指令让使用者在执行程序时,指定一个优先等级,称之为 nice 值。
这个数值从最高优先级的-20到最低优先级的19。负数值只有 root 才有权力使。
一般使用者,也可使用 nice 指令來做执行程序的优先级管理,但只能将nice值越调越高。

可以通过二种方式来给某个程序设定nice值:
1,开始执行程序时给定一个nice值,用nice命令
2,调整某个运行中程序的PID的nice值,用renice命令
通常通过调高nice值来备份,为的是不占用非常多的系统资源。

例:
nice -n 10 tar zcf test.tar.gz test

由nice启动的程序,其子进程会继承父进程的nice值。

查看nice值
# nice -n -6 vim test.txt &
# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0 19427  2637  0  75   0 – 16551 wait   pts/6    00:00:00 bash
4 T     0 21654 19427  0  71  -6 – 23464 finish pts/6    00:00:00 vim

renice调整运行中程序的nice值
格式:renice [nice值] PID

三,使用ulimit限制cpu占用时间
注意,ulimit 限制的是当前shell进程以及其派生的子进程。因此可以在脚本中调用ulimit来限制cpu使用时间。
例如,限制tar的cpu占用时间,单位秒。
# cat limit_cpu.sh
ulimit -SHt 100
tar test.tar.gz test

如果tar占用时间超过了100秒,tar将会退出,这可能会导致打包不完全,因此不推荐使用ulimit对cpu占用时间进行限制。
另外,通过修改系统的/etc/security/limits配置文件,可以针对用户进行限制。

四,使用程序自带的对cpu使用调整的功能
某些程序自带了对cpu使用调整的功能,比如nginx服务器,通过其配置文件,可以为工作进程指定cpu,如下:
worker_processes  3;
worker_cpu_affinity 0001 0010 0100 1000;

这里0001 0010 0100 1000是掩码,分别代表第1、2、3、4颗cpu核心,这就使得cpu的使用比较平均到每个核心上。

分享到:
评论

相关推荐

    Linux进程调度程序剖析.pdf

    Linux 进程调度程序的实现主要基于以下几点: 1. 进程的创建和销毁:Linux 通过 fork() 和 exit() 系统调用来创建和销毁进程。 2. 进程的调度:Linux 通过调度器来选择下一个要运行的进程,并将其加入到运行队列中...

    cpu的调度算法

    该资源是一个很好的案例 希望大家能用到!

    一种测试嵌入式Linux调度延迟的方法.pdf

    总结来说,文章提供了一种实用的测试嵌入式Linux调度延迟的方法,深入探讨了调度策略、改进措施以及实际应用效果。这种方法不仅有助于理解Linux调度器的工作机制,也为系统开发者提供了优化实时性能的参考。通过持续...

    linux-进程调度

    Linux的调度策略主要有以下几种: 1. 先进先出(FIFO)调度:按照进程的创建顺序进行调度,最早的进程优先获得CPU。这种调度策略适用于那些执行时间短或需要快速响应的进程。 2. 时间片轮转(Round Robin,RR):...

    Linux进程调度策略分析

    2. **非实时进程调度**:非实时进程采用动态优先级调度策略,主要包括以下几种方法: - **SCHED_NORMAL**:采用CFS(Completely Fair Scheduler)完全公平调度器,确保所有进程都能获得公平的CPU时间份额。 - **...

    linux进程调度策略

    进程调度发生在以下几种情况下: 1. **进程状态变化**:当进程从运行状态变为阻塞状态或反之时。 2. **时间片到期**:进程使用完分配给它的CPU时间后。 3. **系统调用返回**:系统调用完成后。 4. **中断处理**:...

    Linux+性能调优的几种方法

    ### Linux性能调优的几种方法 #### 一、关闭Daemons(后台服务) 在Linux系统中,有许多后台服务(daemons)默认会被启动,这些服务可能会占用一定的系统资源,包括CPU和内存。对于某些特定用途的服务器来说,并非...

    Linux课程设计 模拟cpu调度算法

    本项目“Linux课程设计 模拟cpu调度算法”聚焦于这一核心领域,通过C语言实现了几种经典的CPU调度算法,包括先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)以及抢占式调度算法。 首先,我们来了解一下...

    Linux超线程感知的调度算法研究

    Linux超线程感知的调度算法研究是针对Intel的Hyper-Threading Technology进行的一种优化技术,旨在提升处理器在Linux操作系统下的性能。超线程技术是Intel在2002年推出的一种微处理器架构,它通过共享处理器资源,...

    Linux内核的进程调度原理及改进算法研究.pdf

    Linux内核中的进程调度依赖于task_struct结构中的几个关键字段,包括policy(调度策略)、priority(静态优先级)、counter(剩余时间片)和rt_priority(实时优先级)。调度器根据这些参数来计算进程的动态优先级,...

    Linux性能调优的几种方法

    本文将介绍Linux性能调优的几种方法,这些方法涉及内核、系统、网络等多个层面。 首先,Linux性能调优的第一种方法是Disabling daemons(关闭守护进程,简称daemons)。守护进程是Linux系统中运行在后台的一类进程...

    CPU调度算法

    本文将详细讨论几种常见的CPU调度算法,包括先来先服务(FCFS)、轮转(RR)以及多级反馈队列(MLFQ)。这些算法在不同的场景下有不同的优势和适用性,对于理解和优化系统的性能至关重要。 ### 先来先服务(First-...

    Linux-性能调优的几种方法.docx

    4. **处理器子系统调优**:包括设置CPU亲和性,调整CPU调度器,以及优化中断处理。例如,通过`taskset`命令可以指定进程运行在哪个CPU上,而`nice`和`renice`则用于控制进程优先级。 5. **内存子系统调优**:涉及...

    cpudiaodu.rar_CPU 调度_cpu调度代码_visual c

    CPU调度主要分为以下几个层次: 1. **抢占式调度**:这是大多数现代操作系统采用的方式,允许高优先级的进程中断当前运行的低优先级进程。在“cpudiaodu.txt”中,可能包含了关于如何实现这种机制的代码示例。 2. ...

    linux下 多线程模拟进程调度多线程模拟进程调度

    进程调度是操作系统核心的关键组成部分,负责决定哪个进程应该获得CPU的执行权,以及何时进行切换。而通过多线程模拟进程调度,我们可以更好地理解和实现这种机制。 在Linux中,线程是轻量级进程(LWP,Lightweight...

    Linux下的基本命令和模拟进程调度

    Linux采用了几种不同的调度策略: 1. **先来先服务(FCFS)**:按照进程到达的顺序进行调度,简单但可能导致短进程等待时间过长。 2. **短进程优先(SPF)**:优先选择预计运行时间短的进程,能提高系统响应时间,...

    linux内核分析之调度算法参照.pdf

    这种模块化结构被称为调度器类,它允许同时存在多种可动态添加的调度算法,每种调度器都有自己的优先级,当有可执行进程时,优先级最高的调度器会选择下一个运行的程序。 在Linux中,主要存在两种调度算法:完全...

Global site tag (gtag.js) - Google Analytics