13年的时候准备挖“KVM源代码分析”的坑,陆陆续续2年过去了,坑也没有填上,当时是因为对KVM了解的肤浅,真正的理解必然要深入到代码级别,所谓“摈弃皮毛,看到血肉,看到真相”,当时计划写KVM基本工作原理、虚拟机的创建、VCPU调度原理、KVM内存管理、KVM设备管理等,实际发现代码过程还是很多,估计后续会针对于不同的...
Jprobe在之前经常使用用来对内核流程中的函数挂钩子,劫持相关参数,进行debug调试分析。
但在内核调试中经常碰到需要监视的模块数据,而这些数据往往在很多函数中修改,需要程序员人工从大量的内核代码中过滤出这些函数,使用jprobe就需要监控每个函数的入口,涉及的内容比较复杂,而且很多时候的函数符号并没有导出,...
Iphone丢了之后,准备更换成android机,看当前4.0版本具体是什么样子,选择三桑的9305,当前看性价比还是可以的,淘宝有一个“永荣数码”,目前看还是不错的,机器买了2个多月还是不错的。android机买到之后第一件事就是刷机,当前rom也就小米和CM(CyanogenMod)优化的不错,本着原生系统选择了CM,主要是当前只有CM由官方...
从《Finding a needle in Haystack: Facebook’s photo storage》大致对比着翻译看了几遍,有些理解和想法,便记录下来。
Haystack和TFS都是面向对象的分布式存储系统,最主要的需求都是为了解决PB级别的图片存储问题,文中也提到了一些设计目标,但设计目标是问题驱动的,先看facebook前期存储模型:
它们存在的问题...
当前文章接着Bash编程陷阱一写下来。
24. for arg in $*
bash使用$*或者$@来承担脚本的所有入参,但用for遍历的时候需要注意
for arg in "$@"
# 或者更简单的写法
for arg
这里的$@需要添加上"",此处的"$@"相当于"$1","$2","$3",而非"$1 $2 $3"
加引号的目的自然是预防空格,如果$1存在空格,那么就多出一个参数
25. f...
Bash编程陷阱:bash-pitfalls里面介绍了43条shell陷阱,都是一些很常见的应用场景,新手和老手都有可能犯的错误,为了加深记忆,自己就大致记录下来,英文文章用wiki编辑,条目随时可能增加,建议直接看英文。
如下的内容不完全翻译原文,穿插了一些自己的修改。
1. for i in $(ls *.mp3)
bash编程中最常见的错误之一就...
swap分区出现是因为硬件落后的时候,被OS设计人员搞出来承担一部分内存工作的,那时候的硬盘的速度和内存速度的差别对性能的影响还不明显,但随着现在高性能程序的要求,swap分区的读写速度严重影响了性能。
swappiness又被留出来作为控制swap使用程度的接口,关于/proc/sys/vm/swappiness的介绍wiki有
Swappiness is...
经常我们碰到一些问题,进程的写文件,写入的速度非常慢,而且当时总的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就恢复过来了,然后就没有然后,啥日志也没有...