分类: LINUX
2009-12-04 16:41:53
1. 与 Ext3 兼容。执行若干条命令,就能从 Ext3 在线迁移到 Ext4,而无须重新格式化磁盘或重新安装系统。原有 Ext3 数据结构照样保留,Ext4 作用于新数据,当然,整个文件系统因此也就获得了 Ext4 所支持的更大容量。
2. 更大的文件系统和更大的文件。较之 Ext3 目前所支持的最大 16TB 文件系统和最大 2TB 文件,Ext4 分别支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系统,以及 16TB 的文件。
3. 无限数量的子目录。Ext3 目前只支持 32,000 个子目录,而 Ext4 支持无限数量的子目录。
4. Extents。Ext3 采
用间接块映射,当操作大文件时,效率极其低下。比如一个 100MB 大小的文件,在 Ext3 中要建立 25,600 个数据块(每个数据块大小
为 4KB)的映射表。而 Ext4 引入了现代文件系统中流行的 extents 概念,每个 extent
为一组连续的数据块,上述文件则表示为“ 该文件数据保存在接下来的 25,600 个数据块中”,提高了不少效率。
5. 多块分配。当
写 入数据到 Ext3 文件系统中时,Ext3 的数据块分配器每次只能分配一个 4KB 的块,写一个 100MB 文件就要调用 25,600
次数据 块分配器,而 Ext4 的多块分配器“multiblock allocator”(mballoc) 支持一次调用分配多个数据块。
6. 延迟分配。Ext3 的数据块分配策略是尽快分配,而 Ext4 和其它现代文件操作系统的策略是尽可能地延迟分配,直到文件在 cache 中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显著提升性能。
7. 快速 fsck。以前执行 fsck 第一步就会很慢,因为它要检查所有的 inode,现在 Ext4 给每个组的 inode 表中都添加了一份未使用 inode 的列表,今后 fsck Ext4 文件系统就可以跳过它们而只去检查那些在用的 inode 了。
8. 日志校验。日志是最常用的部分,也极易导致磁盘硬件故障,而从损坏的日志中恢复数据会导致更多的数据损坏。Ext4 的日志校验功能可以很方便地判断日志数据是否损坏,而且它将 Ext3 的两阶段日志机制合并成一个阶段,在增加安全性的同时提高了性能。
9. “无日志”(No Journaling)模式。日志总归有一些开销,Ext4 允许关闭日志,以便某些有特殊需求的用户可以借此提升性能。
10. 在线碎片整理。尽管延迟分配、多块分配和 extents 能有效减少文件系统碎片,但碎片还是不可避免会产生。Ext4 支持在线碎片整理,并将提供 e4defrag 工具进行个别文件或整个文件系统的碎片整理。
11. inode 相关特性。Ext4 支
持更大的 inode,较之 Ext3 默认的 inode 大小 128 字节,Ext4 为了在 inode 中容纳更多的扩展属性(如纳秒时间戳
或 inode 版本),默认 inode 大小为 256 字节。Ext4 还支持快速扩展属性(fast extended
attributes) 和 inode 保留(inodes reservation)。
12. 持久预分配(Persistent preallocation)。P2P 软
件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失 败。
Ext4 在文件系统层面实现了持久预分配并提供相应的 API(libc 中的 posix_fallocate()),比应用软件自己实现更有
效率。
13. 默认启用 barrier。磁
盘 上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写 commit 记录, 若
commit 记录写入在先,而日志有可能损坏,那么就会影响数据完整性。Ext4 默认启用 barrier,只有当 barrier 之前的数据
全部写入磁盘,才能写 barrier 之后的数据。(可通过 "mount -o barrier=0" 命令禁用该特性。)
Ext4 随 Linux
kernel 2.6.28 正 式发布已有数周,一直苦于找不到测试用的磁盘,正巧年前 Intel 送来几块 SSD 测试样品,这两天就顺带把
SSD 也测了。测试所使用 的 Linux 内核版本为 2.6.28.2,测试工具为 IOzone 3.318。
测试命令为:
time /opt/iozone/bin/iozone -a -s 4G -q 256 -y 4 >|/root/ext4-iozone-stdout.txt
上述命令的说明如下:
Auto Mode
File size set to 4194304 KB
Using Maximum Record Size 256 KB
Using Minimum Record Size 4 KB
Command line used: /opt/iozone/bin/iozone -a -s 4G -q 256 -y 4
Output is in Kbytes/sec
Time Resolution = 0.000001 seconds.
Processor cache size set to 1024 Kbytes.
Processor cache line size set to 32 bytes.
File stride size set to 17 * record size.
测试结果除了表明 Intel SSD 的读写速度快得令人咋舌之外,还可以说明 Ext4 的各方面性能都超过了上一代 Ext3,甚至在大多数情况下,比没有日志功能的 Ext2 还要快出不少:
<
|
reclen | write | rewrite | read | reread | random read | random write | bkwd read | record rewrite | stride read | fwrite | frewrite | fread | freread |
Ext2 real 28m12.718s user 0m10.725s sys 5m8.265s |
4 | 218680 | 216596 | 630248 | 245802 | 88700 | 138065 | 106112 | 1882623 | 73538 | 214175 | 218364 | 566570 | 247381 |
8 | 215308 | 218690 | 556064 | 246260 | 154680 | 150052 | 188397 | 2462367 | 130896 | 217157 | 216647 | 583808 | 248397 | |
16 | 216457 | 216843 | 575046 | 245701 | 258660 | 158750 | 306842 | 2654320 | 220939 | 216061 | 218140 | 598174 | 246581 | |
32 | 217925 | 214289 | 537976 | 243081 | 394013 | 167002 | 464240 | 2397831 | 340775 | 217434 | 219353 | 583463 | 246341 | |
64 | 215460 | 219256 | 527919 | 244362 | 503227 | 162917 | 609546 | 2546079 | 456243 | 216875 | 217692 | 571707 | 244264 | |
128 | 219081 | 216173 | 540831 | 242526 | 609750 | 161442 | 721701 | 2656729 | 551122 | 217780 | 217427 | 579271 | 242291 | |
256 | 216091 | 217631 | 565111 | 245157 | 654274 | 173955 | 870547 | 2574261 | 634835 | 216638 | 219693 | 563735 | 247101 | |
Ext3 real 27m42.449s user 0m11.529s sys 7m17.049s |
4 | 218242 | 213039 | 482132 | 243986 | 88007 | 156926 | 105557 | 1540739 | 75010 | 216028 | 216432 | 522704 | 243385 |
8 | 218390 | 217915 | 544892 | 244979 | 152424 | 190454 | 181486 | 1945603 | 130737 | 218364 | 216431 | 530853 | 243222 | |
16 | 218083 | 217683 | 561038 | 244506 | 255244 | 200032 | 300212 | 2096495 | 221329 | 216930 | 216661 | 514177 | 244069 | |
32 | 216258 | 217013 | 569246 | 243811 | 389745 | 198275 | 446462 | 1934853 | 338785 | 216809 | 219296 | 530634 | 243446 | |
64 | 218850 | 217711 | 577529 | 243725 | 497689 | 201693 | 589535 | 2036412 | 450449 | 219387 | 214900 | 514353 | 244809 | |
128 | 220234 | 215687 | 530519 | 241615 | 608244 | 199619 | 714295 | 1992168 | 553022 | 217828 | 218454 | 513596 | 241510 | |
256 | 216011 | 220188 | 592578 | 242548 | 642341 | 199408 | 834240 | 2092959 | 624043 | 217682 | 218165 | 529358 | 242878 | |
Ext4 real 27m3.485s user 0m10.847s sys 6m9.578s |
4 | 221823 | 216992 | 532488 | 273668 | 85210 | 183195 | 103036 | 1862817 | 74781 | 225841 | 220620 | 523799 | 272848 |
8 | 226028 | 218580 | 561960 | 272036 | 154972 | 216505 | 178482 | 2135372 | 132506 | 227423 | 215766 | 641021 | 271328 | |
16 | 222241 | 217746 | 547548 | 270895 | 260899 | 223895 | 295288 | 2095966 | 223135 | 226055 | 216210 | 621287 | 273475 | |
32 | 220121 | 213025 | 240426 | 247628 | 345210 | 175977 | 451631 | 2145351 | 342236 | 225796 | 213427 | 598331 | 269759 | |
64 | 223983 | 214437 | 308696 | 551577 | 754941 | 225897 | 523130 | 2218016 | 448086 | 227030 | 214706 | 582795 | 272323 | |
128 | 222576 | 217816 | 624636 | 271293 | 644500 | 224997 | 720468 | 2308315 | 582943 | 225971 | 217373 | 552335 | 274237 | |
256 | 221202 | 222238 | 541685 | 270898 | 671748 | 228085 | 845494 | 2215381 | |
|
|
|
|
注:
1. 关于 IOzone 测试方法,参考 Ben Martin 的文章:
2. 关于 Ext4 的相关内容,参考 Kernel Newbies 专页: