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 ...
随机推荐
- 用PHP读取Excel、CSV文件
PHP读取excel.csv文件的库有很多,但用的比较多的有: PHPOffice/PHPExcel.PHPOffice/PhpSpreadsheet,现在PHPExcel已经不再维护了,最新的一次提 ...
- [转]MySQL日期与时间戳常用函数
本文原文地址:https://www.cnblogs.com/jhy-ocean/p/5560857.html 平时比较常用的时间.字符串.时间戳之间的互相转换,虽然常用但是几乎每次使用时候都喜欢去搜 ...
- 帝国cms发布信息时替换正文IMG图片标签里的ALT内容
帝国cms发布信息时替换正文IMG图片标签里的ALT内容 在 e/class/userfun.php 里面增加 //替换正文IMG里的ALT内容 function user_imgalt($mid,$ ...
- hive常见的几种优化手段
Hive调优的几个入手点: Hive是基于Hadoop框架的,Hadoop框架又是运行在JVM中的,而JVM最终是要运行在操作系统之上的,所以,Hive的调优可以通过如下几个方面入手: 操作系统调优 ...
- Linux3.5—IIC学习分析
I2C控制器的设备对象内核已经实现并关联到platform总线. I2C控制器的驱动对象内核已经实现. 看mach-tiny4412.h /plat-samsung/目录下 /drivers/i2c/ ...
- java-执行流程控制语句
就像有知觉的生物一样,程序必须在执行的过程中控制它的世界,并做出选择.java使用执行流程控制语句做出选择. 1.选择语句 if if(布尔表达式){ 业务逻辑1; }else{ 业务逻辑2: } s ...
- BZOJ1968_COMMON约数研究_KEY
题目传送门 BZOJ水题,for i=1~N,答案加上N/i即可 ANS=∑N/i(i∈{1~N}) code: /****************************************** ...
- 【NAS】CIFS用户场景需求分析
1.everyone用户 1.1: 场景描述:共享目录为rule,所有用户都可以查看,但是不能修改: 解决方法:在smb.conf里配置read only = yes,具体示例如下: [rule] p ...
- Redis系列六 Redis事务
Redis事务 1.介绍 在Redis事务中可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞. 2.事务的作用 一个队列中, ...
- serv-u自动停止的解决方法
在主界面serv-u管理控制台-主页--管理服务器----服务器详细信息下,点击“创建,修改并删除服务器事件”找到“事件”右击空白处---“添加”然后如下图所示填写: 点击“保存”就好了,而且我自己也 ...