System Performance 读书笔记 - 操作系统(1)

干货满满张哈希 等级 54 0 0

本系列是针对 Systems Performance: Enterprise and the Cloud, 2nd Edition (2020) 书籍的读书笔记,加入了一些个人理解以及拓展,并且针对一些难以理解的地方提供了一些额外的参考

内核(Kernel)

经典模型中,内核在操作系统结构中的位置如图所示: System Performance 读书笔记 - 操作系统(1)

从里到外分别是:

  • 硬件(Hardware):操作系统运行在的硬件设备。
  • 内核(Kernel):操作系统的核心软件,内核管理着 CPU 调度、内存、文件系统、网络协议以及各种系统设备(磁盘 IO、网络 IO 等等)。通过系统调用提供服务。
  • 系统调用(System Calls):提供访问硬件设备或者内核服务的程序接口。例如 open, close, read, write, ioctl等,需包含头文件unistd.h
  • 系统库(System Libraries):直接用系统调用可能不太方便,我们可以使用封装好的库函数进行编程使用。从图上可以看出,这里其实有个缺口,因为应用也可以不使用系统库而是直接使用系统调用。例如像是 Go 语言运行环境,他就使用了自己封装的系统调用层而不是标准库 libc

目前很多操作系统都在这个模型的基础上做了变种,之后我们会详细分析。

内核执行

经过不断地迭代,内核目前已经非常庞大,有上百万的代码。内核的执行是按需的,例如当用户级别的应用程序发起了系统调用,或者设备发送了一个中断(interrupt)的时候。另外,某些内核线程回异步执行一些维护性的工作,可能包含内核时钟程序以及内存管理任务,但是这些任务都会尽量保持轻量级并只占用很少的 CPU 资源。

像 Web 服务器这种 I/O 密集型的应用(不断的接受请求返回响应),会经常在内核上下文中执行。计算密集型的应用则会尽量不打扰内核,可以不中断地在 CPU 上执行。内核调度器会决定那个线程会运行,哪个会等待,以及调度到哪个 CPU 上。内核会选择硬件缓存更热或者对于这个进程本地性更好的 CPU,来提高性能。

内核态以及用户态

内核态(kernel mode):运行内核程序的时候,CPU 处于的模式即内核态,在这一状态下,设备的一切访问以及各种特权命令执行都是被允许的。内核控制对于设备的访问来实现多进程处理。除非明确指定,否则进程之间或者用户之间的数据是无法互相访问的

用户态(user mode):运行用户程序的时候,CPU 处于的模式。通过系统调用,会从用户态切换到内核态用更高的权限级别执行:

System Performance 读书笔记 - 操作系统(1)

用户态切换到内核态是一种模式切换(mode switch),所有的系统调用都会模式切换,某些系统调用还会上下文切换:遇到硬盘 IO 或者网络 IO 的线程会上下文切换到可以运行的线程。这种切换都是有性能损耗的,一般通过如下几种优化来避免:

  • 用户模式系统调用(User-mode syscalls):可以在用户模式库实现一些系统调用。Linux 通过暴露 virtual dynamic shared object (vDSO)来实现,可以参考:https://man7.org/linux/man-pages/man7/vdso.7.html
  • 内存映射(Memory mappings):用于按需装载内存页(缺页中断),后面还会提到。这样能避免直接访问 IO 造成系统调用。
  • 内核绕开(Kernel bypass):可以让用户态程序直接访问设备,例如 DPDK(Data Plane Development Kit),这里推荐一篇关于 DPDK 的文章
  • 内核态应用:例如运行在内核的 TUX 服务器,以及 BPF(Berkeley Packet Filter). 关于 BPF,有一个著名的基于 BPF 实现的工具集合是:https://github.com/iovisor/bcc

System Performance 读书笔记 - 操作系统(1)

收藏
评论区

相关推荐

