linux write的返回代表什么?

        linux下的write file一般有这么几种:write、write_sync、write_odirect、aio_write。这里仅仅说前面的三种。我要表达的意思是这三种write方式返回时代表什么,要写的数据在内核的什么层次上。是不是按照字面理解的那样:write_sync和write_odirect返回表示数据写到磁盘上。

       首先简单描述下与数据相关的各个层次:

                            appplication(write + user_data)

                                         ||

                            page cache/buffer(fs 相关)

                                         ||

                             block layer(request、io scheduler)

                                         ||

                           driver layer(scsi command、ata command)

                                         ||

                            device cache(SCSI SATA IDE内部的write cache)

                                         ||

                            device media(存储介质)

generic-write

                  这是默认使用的write,当write返回时表示数据已经在page cache/buffer这一层,属于第二层次。

write-sync

                sync操作按照man 帮助的理解,保证将数据写到硬盘上,才返回。关于写到硬盘上有个问题:是写到硬盘的write cache还是写到硬盘 media上?或者可以这么说

sync操作要一直等到scsi/ata命令返回,才能表示结束。而scsi/ata命令的返回,是表示什么意思。这个就需要设备或者命令本身来解释。

              对于没有write cache或者关闭 write cache(hdparm 有这个功能,所谓关闭就是先写到write cache而后在刷到media上),命令的结束表示确实写到media。断电后数据不丢失,对于scsi或者目前ATA中的命令有FUA这个命令,属于write命令的参数,表示数据要写到media才算结束。据说目前好多阵列为了保证数据的integrality,关闭硬盘的write cache。

               如果有write cache且开启工作,命令中没有类似于FUA这样的参数,那么scsi/ata command 返回表示数据写到write cache中,就表示成功。这会带来两个问题

                A:如果此时硬盘掉电,数据很可能丢失,但是application却认为成功

               B:如果要写的扇区出问题?(ATA会尝试备用,如果仍然出现那么上层如何知道?这里我也不知道,作个遗留问题以后处理

 write-odirect

              write-odirect类似于write-sync,也是等待scsi/ata command命令结束返回才返回用户空间。唯一区别是write-odirect不用将user-data 拷贝到内核,仅仅是将user-data所在的物理page,能让kernel访问即可。

 

效率问题

        貌似generic-write最好,write-odirect次之,而write-sync最差。但是是否是这样,也需要做专门研究。

 

 

如果以上内容有什么错误,而且您有时间,请及时

                  

                

   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值