Linux内核策略介绍
Linux内核策略介绍学习笔记
主要内容
| 硬件 | 策略 |
|---|---|
| CPU | 进程调度、系统调用、中断 |
| 内存 | 内存管理 |
| 外存 | 文件IO |
| 网络 | 协议栈 |
| 其他 | 时间管理 |

进程调度
内核的运行时间
系统启动、中断发生、系统调用以及内核线程。
进程和线程的区别
- 在linux中,底层都是调用clone函数。
- 进程创建为60~8000次/s,线程为5~10w/s
- 进程创建调用fork(),主要瓶颈在页表复制,如果一个进程没有访问内存,页表共享的内存栈不需要复制页表。(例如:一个网络处理服务,只是收到包,fork进程进行内存访问,性能应该在一万左右,但是如果主进程简单做一些处理的话,性能就会下降为一千左右。)
- 线程创建调用pthread_create(),主要瓶颈在堆栈(8k)分配上,如果并发线程增多1w时约为5w
- 并发性能CPU切换,进程30~100w/s,线程50~150w/s
- 内存消耗,进程要比线程更消耗内存(3~N倍)
进程调度
- sched_yield更细粒度让出cpu
- 各个核都有自己的运行队列
- 就近balance原则,运行clone、wakeup的进程就在该核
- CPU绑定函数sched_setaffinity
中断
- 通过/proc/interrupt查看中断
- 中断主要来源于时钟、网卡、硬盘
- 通过/proc/irq/N/smp_affinity查看在那个核
- 调度顺序:硬中断调度->软中断->进程调度
常用系统调用性能
是在C类机器测试,自己使用最好在自己的机器类型测试。
| 性能(次/秒) | |
|---|---|
| ntohl | 2.5亿 |
| memset 1k | 150w |
| getppid | 100w |
| gettimeofday | 30~400w |
| time | 30w~400w~1000w |
| shmget | 300w |
| shmat | 40w |
| socket | 10w~50w |
| sendto | 40w |
| fork | |
| pthread_create | 5~10w |
工具
- strace
- perf
内存管理
- 查看进程地址空间/proc/PID/maps或者pmap
- 防止内存交换出去调用mlock,如果内存使用非常紧张的时候得注意
- 空闲内存计算:/proc/meminfo查看,MemFree+cached+buffer-Mapped
共享内存建立方法
- IPC 我们经常使用
- shm_open,文件操作,方便append和dump
- tmpfs可以直接挂载到某个盘
- hugetlbfs节省页表空间
内存权限
| shared | private | |
|---|---|---|
| File | 共享内存 | 数据段、代码段 |
| anon | 父子进程 | 堆 |
文件IO
文件系统层次架构
- VFS Layer
- NFS EXT2 EXT3 NTFS
- Page Cache
- Generic Block Layer
- I/O Scheduler Layer
- Block Device Driver Layer
- Block Device Layer
PageCache起了缓存得作用,采用read ahead机制,如果我们顺序读性能比较好,随机读性能就比较差了。对于写,如果在pagecache中存在,那么直接写PacheCache中的页就可以,否则需要加载该页内容,然后写入PageCache,最后delay write。
虚拟文件系统为filetab[fd]->file->dentry->inode->mapping.dentry采用全局hash,查找性能为30~35w/s,100w个文件也为30w/s。
EXT3添加了日志模式,由高到低为journal、ordered、writeback
协议栈

