菜鸟学Linux 第110篇笔记 CPU

简介:

菜鸟学Linux 第110篇笔记 CPU 



内容总览

cpu

进程

查看和调整linux 进程优先级




计算机原理


PAE (physical address extention)


cpu 

32bit 支持内存寻址空间 2^32=4G

64bit 支持内存寻址空间 4G*4G 

寄存器

一级缓存 cpu每个核独有

二级缓存 cpu每个核独有

三级缓存 核心共有


write through 通写

write back 回写 只有当缓存的数据要被替换时,才会将缓存的数据回写到RAM


interrupt controller 中断控制器 用来将外部的设备紧急信息通知给cpu使其停止正在做的事情

来处理外部设备所发来的信息,分为两步,一步是cpu指挥将数据读到内存,另一步

是查看其所发来的信息是否需要紧急处理,如紧急则需要立即处理


AGP 显卡 与cpu交互比较频繁


PCI-E 高速总线接口


IO port 65535个 硬件在开机时所分配的端口,cpu用来区分其不同的硬件 数据交互


单进程最大寻址为3G 剩下1G给内核


临界区 容易发生资源争用的地方


DMA direct memory access 直接内存访问


process 一个独立运行单位

系统资源: cpu时间 存储空间


OS VM 虚拟机

虚拟cpu 时间,切片 将cpu的运行时间切片

缓存:当前程序数据

内存: 线性地址 --> 物理地址 空间映射


进程切换:保存现场、恢复现场




linux 操作系统


进程


进程描述符 (元数据)


双向链表


context switch 上下文切换(进程切换)


linux 支持进程抢占CPU运行

系统时钟:时钟tick  

时间解析度 100Hz 1000Hz 时钟中断即每一次tick便可抢占cpu


linux进程类别

交互式进程(I/O) 时间片长,优先级低

批处理进程(CPU) 时间片短,优先级高

实时进程(Real-time)


linux 优先级 priority

实时优先级:1-99 数字越小,优先级越低

静态优先级:100-139 数字越小,优先级越高 

nice值调整静态优先级-20~19 用户空间进程一般为120 所以当nice为-20 其优先级为100

实时优先级比静态优先级高


动态优先级 是内核用来临时性的调整一些用户空间进程的优先级,当某些用户空间进程长时

   间未得到cpu运行时间片时,来将其调高,使其在cpu上运行一次,或某些进程

   得到的cpu运行时间片太多,来调低其优先级,使其降低得到的cpu运行时间片

   或运行时长

   dynamic priority = max (100, min ( static priority - bonus + 5), 139)

   bonus: 0-10


查看linux 进程优先级

# ps -e -o class,rtprio,pri,nice,cmd

cmd显示为加中括号表示是内核线程


手动调整优先级

100-139: nice|renice 调整用户空间进程

nice (run a program with modified scheduling priority)

# nice N COMMAND (针对未启用的)


renice (alter priority of running processes)

# renice -n # PID (针对已经运行的进程)


chrt -p [prio] COMMAND


1-99: chrt (manipulate real-time attributes of a process) 调整实时优先级

chrt [options] prio command [arg]... (未启动的)

        chrt [options] -p [prio] pid (启动的进程)

           -f, --fifo

               set scheduling policy to SCHED_FIFO

       -r, --rr

              set scheduling policy to SCHED_RR (the default)  

       -p, --pid

              operate on an existing PID and do not launch a new task


        # chrt -f -p [prio] PID

        # chrt -r -p [prio] PID

        # chrt -f <prio> COMMAND




linux 内核调度类别

实时进程

SCHED_FIFO   FIFO(first in first out) 先到先运行

SCHED_RR  RR(round robin) 轮调,轮到该进程,则运行该运行

SCHED_Other  用户调度用户空间进程100-139

SCHED_BATCH

SCHED_IDLE


linux 调度进程在cpu上运行的算法O(1)和CFS(Complete Fair Scheduler)

O(1)算法 用来实现静态和实时优先级的进程在cpu运行时间片上分配公平,不能让优先级高

的进程一直在占用cpu,而导致优先级低的进程因为无法得到cpu运行时间片而饿死呵呵。

原理:它是将多个优先级的每个优先级分为两个队列,一个为即将调度的另一个为当

即将高度的进程在cpu运行完后将其放到此队列里(过时队列),内核在决定下一个要来

cpu运行的进程时,扫描顺序99~1,100~139如当优先级高的即将运行队列里有则会将其

队列里的每一个都运行,运行时间片完成后如果后续还需要再运行的则将其放到过时队

列里,然后再扫描优先级比其低的队列,如果有和上述运行规则相同,当一轮运行结束

