RHCA rh442 005 (NICE FIFO RR) 资源强占与分配 cpuset
cgroup 容器 控制服务访问
limits 控制用户
进程管理
[root@servera ~]# ps -aux | more
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.7 180944 13844 ? Ss 08:06 0:03 /usr/lib/systemd/systemd --switc
hed-root --system --deserialize 17
root 2 0.0 0.0 0 0 ? S 08:06 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 08:06 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 08:06 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< 08:06 0:00 [kworker/0:0H-kblockd]
root 8 0.0 0.0 0 0 ? I< 08:06 0:00 [mm_percpu_wq]
root 9 0.0 0.0 0 0 ? S 08:06 0:00 [ksoftirqd/0]
root 10 0.0 0.0 0 0 ? I 08:06 0:00 [rcu_sched]
%CPU cpu使用率
%MEM 内存使用率
VSZ 虚拟内存 需要多少内存 (申请内存)
RSS 真实内存 真实消耗多少内存 (真实分配)
TTY 终端 (pts伪终端 图形界面 远程连接 打开一个就增加1 pts/2..3)
STAT 状态 (I 交互 S 睡觉 < 进程优先级)
START 启动时间
TIME 持续时间(一会运行一会sleep那么,重新计算time)
[root@foundation0 ~]# ps -axo %cpu,%mem,pid,command,psr
man ps 是可以查看到加什么参数
nice fifo rr
希望进程得到更多资源,以前为nice值
nice调整进程优先级
取值范围
-20 ~ 19 数字越小优先级越高
默认优先级为0 大家都一样
renice -20 pid
资源紧张时,资源优先级才有意义
反正没人抢资源,优先级就体现不出价值
nice -n -15 ./xxx &
指定优先级运行命令
FIFO 先进先出
RR 轮询
之前绝大多是进程都属于other (nice之类)
静态优先级 1 ~ 99 FIFO RR 贵族
动态优先级: -20 ~ 19 (以前)
静态优先级 完全碾压 动态
静态优先级 数字越大优先级越高
1~99 贵族
100~139 平民
静态怎么比都比不过动态
chrt = change real time
FIFO: 先进先出特别消耗资源
这个任务不结束其他人用不了
如果一个更高优先级要启动,那么就开始强占
这个程序就会排到队列
RR: 和FIFO相同 但是RR会分配一个CPU时间片
优先级越高,分到的时间片越多
40个进程只有4个cpu,平均给40个进程分配时间
3分钟给你去买火车票,时间片用完,就排到队列最后面,管你买没买完
你开了10个后台程序, 他们会分到时间片。但你感觉都在运行
优先级越高得到时间越长
红帽7先进先出 消耗资源会卡死
红帽8却不会
运行4个dd dd if=/dev/zero of=/dev/null &
查看他们状态
因为他们优先级都一样,所以会互相分配资源
如果调整nice,那么高优先级会立马强占资源
导致机器很卡
other通过renice 给到了更多的时间片
chrt -f 10 dd if=/dev/zero of=/dev/null &
如果是先进先出,则就是吃独食,吃饱了才能让出时间片
红帽8
给出两个恰独食的命令却不会像7一样卡
chrt -f 10 dd if=/dev/zero of=/dev/null &
红帽8引入了CFS Completely Fair Scheduler
完全公平原则
就是你优先级高,你可以得到更多时间。(红帽7是活不了,会卡住)但是不能让其他优先级不能活,不能让系统卡
kernel.sched_min_granularity_ns
[root@servera proc]# sysctl -a | grep ns | grep min
kernel.sched_min_granularity_ns = 10000000
最少让每个进程得到10ms时间
进程不足这个时间,就不会被踢掉
kernel.sched_latency_ns
[root@servera proc]# sysctl -a | grep ns | grep late
kernel.sched_latency_ns = 12000000
让每个进程在这个周期内(12ms)运行一次
12ms 有10个进程就得12 / 10 每个进程运行一会儿
周期可变
在系统当中设置每一个进程至少得到10ms CPU时间
设置一个cpu调度周期,比如120ms,如果有10个进程,不考虑优先级,那么一位置每个进程得到12ms CPU时间 就可以满足第一个需求。
如果考虑优先级,有些可能得到20ms。有些只能得到10ms(保证10ms)。如果说进程数量有20个。每个进程至少得到10ms,那就意味一个CPU的调度周期需要200ms,周期可以变
可能会超过调度周期12000000,以下面的公式为准,小于调度周期还是认定这个参数kernel.sched_latency_ns
CPU 最小时间 * 进程数 = CPU调度周期
kernel.sched_rt_period_us = 1000000
kernel.sched_rt_runtime_us = 950000
[root@servera proc]# sysctl -a | grep rt| grep us
kernel.sched_rt_period_us = 1000000
kernel.sched_rt_runtime_us = 950000
1秒和0.95秒
如果以1秒为周期,实时优先级的进程最多只能使用0.95秒,剩下的0.05秒用于非实时进程使用
实时优先级怎么得能抢过非实时优先级
规矩则定下,让出一部分给非实时进程
cfs不要让进程处于饥饿状态,得不到进程时间(死机)
分多少给非实时进程呢,设置上面一个950000就可以
红帽8其他进程也属于other other和RR FIFO没法比较。 FIFO可能会更霸道一些,吃完才走。RR还是会考虑分时间片
将静态优先级改回实时
chrt -p -o 0 (pid)
如果两个进程,其中一个设置为fifo,且优先级也为10,另外一个设置为RR优先级也为10,则fifo优先级更高
chrt -r 10 dd if=/dev/zero of=/dev/null &
红帽8敲三个,还OK
top显示三个
fifo运行三次
top只会出现两个
第三个在后面排队
0.05还是会给非实时进程留下
但是实时进程 fifo rr还是有区别
fifo 上厕所,上完了才能出来
rr 可能一人上2分钟,上没上完不晓得
指定资源给进程使用
进程拥有cpu访问时间
进程有可能跑到不同cpu运行
一个程序运行时,他会在不同cpu上运行
一个cpu在同一时刻只能处理一个任务,那么当有多个任务运行时,就会产生运行队列,如果一个进程在运行时,会均衡运行在OS(操作系统)的多个cpu上
watch -n 1 'ps axo %cpu,%mem,pid,comm,psr | grep -w cp'
让每个cpu负载,差不多,不会说一个人忙死,其他cpu不管闲
cpu会有缓存 循环语句
一个程序运行,背后肯定有各种循环支撑
cpu之间负载均衡当然好,但
依赖缓存的程序,就不能让它到处跑
指定虚拟机运行在哪两个cpu上以提高缓存的命中率(加快速度)
进程喜欢在cpu上面跳来跳去是吧,taskset可以使进程老实在一个cpu上
[root@foundation0 ~]# cp -r /usr/ /tmp/ &
[1] 8640
[root@foundation0 ~]# taskset -p 1 8640
pid 8640's current affinity mask: 3f
pid 8640's new affinity mask: 1
[root@foundation0 ~]# taskset -p 8640
就是3f 是在6个cpu里面乱蹦
1 2 1 2 4 8 cpu的六个代号 1和2里面蹦
指定3
我给他指定1就只能在第一个cpu 0号cpu上跑
增加缓存命中率
[root@foundation0 ~]# watch -n 1 'ps axo %cpu,%mem,pid,comm,psr | grep -w cp'
这个命令可以查看过程
那这样做下次开机就不会生效
把命令做成服务,改配置文件
在服务里做成脚本
或者写在tuned里
tuned.conf
taskset -p 3 $(pidof firefox)
默认情况进程在所有的处理器上都是均衡的
每个处理器利用率是相同的,但是不能提升缓存命中率。反之可以提高缓存命中率,但是牺牲处理器的均衡
数据库sql语句都是循环,得把他放到指定的处理器上,提高命中率
即使我们指定某一个程序运行在特定的cpu上,但是这个处理器上依然有其他程序在运行,我们希望这个处理器是干净的,没有任何程序在上面运行
/root/grub2/grub2.cfg 在内核中修改参数
isolcpus = 0,1
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet isolcpus=0,1"
grub2-mkconfig -o /boot/grub2/grub.cfg
启动时,启动后。所有程序运行在0,1上。后面可以指定程序在2,3上
我给你占位置,人在多,我都会给你把位置站着
cpuset
根cpuset包含所有资源
子cpuset可以嵌套
一个cpu组称之为cpuset
每一个组称之为调度域
在cpuset下创建子文件夹
设置他运行在2-3号cpu和0号内存域
当我将14428这个pid导进子文件夹时,父文件夹的pid就会消失(因为你给他设置了特点的cpuset)
他从使用父文件的资源cpuset的资源变成使用子文件的
这不比那个指定cpu的taskset厉害一些,指定给你把环境换了
这个echo立即生效
这个内存0,因为我的系统没有设置numa的内存zone,所以只有0
这个支持嵌套,比如说父cpu用了0-1,那么子cpu的环境也可以用0-1
[root@foundation0 supermao]# cat cpuset.mem_exclusive
0
[root@foundation0 supermao]# cat cpuset.cpu_exclusive
0
[root@foundation0 supermao]# pwd
/sys/fs/cgroup/cpuset/supermao
[root@foundation0 supermao]#
这里有可打开互斥
0 可以嵌套 1 就是互斥,不可以嵌套了
我这个cpuset用过其他cpuset也能用
8个numanode,里面包含cpu和内存,可惜我没8个
numa为一个架构
numa就是将资源拆开,进行相互交换互通。就像道路一样,几条很长的道路容易堵车。但是,把冗长的道路打的四通八达就好一些
演示使用调优工具指定服务运行在特定的cpuset
[root@servera supermao12]# pwd
/usr/lib/tuned/supermao12
[root@servera supermao12]# ls
hello.sh tuned.conf
[root@servera supermao12]# cat hello.sh
#!/bin/bash
mkdir /sys/fs/cgroup/cpuset/rh442
echo 0 > /sys/fs/cgroup/cpuset/rh442/cpuset.cpus
echo 0 > /sys/fs/cgroup/cpuset/rh442/cpuset.mems
echo $(pidof vsftpd) > /sys/fs/cgroup/cpuset/rh442/tasks
[root@servera supermao12]# tail -n 5 tuned.conf
vm.swappiness = 10
[my_script]
type=script
script=hello.sh
[root@servera supermao12]#
这个sys/fs/cgroup/cpuset是不是太长了
[root@servera cpuset]# cd
[root@servera ~]# mkdir /cpuset
[root@servera ~]# cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev ramfs
nodev bdev
nodev proc
nodev cpuset
nodev cgroup
nodev cgroup2
nodev tmpfs
nodev devtmpfs
nodev configfs
nodev debugfs
nodev tracefs
nodev securityfs
nodev sockfs
nodev dax
nodev bpf
nodev pipefs
nodev hugetlbfs
nodev devpts
nodev autofs
nodev pstore
nodev mqueue
nodev selinuxfs
nodev rpc_pipefs
xfs
[root@servera ~]# cat /proc/filesystems | grep cpuset
nodev cpuset
[root@servera ~]# mount -t cpuset nodev /cpuset/
[root@servera ~]# cd /cpuset/
[root@servera cpuset]# ls
cgroup.clone_children cpuset.cpus cpuset.mem_hardwall cpuset.memory_spread_page cpuset.sched_relax_domain_level tasks
cgroup.procs cpuset.effective_cpus cpuset.memory_migrate cpuset.memory_spread_slab notify_on_release
cgroup.sane_behavior cpuset.effective_mems cpuset.memory_pressure cpuset.mems release_agent
cpuset.cpu_exclusive cpuset.mem_exclusive cpuset.memory_pressure_enabled cpuset.sched_load_balance rh442
[root@servera cpuset]#
这非常有意思,就是说那些目录都是映射上去的。我也可以把官方目录简化,设备上的cpuset 映射到了自己创建的文件夹下。其他也可以这么干,甚至可以写到etc/fstab
nodev /cpuset cpuset defalts 0 0
执行mount命令可以看到红帽是怎么干的
[root@servera /]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=912516k,nr_inodes=228129,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime,seclabel)
bpf on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,net_cls,net_prio)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpu,cpuacct)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,rdma)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,freezer)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,blkio)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuset)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/vda1 on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=31,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=14095)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel,pagesize=2M)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
debugfs on /sys/kernel/debug type debugfs (rw,relatime,seclabel)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=187292k,mode=700)
nodev on /cpuset type cgroup (rw,relatime,seclabel,cpuset)
ftp使用了哪个cpuset呢?
[root@servera /]# pidof vsftpd
812
[root@servera /]# cd /proc/812/
[root@servera 812]# cat cpuset
/rh442
[root@servera 812]#
我在内存中创建文件夹
[root@foundation0 cpuset]# pwd
/sys/fs/cgroup/cpuset
rmdir rh442
这个东西可以用删除内存的文件
容器时代,指定容器利用哪些资源
容器很容易吃光资源
rc.local开机脚本有可能不生效,而且有点过时
加倍努力吧
RHCA rh442 005 (NICE FIFO RR) 资源强占与分配 cpuset的更多相关文章
- 使用Folx智能速控功能,确保带宽资源的合理分配
市面上的大部分下载软件,都会配备速度控制的功能,用于限制下载任务的带宽占用.但除此之外,Folx专业版还提供了更加智能化的速度控制功能,用户可以为速控指定更加详细的条件,比如程序限制条件.时间限制条件 ...
- Linux进程管理 (9)实时调度类分析,以及FIFO和RR对比实验
关键词:rt_sched_class.SCHED_FIFO.SCHED_RR.sched_setscheduler().sched_setaffinity().RR_TIMESLICE. 本文主要关注 ...
- YARN资源调度策略之Capacity Scheduler
背景 yarn默认使用的是最简单的FIFO调度器,即一个default队列,所有用户共享,分配资源也是先到先得,没有优先级之分.有时一两个任务就把资源全占了,其他任务吃不到资源造成饥饿,显然这样的资源 ...
- YARN中FIFO、Capacity以及Fari调度器的详细介绍
(1)FIFO Scheduler 将所有的Applications放到队列中,先按照作业的优先级高低.再按照到达时间的先后,为每个app分配资源.如果第一个app需要的资源被满足了,如果还剩下了资源 ...
- 利用yarn capacity scheduler在EMR集群上实现大集群的多租户的集群资源隔离和quota限制
转自:https://m.aliyun.com/yunqi/articles/79700 背景 使用过hadoop的人基本都会考虑集群里面资源的调度和优先级的问题,假设你现在所在的公司有一个大hado ...
- FIFO的使用总结
使用FIFO积累 FIFO是在FPGA设计中使用的非常频繁,也是影响FPGA设计代码稳定性以及效率等得关键因素.我总结一下我在使用FIFO过程中的一些心得,与大家分享. 我本人是做有线 ...
- Hadoop YARN 调度器(scheduler) —— 资源调度策略
本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/hadoop_yarn_resource_scheduler 搜了 ...
- 玩转Unity资源,对象和序列化(上)
这是一系列文章中的第二章,覆盖了Unity5的Assets,Resources和资源管理 本文将从Unity编辑器和运行时两个角度出发,主要探讨以下两方面内容:Unity序列化系统内部细节以及Unit ...
- Oracle资源管理器(二)-- 创建和使用数据库资源计划
(参考 http://blog.csdn.net/mrluoe/article/details/7969436 -- 整理并实践通过) 第1步,创建3个用户 SQL> create user s ...
- mesos资源动态分配测试
测试集群配置 60CPU,320G RAM 测试内容:先运行一个需要60CPU的Application1,再运行一个需要50CPU的Application2. 结果分析 如果要等Application ...
随机推荐
- 【jetson nano】烧录系统
烧录固件 烧录固件是为了让板子用tf卡作为系统启动(非板载启动),一般来说只需要刷写一遍. 安装vm,找到虚拟机镜像,解压part01就能获取镜像. 打开vm,打开此虚拟机镜像,账号clb,密码为12 ...
- RabbitMQ 进阶使用之延迟队列 → 订单在30分钟之内未支付则自动取消
开心一刻 晚上,媳妇和儿子躺在沙发上 儿子疑惑的问道:妈妈,你为什么不去上班 媳妇:妈妈的人生目标是前20年靠父母养,后40年靠你爸爸养,再往后20年就靠你和妹妹养 儿子:我可养不起 媳妇:为什么 儿 ...
- mkfs.xfs报错 mkfs.xfs: /dev/new/new_box appears to contain an existing filesystem (ext4). mkfs.xfs: Use the -f option to force overwrite.
在设置逻辑卷文件类型时候报错 mkfs.xfs: /dev/new/new_box appears to contain an existing filesystem (ext4). mkfs.xfs ...
- js字符串类型
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- elementUI slider组件,带范围选择实现双向绑定
网上查过很多相关文章都没有一章是写element ui滑块带范围实现双向绑定 二个滑块二头的数据怎么得到 我的需求是做个时间轴要滑动选择不同的时间 开始很难做最后一点一点摸索得出的结论 好在写出来了先 ...
- idea设置jdk和设置文件编码格式utf-8
1.idea设置jdk 2.idea设置文件编码格式utf-8 create utf-8 files with NO BOM 不要更改,否则编译会出错误.
- unity持久化数据之XML和Excel
unity持久化数据之XML public class XMLDataMananger: Singleton<XMLDataMananger> { protected XMLDataMan ...
- 哈啰面试:说说Dubbo运行原理?
Dubbo 是一款高性能.轻量级的开源 RPC(远程过程调用)框架,主要用于构建分布式服务和微服务架构.那 Dubbo 又是如何运行的呢?让我们一起来看. 1.核心组件 要说 Dubbo 运行流程就不 ...
- zabbix---监控Oracle12c数据库
使用插件:orabbix用于监控oracle实例的zabbix插件 orabbix插件下载地址:http://www.smartmarmot.com/product/orabbix/download/ ...
- pycharm中运行jupyter notebook
进入anaconda prompt,进入对应的虚拟环境 输入jupyter notebook,找到路径和token 这两个随便复制一个,注意是包括token也要复制到 然后打开pycharm,并建立一 ...