recv_queue中的包大小,为内核的包大小,而不是ip包大小。
- 如果发出去的包太大,需要修改write_queue和tx_queue两个参数,tx_queue主要是流量控制。
- 多进程必须在socket后再fork,即使设置了REUSEADDR,从hashtable看出原因。
- net.ipv4.tcp_max_syn_backlog参数决定了SYN_RECV状态队列的数量,一般默认值为512或者1024,即超过这个数量,系统将不再接受新的TCP连接请求.
- sync cookie,外网要注意,同一个集线器来的用户,可能导致大量不可以建立链接。
- somaxconn决定了listen监听队列的大小
- select有1024的限制,即使没有达到1024,但是分配的fd大于1024也会有问题。
epoll多用于单进程多线程
时间
- gettimeofday根据硬件不同性能差距很大
- usleep(1),睡眠不一定是1微妙,有可能是毫秒级的,也和硬件有关。
参考文献
man 2
man 7
ULK
Linux内核策略介绍的更多相关文章
- Linux内核策略介绍学习笔记
主要内容 硬件 策略 CPU 进程调度.系统调用.中断 内存 内存管理 外存 文件IO 网络 协议栈 其他 时间管理 进程调度 内核的运行时间 系统启动.中断发生.系统调用以及内核线程. 进程和线程的 ...
- Linux内核版本介绍与查询
Linux内核版本命名在不同时期有着不同的规范,在涉及到Linux版本问题时经常容易混淆,主线版本/稳定版/长期支持版本经常搞不清楚,本文主要记录下内核版本命名的规则以及如何查看Linux系统版本信息 ...
- Linux内核功能介绍及如何使用保护您的网页安全
在本文中,我们快速浏览了Linux内核的许可流程,并向您展示了如何使用它们来保护您的网页或应用安全 传统上,Linux内核通过以下两类来区分其进程: 特权进程:这些进程使用户可以绕过所有内核权限检查. ...
- linux内核分析(网课期末&地面课期中)
堆栈变化过程: Linux内核分析——计算机是如何工作的 计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有 ...
- Linux内核编译与安装
2013-04-16 Linux内核介绍 Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统.内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制.L ...
- 20135327郭皓--Linux内核分析第三周 构造一个简单的Linux系统MenuOS
Linux内核分析第三周 构造一个简单的Linux系统MenuOS 前提回顾 1.计算机是如何工作的三个法宝 1.存储程序计算机 2.函数调用堆栈 3.中断 2.操作系统的两把宝剑 中断上下文的切换 ...
- Linux内核分析实验三----跟踪分析Linux内核的启动过程
一.Linux内核源代码介绍 1.根目录 arch/x86目录下的代码是我们重点关注的,arch中包括支持不同CPU的源代码. init目录下包含内核启动相关的代码,如main.c(start_ker ...
- Linux 内核剖析
https://www.ibm.com/developerworks/cn/linux/l-linux-kernel/ 由于本文的目标是对 Linux 内核进行介绍并探索其体系结构和主要组件,因此首先 ...
- Linux 内核的文件 Cache 管理机制介绍
Linux 内核的文件 Cache 管理机制介绍 http://www.ibm.com/developerworks/cn/linux/l-cache/ 1 前言 自从诞生以来,Linux 就被不断完 ...
随机推荐
- 【 D3.js 进阶系列 — 2.1 】 力学图的事件 + 顶点的固定
本章讨论在力学图中经常使用到的事件( Event ),然后对[p=555">进阶 - 第 2.0 章]的人物关系图进行改进.使用户可以固定拖拽的对象. 在[入门 - 第 9.2 章]和 ...
- 在 Windows Server 2008 R2 上安装 IIS 7.5
原文 在 Windows Server 2008 R2 上安装 IIS 7.5 默认情况下,Windows Server(R) 2008 R2 上不安装 IIS 7.5.可以使用服务器管理器中的“添加 ...
- Ruby: Count unique elements and their occurences in an array
Is there a method in Ruby that takes an array, and counts all unique elements and their occurrences ...
- Delegate,Action,Func,Predicate的使用与区别
C#4.0推出后,类似Linq,Lamda表达式等许多新的程序写法层次不穷.与之相关的Delegate,Action,Func,Predicate的使用和区别也常常让大家迷惑,此处就结合实际的应用,对 ...
- 线程同步synchronized
一Java规划共享多个线程之间数据的能力. 当线程以异步方式訪问共享数据时.有时候是不安全的或者不和逻辑的. 比方卖火车票.同一时刻一个线程在读取数据,另外一个线程在处理数据,当处理数据的线程没有等到 ...
- Spring中的事务传播行为
Spring在TransactionDefinition接口中定义了7种类型的事务传播行为,它们规定了事务方法是怎样传播的. PROPAGATION_REQUIRED(最经常使用!):支持当前事务,假 ...
- 刚刚回归的开始菜单 Windows 10全面体验
北京时间2014年10月1日凌晨,微软就在旧金山召开新品公布会,对外展示了自己新一代操作系统Windows 10,覆盖了包含手机.平板.台式机以及Xbox One在内的全部平台.尽管微软此次公布的不过 ...
- hdu 4915 Parenthese sequence(模拟)2014多培训学校5现场
Parenthese sequence Time Limit: ...
- A WebBrowser Toy
原文:A WebBrowser Toy 记得上大学时,某老师为了防止学生上课不听讲,只准学生在课堂上看他放映的PPT,不准学生拷贝,而考试的内容恰恰是PPT上的内容,于是一个同学来找我,我就用VB写了 ...
- UITabBarControler解决旋转问题
在遇到开发项目中播放视频,播放视频回列表后,,列表 NavigationController 里边, NavigationController 在 UItabBarController 里边,不要旋转 ...