未分类

巧用Systemtap注入延迟模拟IO设备抖动

0

当我们的IO密集型的应用怀疑设备的IO抖动,比如说一段时间的wait时间过长导致性能或其他疑难问题的时候,这个现象处理起来就比较棘手,因为硬件的抖动有偶发性很难重现或者重现的代价比较高。

幸运的是systemtap可以拯救我们。从原理上讲,我们应用的IO都是通过文件系统来访问的,不管read/write/sync都是,而且我们的文件大部分都是以buffered方式打开的。在这个模式下,如果pagecache不命中的话,就需要访问设备。 知道了这个基本的原理以后,我们就可以用万能的systemtap往vfs的读写请求中受控的注入延迟,来达到这个目的。

要点有以下几个:
1. 受控的时间点。
2. 延迟时间可控。
3. 目标设备可控。

我写了个脚本注入IO延迟,模拟ssd/fio硬件的抖动来验证是否是IO抖动会给应用造成影响,三个步骤如下:
步骤1: 编译模块
(更多…)

多线程程序问题分析小结

7

程序的核心是逻辑,没有正确逻辑的代码算不上是程序。人脑是物理上的单核,写程序和看代码讲求一个流程,流程其实就是单核顺序执行的过程。怎么保证单核顺序的人脑写出来的多线程程序,在物理上的多核CPU上执行正确的逻辑呢?答案是根本保证不了。多线程程序运行起来就像是开跑的赛马场,谁先跑完,谁会落后,完全无法预测;有时候相互踩踏在所难免。代码里到处充斥锁和共享的内存片段,过多的随机分支和状态导致全路径覆盖的测试case几乎是不可能的。所以多线程程序最痛苦的就是运行中爆出了core,发生了逻辑中认为不可能的事情,而你要在短时间内将其重现,定位,修复,验证。

重现 &&定位
        这是最耗时间的一步,也是最重要的,而且重现和定位是不分先后的。多线程的问题最常见的现象就是发生了不该发生的事情,线程之间产生了冲突,其中一个 assert 掉了。当你听到一个码农在调试程序的时候在嘟囔:“不能够啊,这不科学。”,他一定是在定位多线程的问题。所以第一步是找到矛盾的冲突点,基于此来做进一步的分析。
    1. 内存状态在线程间不一致:
thread1
图1

(更多…)

大话Sheepdog 2 – 对象缓存

17

分布式存储系统的性能一直都是众矢之的,主要是因为数据甚至元数据的存取都添加了网络层的开销。对于多拷贝的对象存储来说,甚至还有复杂的逻辑来保持各个拷贝的一致性。对于拷贝的读写,读写的优化通常是不可兼得。比如通过最终一致性(eventual consistency)优化了写,但是读的时候需要读取大于一份的拷贝,来判断是否是最新的。这些问题都导致了性能的低下。
(更多…)

大话Sheepdog 1 – 智能节点管理

4

Sheepdog是开源的分布式块存储项目,具有零配置、Thin-Provision、高可靠、智能节点管理、容量线性扩展、虚拟机感知(底层支持冷热迁移和快照、克隆等)、支持计算与存储混合架构的特点等,可扩展到上千级别的物理节点。开源软件如QEMU、Libvirt以及Openstack都很好的集成了对Sheepdog的支持。

本系列将手把手让读者体验Sheepdog的各种功能,并解释背后的工作机制和原理。Sheepdog目前只支持Linux的环境,对文件系统没有任何假设。本文以Ubuntu 12.04为背景,假设GIT、GCC、Autoconf以及Make等常见的编译环境已经配置好了。读者可以根据自己的环境微调命令。
(更多…)

使用gdb调试运行时的程序小技巧

15

原创文章,欢迎转载。转载请注明:转载自淘宝核心系统团队博客,谢谢!
原文链接地址:使用gdb调试运行时的程序小技巧

下面介绍我调试时经常遇到的三种问题,如果大家也有类似的问题交流一下解决方法:
情景1:在不中止程序服务的情况下,怎么调试正在运行时的程序
情景2:需要同时看几个变量的值或者批量查看多个core文件的堆栈信息怎么办
情景3:遇到需要查看、队列、链表、树、堆等数据结构里的变量怎么办
(更多…)

Flash存储设备在淘宝的应用实践(2011年iDevOps系统技术沙龙)

1

VoltDB内存数据库分析

7

引子

VoltDB是一个宣称性能超过Mysql 100倍的新型数据库。它源自Micheal Stonebraker一篇论文H-Store。在这篇论文发表后,Stonebraker成立了VoltDB公司带着他的一些学生开始在OLTP数据库领域打拼。Stonebraker从上世纪70年代——数据库刚开始发展的时间——就开始在数据库领域活跃,这样的老古董提出的数据库的新想法,给了整个存储领域很大的想象空间。

VoltDB源起于应用领域与硬件发展翻天覆地的变化。用户的使用方法发生了变化,在数据库开始发展的阶段,事务是一个较长的过程,用户或者管理员可以在”BEGIN TRANSACTION”和”END TRANSACTION”之间慢慢地人工执行整个事务的步骤。但是现在,大部分操作是由Web服务端发起的书写良好的事务,用户访问的是Web服务器,在Web服务器的执行逻辑里再访问数据库,所以即使是很复杂的事务也可以很快执行完。计算机硬件的发展更是一日千里。几十GB的内存服务器已经很常见。以太网络也已经步入Gbps时代,而且正在朝向10Gbps方向迈进。基于以太网的集群的机器价格也降低到比PC机贵不了太多。VoltDB的设计充分利用了这些特点,数据主要存储在内存中,Shared Nothing的集群结构,单机是单线程处理事务,不是用锁而是基于Optimistic的方法处理事务并发,所有的事务必须以存储过程形式先提交到VoltDB系统。下面分开来说。
(更多…)

Go to Top