swappiness对swap分区的影响

swap分区出现是因为硬件落后的时候,被OS设计人员搞出来承担一部分内存工作的,那时候的硬盘的速度和内存速度的差别对性能的影响还不明显,但随着现在高性能程序的要求,swap分区的读写速度严重影响了性能。 swappiness又被留出来作为控制swap使用程度的接口,关于/proc/sys/vm/swappiness的介绍wiki有 Swappiness is...

iowait的形成原因和内核分析

经常我们碰到一些问题,进程的写文件,写入的速度非常慢,而且当时总的IO的数量(BI,BO)也非常低,但是vmstat显示的iowait却非常高,就是下图中的wa选项。 man vmstat手册如下解释: wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle. CPU花费到IO等待上的时间,也就是说进程的io被CPU调...

易信的单手操作设计

易信发布的时候,速度尝了鲜,虽然不经常打开它(×_×),但每次打开总感觉到它很顺手(请原谅一个底层码农的描述语言),还是源于它的单手操作,简单的说就是支持左右滑动的手势操作,而微信在这点上还是有差距的。 如下图所示,易信在界面上有3个按钮,分别是左上的设置栏、右上的联系人栏,以及右下角的快捷方式。 ...

读写信号量与实时进程阻塞挂死问题

问题终于处理清楚了,如此坑爹的问题,陆陆续续的搞了有近月的时间,现在有时间写一个过程与总结。 问题现象:进程H需要每隔10s发消息给M(类似watchdog的功能),否则就会有功能异常的告警,业务发现了异常的告警,恰好OS监控日志中记录下了进程H当时是D状态,持续了约20s就恢复过来了,然后就没有然后,啥日志也没有...

从一次内存泄露看程序在内核中的执行过程

当超群发来的问题,一个低端内存耗尽导致系统panic的问题,通过写一个死循环循环调用同一个脚本,然后盯着/proc/slabinfo看,就会发现size-32类型的slab火速增加。通过简单直接有效古老的排除法(感谢每日持续集成编译),确定是内核的问题,老的内核没问题,新内核有问题,本来直接上大神器,kmemcheck,奈何看了一眼内...

hugepage内存管理机制

Hugepage内存管理机制,故名就是大页内存管理,对应就是页管理,之所以有Hugepage机制诞生,正是因为之前的页管理有了很大问题。 Linux在内存管理中采用受保护的虚拟地址模式,在代码中地址分为3类:逻辑地址、线性地址、物理地址。程序使用具体内存简单说就是逻辑地址通过分段机制映射转化为线性地址,然后线性地址通...

CPU亲和性的使用与机制

CPU的亲和性, 就是进程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器,亲和性是从affinity翻译过来的,应该有点不准确,给人的感觉是亲和性就是有倾向的意思,而实际上是倒向的意思,称为CPU关联性更好,程序员的土话就是绑定CPU,绑核。 在多核运行的机器上,每个CPU本身自己会有缓存,缓存着进程使用的...

程序员知识管理框架搭建

标题党,名字起的很大,就是目前我自己的知识管理框架。 首先是获取知识,之前我是用google reader的,可惜他被google抛弃了,后面测试了一下feedly,网站非常不稳定,iphone客户端直接提示服务器压力大导致崩溃,还好有reeder,可以连接到feedly的api获取信息,至少主要应用场景移动端问题解决了。顺便插嘴一下对RSS的...

Linux内核写文件流程

接上篇Linux内核读文件流程,写这篇Linux内核写文件流程。文中涉及的内核代码版本是linux内核版本号:3.0.13-0.27 sles11sp2版本。 用户态write函数到内核态的调用是: SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *, buf, size_t, count) SYSCALL_DEFINE3调用的vfs_write,vfs_write调用rw_veri...

Linux内核读文件流程

主要描述从用户态启动文件读开始,直到磁盘驱动,linux内核代码所走过的流程。阅读者需要对linux内核的内存管理、ext系列的文件系统,块设备,页高速缓存等有一定了解,不了解也没关系,顺着代码读可能会吃力点而已,鉴于不可能将代码全贴出来,中间缺失的部分,请大家自行脑补吧。至于写文章的原因,作为一名高效的客服...