延时分析
观测位置 | 优点 | 缺点 |
---|---|---|
应用程序 | 应用程序上的反应更直观 | 不同的应用程序以及不同的软件版本要使用不同的技术 |
系统调用接口 | 接口资料多,可通过系统工具和静态跟踪进行观察 | 系统调用捕捉所有类型的文件系统,包括非存储型文件系统(统计、套接字),除非能过滤,否则会造成干扰。此外,一个文件系统函数可能有多个系统调用(如读就有read(),pread(),read64()等),所有这些都需要测量 |
VFS | 所有文件系统通用的标准接口,操作系统操作和调用一一对应 | VFS跟踪所有类型的文件系统,包括非存储型文件系统,除非能过滤,否则造成干扰 |
直接在文件系统上 | 只能跟踪和目标统一类型的文件系统,能获取内部环境上下文详情 | 特定于某种文件系统,不同版本的文件系统需要的跟踪技术不尽相同 |
分析
strace
会影响性能,只能在性能开销可接受且无法使用其它延时分析工具的情况下使用
#-tt 在左侧打印出相对时间戳,-T在右侧打印出系统调用时间
strace -ttT -p ${pid}
systemtap
latencytop
sar
这个工具貌似有点强后面的
dentunusd 目录项缓存未使用计数(可用项)
file-nr 使用中的文件描述符个数
inode-nr 使用中的inode个数
slabtop
打印有关内核slab缓存的信息
/proc/meminfo
内存使用状况
额,这个工具还是比较少,后续还是要挑一两个多看看
调优
调优的细节——可以调整的选项和设置值,取决于操作系统版本、文件系统类型和预期的负载。
应用程序调用
一些提高性能的系统调用
fsync()
posix_fadvise()
madvise()
ext3
mount 使用选项noatime以禁用文件访问时间戳更新减少后端的I/O
tune2fs 命令调优
#使用哈希B树以提高大目录的查找速度
tune2fs -O dir_index /dev/hdX
#重建文件系统目录的索引
e2fsck -D -f /dev/hdX
ZFS
#列出文件系统属性
zfs get all zones/var