构建动态数据竞争检测平台

之前的文章分别介绍了基于Lockset算法、基于happens-before关系以及基于两者混合的方法。对于这些方法,已有的一些论文中提到的有关实验对比可能都比较片面或是不太客观,因此实现这些方法做一个比较全面的实验对比分析是很有必要的,不仅可以对这些已有的方法有一个更深入的理解,同时也能够发现他们存在的一些共性问题,方便后续的研究。

在实现之前文章提出的动态数据竞争检测方法之前,有以下几个人问题需要思考。

1. 如何动态监视程序的行为?

一般情况下都会采取插桩来进行对程序行为的监视,插桩又分为静态源码插桩,静态二进制插桩,动态二进制插桩等。静态插桩的话,会改变原始程序的结构,因此这里我们采取动态二进制插桩。比较经典的动态二进制插桩平台包括Intel Pin,DynamoRIO以及Valgrind。Pin的话由于其良好的兼容性,丰富的API接口使得其使用更加广泛。这里的话,我们使用Pin来帮助我们对程序进行动态二进制插桩,从而监视程序运行过程中的行为。

Pin框架

我们可以通过编写Pintool来实现我们自己想要的一些逻辑,通过API来从Pin中获取程序相关的信息。这里有关Pin以及如何编写Pintool将会在后面的文章中陆续介绍。

2. 动态监视程序的哪些行为?

对于之前文章中提到的动态数据竞争检测方法,我们可以发现的一个共同的特点就是这些方法都需要监视线程同步原语。

序号 函数名

1 pthread_mutex_lock

2 pthread_mutex_trylock

4 pthread_mutex_unlock

5 pthread_mutex_timedlock

6 pthread_rwlock_wrlock

7 pthread_rwlock_trywrlock

8 pthread_rwlock_rdlock

9 pthread_rwlock_tryrdlock

10 pthread_rwlock_unlock

11 pthread_cond_signal

12 pthread_cond_wait

13 pthread_cond_broadcast

14 pthread_barrier_wait

15 sem_post

16 sem_wait

17 pthread_create

18 pthread_join

同时还包括内存读写访问,动态内存申请等系统调用。

3. 如何构建动态数据竞争检测平台

对于上述提到需要动态插桩并且监视的读写指令或是Pthread库函数,系统库函数等,这些行为发生的时候,可以将这些行为以事件的形式发送到检测器中,检测器根据不同的检测算法执行相关的数据竞争检测。因此,我们以一种事件驱动模式来构建我们的动态数据竞争检测平台。

框架

该平台有着非常良好的扩展性,基本的动态数据竞争检测器Detector包含公共的一些实现通过继承这个Detector就可以实现其他不同的动态数据竞争检测方法,为后续我们对这些数据竞争检测方法进行实验分析提供比较便利的途径。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术分享

什么情况下才应该使用存储过程而不是用程序来对数据做操作?

对于什么情况下才应该使用存储过程而不是用程序来对数据做操作的问题,我有下面的看法。

34515
来自专栏Kirito的技术分享

浅析项目中的并发(一)

前言 开头扯两句,最近项目略忙,一堆零散的东西要做,没那么多时间维护文章了。又迷上了吃鸡,大雾spring security系列投入了我不少时间,但总体收获也颇...

3549
来自专栏Java技术栈

Redis 的 8 大应用场景!

之前讲过Redis的介绍,及使用Redis带来的优势,这章整理了一下Redis的应用场景,也是非常重要的,学不学得好,能正常落地是关键。

963
来自专栏Cloud Native - 产品级敏捷

为何有了组件, 还要有微服务?

微服务其实真正要解決的问题是:过去在組件化架构上一直没法解決的问题…… 当将某組件佈署到 Production 的環境上時,如何能 “永远” 的不致於對已在 P...

1735
来自专栏架构师之路

CA,给了数据库,给了机器,为啥也扩不了容?

随着业务越来越复杂,数据量越来越大,并发量越来越大,数据库的性能越来越低。好不容易找运维申请了两台机器,让DBA部署了几个实例,想把一些业务库拆分出来,却发现拆...

3657
来自专栏用户2442861的专栏

电商搜索引擎实践(工程篇)

随着互联网数据规模的爆炸式增长, 如何从海量的历史, 实时数据中快速获取有用的信息, 变得越来越有挑战性. 一个中等的电商平台, 每天都要产生百万条原始数据,...

802
来自专栏Albert陈凯

Hadoop离线数据分析平台实战——330会话分析Hourly分析Hadoop离线数据分析平台实战——330会话分析Hourly分析

Hadoop离线数据分析平台实战——330会话分析Hourly分析 项目进度 模块名称 完成情况 用户基本信息分析(MR)� 未完成 浏览器信...

36010
来自专栏腾讯云数据库(TencentDB)

腾讯自研新一代企业级云数据库CynosDB,打破安迪-比尔定律,释放硬件红利!

CynosDB是腾讯云自研的新一代高性能高可用的企业级分布式云数据库。融合了传统数据库、云计算与新硬件的优势,100%兼容开源数据库,百万级QPS的高吞吐,不限...

2.5K7
来自专栏程序员互动联盟

为什么这么多人学不会C语言?

很多人觉得用C语言作为入门语言觉得太难了,里面还有指针,回调,递归之类的操作太难了。为什么这么多人觉得C语言难?笔者根据从业十几年的经验尝试着分析一下。 ? 第...

3496
来自专栏Golang语言社区

为什么go语言适合开发网游服务器端

从网游的角度看: 要成功的运营一款网游,很大程度上依赖于玩家自发形成的社区。只有玩家自发形成一个稳定的生态系统,游戏才能持续下去,避免鬼城的出现。而这就需要多次...

3217

扫码关注云+社区