怎么限制cpu

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么限制cpu相关的知识,希望对你有一定的参考价值。

现在很多高端笔记本游戏本都有一个通病,那就是在玩大型游戏和渲染输出视频的时候,CPU会满载运行以至于温度飙升,下面就教大家如何限制cpu频率吧。

1、首先找到控制面板,打开控制面板,打开这个电源选项。

2、这里有三种模式,我这里以高性能模式为例(其他两种模式也步骤一样),点击更改计划设置。

3、然后点击更改高级电源设置。

4、这里选择处理器,依次展开,打开最大处理器状态,限制我们限制的就是这个数值。

5、我们分别将这两个数据都设置为85%,以我的本子为例,处理器最高睿频为3.4Ghz,限制最高性能在85%后最高睿频为2Ghz左右,此时玩游戏是感觉不到任何区别的,但是温度却降下来了,对于那些散热不给力的本本,这个方法可以有效降低CPU高温问题。

拓展资料:

中央处理器(CPU,central processing unit)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。CPU 自产生以来,在逻辑结构、运行效率以及功能外延上取得了巨大发展。

中央处理器主要包括两个部分,即控制器、运算器,其中还包括高速缓冲存储器及实现它们之间联系的数据、控制的总线。电子计算机三大核心部件就是CPU、内部存储器、输入/输出设备。中央处理器的功效主要为处理指令、执行操作、控制时间、处理数据。

在计算机体系结构中,CPU 是对计算机的所有硬件资源(如存储器、输入输出单元) 进行控制调配、执行通用运算的核心硬件单元。CPU 是计算机的运算和控制核心。计算机系统中所有软件层的操作,最终都将通过指令集映射为CPU的操作。
参考技术A 在使用 Docker 运行容器时,一台主机上可能会运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU、内存和磁盘资源。如果不对容器使用的资源进行限制,那么容器之间会互相影响,小的来说会导致容器资源使用不公平;大的来说,可能会导致主机和集群资源耗尽,服务完全不可用。

Docker 作为容器的管理者,自然提供了控制容器资源的功能。正如使用内核的 namespace 来做容器之间的隔离,Docker 也是通过内核的 cgroups 来做容器的资源限制。这篇文章就介绍如何使用 docker 来限制 CPU、内存和 IO,以及对应的 cgroups 文件。

NOTE:如果想要了解 Cgroups 的更多信息,可以参考 Kernel 文档 或者其他资源。

我本地测试的 Docker 版本是 17.03.0 社区版:

使用的是 ubuntu 16.04 系统,内核版本是 4.10.0:

➜ ~ uname -aLinux cizixs-ThinkPad-T450 4.10.0- 28-generic #32~16.04.2-Ubuntu SMP Thu Jul 2010:19:48UTC 2017x86_64 x86_64 x86_64 GNU/Linux

NOTE: 不同版本和系统的功能会有差异,具体的使用方法和功能解释请以具体版本的 Docker 官方文档为准。

我们使用 stress 容器来产生 CPU、内存和 IO 的压力,具体的使用请参考它的帮助文档。

1.CPU资源

主机上的进程会通过时间分片机制使用 CPU,CPU 的量化单位是频率,也就是每秒钟能执行的运算次数。为容器限制 CPU 资源并不能改变 CPU 的运行频率,而是改变每个容器能使用的 CPU 时间片。理想状态下,CPU 应该一直处于运算状态(并且进程需要的计算量不会超过 CPU 的处理能力)。

Docker 限制 CPU Share

Docker 允许用户为每个容器设置一个数字,代表容器的 CPU share,默认情况下每个容器的 share 是 1024。要注意,这个 share 是相对的,本身并不能代表任何确定的意义。当主机上有多个容器运行时,每个容器占用的 CPU 时间比例为它的 share 在总额中的比例。举个例子,如果主机上有两个一直使用 CPU 的容器(为了简化理解,不考虑主机上其他进程),其 CPU share 都是 1024,那么两个容器 CPU 使用率都是 50%;如果把其中一个容器的 share 设置为 512,那么两者 CPU 的使用率分别为 67% 和 33%;如果删除 share 为 1024 的容器,剩下来容器的 CPU 使用率将会是 100%。

总结下来,这种情况下,Docker 会根据主机上运行的容器和进程动态调整每个容器使用 CPU 的时间比例。这样的好处是能保证 CPU 尽可能处于运行状态,充分利用 CPU 资源,而且保证所有容器的相对公平;缺点是无法指定容器使用 CPU 的确定值。

Docker 为容器设置 CPU share 的参数是 -c --cpu-shares,它的值是一个整数。

我的机器是 4 核 CPU,因此使用 stress 启动 4 个进程来产生计算压力:

