Successfully reported this slideshow.
Your SlideShare is downloading. ×

Ext4 new feature - bigalloc

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Overlayfs and VFS
Overlayfs and VFS
Loading in …3
×

Check these out next

1 of 17 Ad

More Related Content

Advertisement

Recently uploaded (20)

Ext4 new feature - bigalloc

  1. 1. ext4 即将到来的新特性— bigalloc Robin Dong <sanbai@taobao.com>
  2. 2. ext4硬盘布局 Image from: http://learn.akae.cn/media/ch29s02.html
  3. 3. ext4向后兼容ext2的文件布局 Image from: http://e2fsprogs.sourceforge.net/ext2intro.html
  4. 4. ext4 <ul><li>ext4 继承了 ext2/ext3 的所有特性
  5. 5. 支持更大的文件系统
  6. 6. 最大文件大小: 16TB
  7. 7. 最大文件系统: 1EB(1048576TB) </li></ul>
  8. 8. ext4: extent Image from: http://www.ibm.com/developerworks/cn/linux/l-cn-filesrc5/
  9. 9. ext4: extent <ul><li>一个 ext4_extent 可以管理最多 128MB 连续空间.
  10. 10. 比如: 一个ext3下300G 的文件需要占用300MB 的硬盘空间做元数据, 但是 ext4 只需要占36KB 的元数据空间 </li></ul>
  11. 11. ext4: flex_bg <ul><li>将 Block-Bitmap/Inode-Bitmap/Inode-table 都合并到 Group 0
  12. 12. 优点: 合并 Group 1,Group 2,Group 3 的空闲空间(尤其针对ext4的 extent ) </li></ul>
  13. 13. ext4: flex_bg
  14. 14. 为何“连续磁盘空间”这么重要? <ul><li>我们用dd向裸盘写入512MB的数据,每次写入64K,共写8192次 </li><ul><li>连续顺序写入:17s
  15. 15. 间断写入(每64K中间隔开64K):26s
  16. 16. 间断且倒序:36s </li></ul></ul>
  17. 17. 为何需要超过4K的block(或称cluster)? <ul><li>一个group将有更大的空间 </li><ul><li>group受制于“只能有一个bitamp”
  18. 18. 4K block的group最大只能是8*4k*4k=128MB
  19. 19. 1MB block的group最大可以是
  20. 20. 8*4k*1M=32G
  21. 21. group更大,同样磁盘的group数量就更少,元数据的消耗就更小(flex_bg只能把空间挪到一起,并不能省掉) </li></ul></ul>
  22. 22. 为何需要超过4K的block?(续2) <ul><li>多进程写文件时会有更少的磁盘碎片 </li><ul><li>多个进程在同一个目录下append写各自的文件,ext4很可能会交错的分配空间给不同的文件,造成大量碎片(Hadoop)
  23. 23. block为1MB(或更大)后,碎片问题会大大减轻 </li></ul></ul>
  24. 24. 测试数据 <ul><li>格式化磁盘后的可用空间 </li><ul><li>block=4K
  25. 25. Used:13.7G
  26. 26. block(cluster)=1M
  27. 27. Used: 220MB
  28. 28. 对于SSD硬盘,可以明显节省资金 </li></ul></ul>
  29. 29. 测试数据 1MB reclen write rewrite read reread Random read Random write 4 1021229 2226988 5163350 5144151 3319442 1857122 64 1239168 2978500 5566931 5577146 5359078 2903430 128 1248447 2798077 5400834 5421413 5289500 3100575 4KB 4 392793 2354612 4116700 4133532 2640467 1597213 64 407604 3008902 4861479 4877976 4628770 2686106 128 475582 2786031 5318219 5336632 5165450 3127195 工具:iozone 单位:KB/sec 写4G大小的文件
  30. 30. 测试数据 <ul><li>启动4个进程分别append写4个文件(写到128MB为止),每个进程都是
  31. 31. dd if=/dev/urandom of=/test/large$1 bs=4096 count=32768
  32. 32. delalloc + bigalloc </li><ul><li>block=4K
  33. 33. 平均文件碎片数:5
  34. 34. block=1M
  35. 35. 平均文件碎片数:3
  36. 36. 云梯1(hadoop集群)文件碎片在3~7左右,如果能减少到4,即可节省一个block和一次IO(读取时) </li></ul></ul>
  37. 37. bigalloc的缺陷 <ul><li>即使创建一个空目录或一个小文件,也要占用一个cluster,对于目录或小文件繁多的应用,会很浪费硬盘(内存没有浪费) </li><ul><li>使用inline data可以解决此问题 </li></ul><li>目前,一个extent block实际也占用一个cluster </li></ul>
  38. 38. 接下来的工作 <ul><li>目前只是bitmap里的一个bit代表一个cluster,extent里的ee_len还是表示block数(考虑到mmap带来的问题)
  39. 39. 一个extent能指向更大的连续磁盘空间 </li><ul><li>ee_len只有16位,且最高位用于做flag,最多能管理的空间大小是(2 16 -1)*4K = 128MB
  40. 40. blok扩大为1MB后,一个extent能管理 (2 16 -1)*1MB = 64G连续空间
  41. 41. 一个extent管理的空间越大,文件需要的extent就更少,extent就更有可能放到inode中,这样,读文件就少了一次IO </li></ul></ul>
  42. 42. Q & A Thanks!

×