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

转载请注明出处 jacksu 
开源文档:  redis源码解析 
开源库:  github链接 
个人小站:  jack's blog
 
 

Linux内核策略介绍的更多相关文章

  1. Linux内核策略介绍学习笔记

    主要内容 硬件 策略 CPU 进程调度.系统调用.中断 内存 内存管理 外存 文件IO 网络 协议栈 其他 时间管理 进程调度 内核的运行时间 系统启动.中断发生.系统调用以及内核线程. 进程和线程的 ...

  2. Linux内核版本介绍与查询

    Linux内核版本命名在不同时期有着不同的规范,在涉及到Linux版本问题时经常容易混淆,主线版本/稳定版/长期支持版本经常搞不清楚,本文主要记录下内核版本命名的规则以及如何查看Linux系统版本信息 ...

  3. Linux内核功能介绍及如何使用保护您的网页安全

    在本文中,我们快速浏览了Linux内核的许可流程,并向您展示了如何使用它们来保护您的网页或应用安全 传统上,Linux内核通过以下两类来区分其进程: 特权进程:这些进程使用户可以绕过所有内核权限检查. ...

  4. linux内核分析(网课期末&地面课期中)

    堆栈变化过程: Linux内核分析——计算机是如何工作的 计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有 ...

  5. Linux内核编译与安装

    2013-04-16    Linux内核介绍  Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统.内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制.L ...

  6. 20135327郭皓--Linux内核分析第三周 构造一个简单的Linux系统MenuOS

    Linux内核分析第三周  构造一个简单的Linux系统MenuOS 前提回顾 1.计算机是如何工作的三个法宝 1.存储程序计算机 2.函数调用堆栈 3.中断 2.操作系统的两把宝剑 中断上下文的切换 ...

  7. Linux内核分析实验三----跟踪分析Linux内核的启动过程

    一.Linux内核源代码介绍 1.根目录 arch/x86目录下的代码是我们重点关注的,arch中包括支持不同CPU的源代码. init目录下包含内核启动相关的代码,如main.c(start_ker ...

  8. Linux 内核剖析

    https://www.ibm.com/developerworks/cn/linux/l-linux-kernel/ 由于本文的目标是对 Linux 内核进行介绍并探索其体系结构和主要组件,因此首先 ...

  9. Linux 内核的文件 Cache 管理机制介绍

    Linux 内核的文件 Cache 管理机制介绍 http://www.ibm.com/developerworks/cn/linux/l-cache/ 1 前言 自从诞生以来,Linux 就被不断完 ...

随机推荐

  1. Tigase XMPP Server在CentOS部署和配置

    Tigase XMPP Server在CentOS部署与配置 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 以下讲述Tigase XMPP Server ...

  2. mysql 在创建批处理脚本日志表信息

    mysql在批处理脚本通过存储过程如下所示创建日志信息表: drop PROCEDURE if EXISTS reqSp; DELIMITER // create procedure reqSp(sT ...

  3. 解决 configure.ac:17: error: possibly undefined macro: AC_PROG_LIBTOOL

    当安装configure.ac:17: error: possibly undefined macro: AC_PROG_LIBTOOL If this token and others are le ...

  4. android在单身的对象和一些数据的问题被释放

    正式接触android我们一直在开发了一段时间,该项目的第一个版本最终会很快结束. 当有它自己的测试.拥有android后台.同一时候打开了几个应用之后又一次切回到自己的app.发现报错了.经过排查, ...

  5. Codeforces Round #306 (Div. 2) C

    意甲冠军 到不超过一个更100该整数字符串.采取随机从数间(不能拿). 问:是否有可能被剩下8除尽.假设能,出口YES和任选一个数字的其余病例的. 不能够,输出NO. 思路 想法题. 首先观察到.10 ...

  6. 无废话WCF入门教程五[WCF的通信模式]

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务 ...

  7. ArcGIS网络分析之Silverlight客户端路径分析(三)

    原文:ArcGIS网络分析之Silverlight客户端路径分析(三) 首先贴上最终的效果图: a.路径查询 2.最近设施点查询 3.服务区分析 说明: 1.以上的示例使用的数据是随意在ArcMap中 ...

  8. 【LeetCode】Set Matrix Zeroes 解题报告

    今天看到CSDN博客的勋章换了图表,同一时候也添加显示了博客等级,看起来都听清新的,感觉不错! [题目] Given a m x n matrix, if an element is 0, set i ...

  9. MacOS10.9平台配置Appium+Java环境

    1) 安装JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html   ...

  10. 我在Yahoo与ATS 九死一生的故事

    我在Yahoo与ATS 九死一生的故事 http://www.sunchangming.com/blog/post/4667.html 去年9月,我去Yahoo后领导交给我的第一件事,就是把Yahoo ...