最新消息:

Linux ext3/ext4文件系统中同步写放大问题

ext4 admin 3722浏览 0评论

现象:

   客户在ext4文件系统下,以4KB数据块大小同步写性能在47MB/s左右,和PCI-E SSD 4K同步写性能200MB/s有差距。

根因分析:

   1、文件系统下4KB同步写性能与200MB/s有差距,与文件系统行为有关。文件系统存在写放大,导致性能降低。

     在裸设备下(无文件系统),以单进程4KB同步写,PCI-E SSD卡性能可以达到200MB/s

     在文件系统下,4KB同步写时,通过iostat命令看到的底层SSD写带宽也可达到200MB/s

   2、为什么ext3/ext4文件系统存在写放大?

     由于ext3/ext4是具有Journal(日志卷)功能,上层程序每写一个I/O数据块到存储,文件系统都会同时更新数据块对应的Journal

     每个Journal大小是固定的,通常设置为32KB。也就是不管上层的I/O数据块多大,往存储每写一个数据块,都必须要更新32KBJournal4KBMetadata

     即虽然上层程序只写4KB数据,但事实上写到PCI-E SSD上的数据量为4KB(客户数据)+32KB(文件系统的Journal+4KBMetadata)。若数据块大小为1MB

     写到PCI-E SSD上的数据量为1MB(客户数据)+ 32KB(文件系统的Journal+ 4KBMetadata)。32KBJournal会分为5I/O写,进一步降低写性能

     写数据块大小为4KB时,写到 SSD的有效数据量只有4KB/(4KB+32KB+4KB) = 10%

     当数据块大小为32KB时,写到SSD的有效数据量为32KB/32KB+32KB+4KB= 47%

     当数据块大小为512KB时,写到SSD的有效数据量512KB/512KB+32KB+4KB= 93.4%

           注意:这里只是有效数据比例,和有效性能带宽不是一回事。

      也就是小数据块下,同步写时,写到PCI-E SSD(所有存储介质都一样)的有效数据量小。

    3、是否有性能提升方法?

      由于写放大是文件系统的Journal日志更新导致,提升性能的唯一方法是尽可能减少Journal的更新或提升Journal写性能。

      客户需要稳定、可靠的文件系统,故不能关闭ext3/ext4文件系统的Journal功能。

      可能的性能提升手段:

  1. 格式化文件系统时,调整Journal Size大小。
  2. 调整文件系统mount是的Journal模式(dataorderedwriteback三种模式比较)。

 

转载请注明:爱开源 » Linux ext3/ext4文件系统中同步写放大问题

您必须 登录 才能发表评论!