后,即运行到最后一个优先级队列里,并且将所有的即将运行的进程运行完成后,内核

会将过时队列切换为即将即行队列,而刚刚为即将运行的队列切换为过时队列,这样内

核便会再次扫描运行队列里的进程,执行的顺序和上相同,不再重述。


CFS调度算法 也是一个进程合理公平化的使每个进程都能得到cpu运行时间片的一个调度机制



CPU 

rhel 6.4 tick less 无滴答

interrupt-driven

硬中断

软中断


深度睡眠


一级缓存 I1 (Instruct 1)1级指令缓存 D1(data 1)1级数据缓存


smp 对称多处理器  一块主板有多个cpu 插槽(socket)


cpu访问内存至少需要三个时间周期

1.向内存控制器寻求内存地址(寻址)

2.找到内存地址并施加一些请求机制(锁机制)

3.对内存进行访问(读写操作)


numa   每个cpu都有自己的内存访问区域,非一致性内存访问



CPU affinity cpu姻亲关系

将某程序直接绑定到某颗cpu或某个核心上,让其只在此核心上运行,从而不会交叉内存访问


命令numa实现绑定进程至某cpu上

numactl (临时调整cpu绑定进程)

numad   (永久调整cpu)

numastat  


taskset 绑定进程至某cpu上

# taskset -p mask pid

# taskset -p 0x00000003 101

# taskset -c 1,2 101


将中断请求绑定在非隔离的cpu上,从而避免那些隔离的cpu处理中断程序

echo CPU_MASK > /proc/irq/<irq number/smp_affinity

sysstat  工具包

dstat  工具包

查看cpu 负载状态Load average

sar -q

top

w

uptime

vmstat 1 5


查看cpu使用率 utilization

mpstat 1 2

sar -P ALL 1 2

iostat -c 1 2

/proc/stat

dstat 

--top-cpu

--top-mem

--top-io

本文转自Winthcloud博客51CTO博客,原文链接http://blog.51cto.com/winthcloud/1923609如需转载请自行联系原作者


Winthcloud

相关文章
|
3月前
|
机器学习/深度学习 算法 测试技术
深度学习环境搭建笔记(二):mmdetection-CPU安装和训练
本文是关于如何搭建深度学习环境,特别是使用mmdetection进行CPU安装和训练的详细指南。包括安装Anaconda、创建虚拟环境、安装PyTorch、mmcv-full和mmdetection,以及测试环境和训练目标检测模型的步骤。还提供了数据集准备、检查和网络训练的详细说明。
168 5
深度学习环境搭建笔记(二):mmdetection-CPU安装和训练
|
3月前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
195 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
5月前
|
缓存 监控 Linux
在Linux中,如何看当前系统有几颗物理CPU和每颗CPU的核数?
在Linux中,如何看当前系统有几颗物理CPU和每颗CPU的核数?
|
2月前
|
缓存 监控 Linux
|
2月前
|
缓存 Linux
揭秘Linux内核:探索CPU拓扑结构
【10月更文挑战第26天】
57 1
|
2月前
|
缓存 运维 Linux
深入探索Linux内核:CPU拓扑结构探测
【10月更文挑战第18天】在现代计算机系统中,CPU的拓扑结构对性能优化和资源管理至关重要。了解CPU的核心、线程、NUMA节点等信息,可以帮助开发者和系统管理员更好地调优应用程序和系统配置。本文将深入探讨如何在Linux内核中探测CPU拓扑结构,介绍相关工具和方法。
38 0
|
3月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
120 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
5月前
|
Unix Linux 开发工具
linux笔记 diff及patch的制作与使用
这篇文章是关于Linux系统中使用`diff`命令生成补丁文件以及使用`patch`命令应用这些补丁的详细教程和实战案例。
139 2
linux笔记 diff及patch的制作与使用
|
4月前
|
机器学习/深度学习 人工智能 算法
AI计算机视觉笔记十一:yolo5+Deepsort实现目标检测与跟踪(CPU版)
DeepSORT是一种基于深度学习的计算机视觉跟踪算法,扩展了SORT算法,通过添加外观描述符减少身份切换,提高跟踪效率。本文档提供了DeepSORT环境搭建步骤,包括创建虚拟环境、安装依赖及解决常见错误等,最终实现人员和车辆的跟踪计数功能。适合无GPU设备的学习者参考。
|
5月前
|
监控 Linux
性能分析之 Linux 系统中 ps&top 中 CPU 百分比不一致?
【8月更文挑战第18天】性能分析之 Linux 系统中 ps&top 中 CPU 百分比不一致?
268 5