Atomic write, 揭开你的面纱

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

2016-04-25 晶格思维 晶格思维 晶格思维
晶格思维

crystalwit

从行业视角介绍IT领域特别是存储领域的新技术、新趋势,强调刨根问底和联想类比。

最早听到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);

    }

    for (int i = 0; i != 32; i++)

    {

        void *ret;

        pthread_join(&thread[i]&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值