本文将介绍TSX的相关知识。包含TSX的motivation与使用接口。

1 没有TSX时

如果多线程对Excel表格操作时,需要加锁。但是,可以采用不同粒度的锁。

1.1 粗粒度锁

对整个Excel表格加锁。这种方式实现容易,但是却存在如下问题:

线程1操作第1行与第2行数据;线程2操作第3和第4行数据。(1)

线程1与线程2操作的数据没有冲突,但是由于是对整个Excel表格加锁的,因此线程1和线程2无法并发。由此可见粗粒度锁可能会降低并发度。

1.2 细粒度锁

粗粒度锁可能会降低并发度,因此,可以采用细粒度锁。例如,可以以Excel表格中的每一行为粒度进行加锁,从而提高并发度。但是,细粒度的锁却会带来其他问题:

线程1操作第1行和第2行数据;线程2操作第2行和第1行数据。(2)

在这种场景下,可能会产生死锁。所以细粒度锁的加锁解锁方案需要仔细设计,避免死锁和其他很多问题。

2 TSX的motivation

针对粗粒度锁与细粒度锁存在的问题,TSX应运而生。

当硬件支持TSX,程序开发人员以Excel表格为粒度进行加锁时;当出现(1)所示的情况,硬件保证线程1和线程2可以并发访问,从而提高并发度。

逻辑上TSX是一把粗粒度的锁,将包含事务性的操作的critical section包起来;由硬件自动检测操作中的数据冲突,保证事务性操作的正确性,发掘操作间的并行性,实现上类似每个条目都有细粒度的锁,这被称作lock elision。

3 编程接口

TSX的模型类似传统的临界区。提供两种编程接口:HLE(Hardware Lock Elision)和RTM(Restricted Transactional Memory)。

3.1 HLE

事务性操作失败(abort)的结果是重新执行传统的有锁代码。

3.2 RTM

(1) 事务性操作失败(abort)的后续操作入口由xbegin指定。

(2) xabort指令通过eax返回一个错误码,用于后续分原因处理。

由此可见,RTM的模型更加灵活。

4 漏洞

不幸的是,最近TSX因为硬件bug,已经被microcode disable了。


参考资料:

  1. Intel Transactional Synchronization Extension
  2. 为防止Zombieload v2攻击,Windows和Linux 引入选项关闭英特尔 TSX