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内核策略介绍
Linux内核策略介绍学习笔记 主要内容 硬件 策略 CPU 进程调度.系统调用.中断 内存 内存管理 外存 文件IO 网络 协议栈 其他 时间管理 进程调度 内核的运行时间 系统启动.中断发 ...
- Linux内核Inotify机制学习笔记
一.Inotify简介: Inotify是一种文件变化通知机制,Linux内核从2.6.13开始引入.它是一个内核用于通知用户空间程序文件系统变化的机制.开源社区提出用户态需要内核提供一些机制,以便用 ...
- 《Linux内核分析》读书笔记(四章)
<Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...
- Linux内核分析第一次学习报告
Linux内核分析第一次学习报告 学生 黎静 学习内容 1.存储程序计算机工作模型 冯诺依曼体系结构:核心思想为存储程序计算机. CPU抽象为for循环,总是执行下一条指令,内存保存指令和数据,CPU ...
- Linux——帮助命令简单学习笔记
Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...
- Linux内核设计与实现笔记_1_基本概念
Linux内核设计与实现笔记_1_基本概念 操作系统 系统这个词包含了操作系统和所有运行在它上面的应用程序.操作系统是指在整个系统中负责完成分最基本功能和系统管理的那些部分,这些部分应该包括: 内核, ...
- Linux内核(16) - 高效学习Linux内核
世界悲结束了,章鱼哥也退役了,连非诚勿扰中的拜金女也突然的少了很多.这本<Linux内核修炼之道>在卓越.当当.china-pub上也已经开卖了,虽然是严肃文学,但为了保证流畅性,大部分文 ...
- Linux内核(17) - 高效学习Linux驱动开发
这本<Linux内核修炼之道>已经开卖(网上的链接为: 卓越.当当.china-pub ),虽然是严肃文学,但为了保证流畅性,大部分文字我还都是斟词灼句,反复的念几遍才写上去的,尽量考虑到 ...
- 20135320赵瀚青LINUX第八周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周学习的是linux ...
随机推荐
- 关于PHPExcel 导出下载表格,调试器响应乱码
PHPExcel导出表格是日常程序开发很常见的一功能,有些小伙伴千辛万苦把代码写好之后,运行一下结果发现浏览器没反应,表格下载不了或者表格乱码!!!像这种情况有三种解决方法: 1.在header 之前 ...
- Python学习:9.模块的安装以及调用模块
什么是模块 在Python中,模块其实也就是包含python代码的文件,我们为什么要使用模块?在我们以后写代码的时候,我们会发现有很多功能需要经常使用,那我们想要使用这些功能怎么办,要再把那些代码在敲 ...
- 最小生成树——Kruscal(克鲁斯卡尔算法)
一.核心思想 将输入的数据由小到大进行排序,再使用并查集算法(传送门)将每个点连接起来,同时求和. 个人认为这个算法比较偏向暴力,有些题可能会超时. 二.例题 洛谷-P3366 题目地址:ht ...
- PTA基础编程题目集7-3逆序三位数
7-3 逆序的三位数 (10 分) 程序每次读入一个正3位数,然后输出按位逆序的数字.注意:当输入的数字含有结尾的0时,输出不应带有前导的0.比如输入700,输出应该是7. 输入格式: 每个测试是一个 ...
- vim 配色方案
1. 自己电脑上的vim 注释很难看清,又不想取消高亮.原来显示: 在 if has("syntax") syntax onendif 语句下面追加一句: colorscheme ...
- [原创]python高可用程序设计方法
有时候程序上的bug会导致程序引发诸如段错误的情况而导致程序异常退出,这时用crond服务来检测,就会有一段时间程序处于不可用的情况,为了增强程序的可用性,我们可以让子进程处理业务,而让主进程检测子进 ...
- 北京Uber优步司机奖励政策(3月2日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 杭州优步uber司机第三组奖励政策
-8月9日更新- 优步杭州第三组: 定义为激活时间在2015/8/3之后(含)的车主(以优步后台数据显示为准) 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Ub ...
- struts2-01:作用域传值
方式一.使用ServletActionContext(耦合度高,不建议使用) public String login(){ ServletActionContext.getRequest().getS ...
- 测试FlowTable
1.确定openvswitch模块加载#lsmod |grep oepnvswitch#/sbin/modprobe openvswitch 2.启动配置:1)默认配置rm -f /usr/local ...