➜ stress docker run --rm -it stress --cpu 4stress: info: [ 1] dispatching hogs: 4cpu, 0io, 0vm, 0hddstress: dbug: [ 1] usingbackoff sleep of 12000usstress: dbug: [ 1] --> hogcpu worker 4[ 7] forkedstress: dbug: [ 1] usingbackoff sleep of 9000usstress: dbug: [ 1] --> hogcpu worker 3[ 8] forkedstress: dbug: [ 1] usingbackoff sleep of 6000usstress: dbug: [ 1] --> hogcpu worker 2[ 9] forkedstress: dbug: [ 1] usingbackoff sleep of 3000usstress: dbug: [ 1] --> hogcpu worker 1[ 10] forked

在另外一个 terminal 使用 htop 查看资源的使用情况:

从上图中可以看到,CPU 四个核资源都达到了 100%。四个 stress 进程 CPU 使用率没有达到 100% 是因为系统中还有其他机器在运行。

为了比较,我另外启动一个 share 为 512 的容器:

➜ stress docker run --rm -it -c 512stress --cpu 4stress: info: [ 1] dispatching hogs: 4cpu, 0io, 0vm, 0hddstress: dbug: [ 1] usingbackoff sleep of 12000usstress: dbug: [ 1] --> hogcpu worker 4[ 6] forkedstress: dbug: [ 1] usingbackoff sleep of 9000usstress: dbug: [ 1] --> hogcpu worker 3[ 7] forkedstress: dbug: [ 1] usingbackoff sleep of 6000usstress: dbug: [ 1] --> hogcpu worker 2[ 8] forkedstress: dbug: [ 1] usingbackoff sleep of 3000usstress: dbug: [ 1] --> hogcpu worker 1[ 9] forked

因为默认情况下,容器的 CPU share 为 1024,所以这两个容器的 CPU 使用率应该大致为 2:1,下面是启动第二个容器之后的监控截图:

两个容器分别启动了四个 stress 进程,第一个容器 stress 进程 CPU 使用率都在 54% 左右,第二个容器 stress 进程 CPU 使用率在 25% 左右,比例关系大致为 2:1,符合之前的预期。

限制容器能使用的 CPU 核数

上面讲述的 -c --cpu-shares 参数只能限制容器使用 CPU 的比例,或者说优先级,无法确定地限制容器使用 CPU 的具体核数;从 1.13 版本之后,docker 提供了 --cpus 参数可以限定容器能使用的 CPU 核数。这个功能可以让我们更精确地设置容器 CPU 使用量,是一种更容易理解也因此更常用的手段。

--cpus 后面跟着一个浮点数,代表容器最多使用的核数,可以精确到小数点二位,也就是说容器最小可以使用 0.01 核 CPU。比如,我们可以限制容器只能使用 1.5 核数 CPU:

➜ ~ docker run --rm -it --cpus 1.5stress --cpu 3stress: info: [ 1] dispatching hogs: 3cpu, 0io, 0vm, 0hddstress: dbug: [ 1] usingbackoff sleep of 9000usstress: dbug: [ 1] --> hogcpu worker 3[ 7] forkedstress: dbug: [ 1] usingbackoff sleep of 6000usstress: dbug: [ 1] --> hogcpu worker 2[ 8] forkedstress: dbug: [ 1] usingbackoff sleep of 3000usstress: dbug: [ 1] --> hogcpu worker 1[ 9] forked

在容器里启动三个 stress 来跑 CPU 压力,如果不加限制,这个容器会导致 CPU 的使用率为 300% 左右(也就是说会占用三个核的计算能力)。实际的监控如下图:

可以看到,每个 stress 进程 CPU 使用率大约在 50%,总共的使用率为 150%,符合 1.5 核的设置。

如果设置的 --cpus 值大于主机的 CPU 核数,docker 会直接报错:

➜ ~ docker run --rm -it --cpus 8stress --cpu 3docker: Error response fromdaemon: Range of CPUs isfrom0.01to 4.00, asthere are only 4CPUs available.See 'docker run --help'.

如果多个容器都设置了 --cpus ,并且它们之和超过主机的 CPU 核数,并不会导致容器失败或者退出,这些容器之间会竞争使用 CPU,具体分配的 CPU 数量取决于主机运行情况和容器的 CPU share 值。也就是说 --cpus 只能保证在 CPU 资源充足的情况下容器最多能使用的 CPU 数,docker 并不能保证在任何情况下容器都能使用这么多的 CPU(因为这根本是不可能的)。
参考技术B 限制CPU的功率可以在Bios设置,在BIOS里选择CPU选项,然后可以设置其速度或者是进入系统之后进入控制面板,然后选择电池性能高性能就是CPU充分发挥新的节能,就是使CPU取代低功耗模式平衡模式就是使CPU自动选择工号。 参考技术C 一般来说你可以在电脑设置里进行限制CPU。 参考技术D 怎么限制C P U应该是通过电脑定期的清理那个内存得先去洗屁股的你。

以上是关于怎么限制cpu的主要内容,如果未能解决你的问题,请参考以下文章

cefsharp限制cpu使用比例

docker 如何限制和查看container 内存 和cpu

限制java应用程序的内存和cpu使用

Android 进程管理篇(四)-cpu限制

CPU风扇过响,转速过快,ubuntu系统下如何限制?

怎么锁定CPU频率