Java Monitoring&Troubleshooting Tools
[JDK Tools and Utilities](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fdocs.oracle.com%2Fjavase%2F8%2Fdocs%2Ftechnotes%2Ftools%2Findex.html) ### Monitoring Tools You
(转)60s快速分析Linux性能
  之前在地铁上看到过一篇快速分析Linux系统性能的文章,觉得以后有用,今天就找了一下,转载过来。 原文出处:[http://techblog.netflix.com/2015/11/linux-performance-analysis-in-60s.html](https://www.oschina.net/action/GoToLink?url=ht
Understanding When to use RabbitMQ or Apache Kafka Kafka RabbitMQ 性能对比
Understanding When to use RabbitMQ or Apache Kafka https://content.pivotal.io/rabbitmq/understanding-when-to-use-rabbitmq-or-apache-kafka Performance ----------- Kafka shines her
Oracle Dynamic Performance Views Version 12.2.0.1
Oracle Dynamic Performance Views Version 12.2.0.1 [https://www.morganslibrary.org/reference/dyn\_perf\_view.html](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.m
Oracle更改redo log大小 or 增加redo log组
(1)redo log的大小可以影响 DBWR 和 checkpoint ; (2)arger redo log files provide better performance. Undersized logfiles increase checkpoint activity and reduce performance. 大的log file可以提
CentOS 7设置开机启动服务,添加自定义系统服务
CentOS 7设置开机启动服务 ================ * **建立服务文件** * **保存目录** * **设置开机自启动** * **其他命令** 1.建立服务文件 -------- 文件路径 vim /usr/lib/systemd/system/nginx.service 服务文件内容 1.ngin
Chrome DevTools 之 Performance
今天介绍下 Chrome dev tools 家族的一个小兄弟,它在 Chrome 57 之前叫作「Timeline」,而现在换了个更长的马甲 —— 「Performance」,毕竟名字要「长~~~~~~~~~」更能吸引注意。 也许你曾不经意启动过这个工具,看见里面五颜六色的图表后和我一样头晕目眩。但今天介绍完它后,我相信你能像熟悉瑞士军刀一样熟悉它。
Hibernate 性能优化法则
原文同步至:[http://waylau.com/tips-to-boost-your-hibernate-performance/](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwaylau.com%2Ftips-to-boost-your-hibernate-performance%2
JVM性能调优的6大步骤,及关键调优参数详解
[https://youzhixueyuan.com/jvm-performance-optimization.html](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fyouzhixueyuan.com%2Fjvm-performance-optimization.html) JVM内
Linux系统:Centos7下搭建ClickHouse列式存储数据库
本文源码:[GitHub·点这里](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fgithub.com%2Fcicadasmile%2Flinux-system-base) || [GitEE·点这里](https://gitee.com/cicadasmile/linux-system-
Linux系统:centos7下安装Jdk8、Tomcat8、MySQL5.7环境
本文源码:[GitHub·点这里](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fgithub.com%2Fcicadasmile%2Flinux-system-base) || [GitEE·点这里](https://gitee.com/cicadasmile/linux-system-
MyRocks vs InnoDB 的性能基准测试
导读 > 作者: Vadim Tkachenko > > 原文: > > https://www.percona.com/blog/2018/04/30/a-look-at-myrocks-performance/ > > 翻译:菜鸟盟( hades、bruce、冰焰) **本文建议横屏阅读,效果更佳** * * * In
Redis 的监控指标有哪些?别说你不知道!
### 监控指标 •性能指标:Performance •内存指标: Memory •基本活动指标:Basic activity •持久性指标: Persistence •错误指标:Error ### 性能指标:Performance ![](https://oscimg.oschina.net/oscnet/up-d536aa6949457e7
System Performance 读书笔记 - 操作系统(1)
本系列是针对 书籍的读书笔记,加入了一些个人理解以及拓展,并且针对一些难以理解的地方提供了一些额外的参考 内核(Kernel)经典模型中,内核在操作系统结构中的位置如图所示:从里到外分别是: 硬件(Hardware):操作系统运行在的硬件设备。 内核(Kernel):操作系统的核心软件,内核管理着 CPU 调度、内存、文件系统、网络协议以及各种系统设备