最早听到Atomic write这个功能是从Fusion-io的DFS文件系统对于数据库的性能优化上。从字面意义上来说,它的意思是IO写入操作相对于其他操作来说,是一个单步的动作。实际上,对于一个IO操作来说,在SSD内部的实现是一个复杂的过程,需要牵涉到很多步骤,因此通常的IO操作并不是一个单步的动作。为了支持原子写,SSD需要通过一个特殊的设计,保证从用户的角度来看,好像这个动作是单步的。
为了说明这个问题,先看一个多线程程序设计中常见的多线程同步问题。在这个例子中,设置了32个线程对同一个变量进行设置。
unsigned int bitmap = 0;
void *setbit_thread(void *opt)
{
bitmap |= 1UL << pos;
return NULL;
}
int main(int argc, void **argv)
{
pthread_t thread[32];
for (int i = 0; i != 32; i++)
{
pthread_create(&thread[i], NULL, &setbit_thread, (void *)i)

Atomic Write是一种确保IO操作相对于其他操作是单步完成的技术,尤其在多线程环境下保证数据一致性。在NVMe标准中,原子写涉及到AWUN、AWUPF和ACWU等概念,确保在异常情况下的数据完整性。尽管存储层如SSD可能支持原子写,但文件系统如Linux的Ext3/4、XFS等并不友好,而ZFS和某些数据库如MySQL则通过特定设计应对原子性问题。MySQL的Double Write Buffer技术用于在存储层不支持原子写时确保数据一致性,但在SSD上可能影响性能。若SSD支持原子写,可以优化MySQL性能,但需要关闭Double Write Buffer并开启设备的原子写能力。
最低0.47元/天 解锁文章
820

被折叠的 条评论
为什么被折叠?



