ext4 和 XFS 是 Linux 系统中两种常用的文件系统,目前 RHEL 默认采用 XFS 文件系统,而 Ubuntu 默认采用 ext4 文件系统。
为什么两大发行版的选择不同呢?如果要部署 TDengine,应该选择哪个文件系统?
Ubuntu 和 RHEL 默认文件系统的不同,大概基于以下两点:
- Ubuntu 主要面向桌面用户,小文件操作占比高,而
ext4在小文件操作方面具有优势。而 RHEL 主要是面向服务器,大文件、大并发写入场景较多。 - XFS 主要由 Red Hat 维护,因此 RHEL/CentOS/Fedora 这些发行版更倾向于 XFS。
ext3 与 XFS 对比
1. 概述
- ext4:
- 是
ext3的升级版,具有更好的性能和扩展性。 - 支持最大 1 EB(Exabyte)的文件系统和 16 TB 的单个文件。
- 广泛用于大多数 Linux 发行版,是默认文件系统之一
- XFS:
- 由 Silicon Graphics 开发,专注于高性能和大容量存储。
- 支持最大 8 EB 的文件系统和 8 EB 的单个文件。
- 在大型存储和高并发场景中表现优异。
2. 性能对比
特性 | ext4 | XFS |
大文件性能 | 较好,但不如 XFS | 优秀,特别适合大文件操作 |
小文件性能 | 优秀,适合大量小文件 | 较好,但不如 ext4 |
并发性能 | 一般,适合低并发场景 | 优秀,适合高并发场景 |
写入性能 | 较好,但延迟较高 | 优秀,延迟较低 |
元数据操作 | 较快 | 较慢,但支持延迟分配(延迟写入) |
3. 功能对比
特性 | ext4 | XFS |
最大文件系统大小 | 1 EB | 8 EB |
最大文件大小 | 16 TB | 8 EB |
日志功能 | 支持日志,可恢复性强 | 支持日志,可恢复性强 |
在线调整大小 | 支持在线扩展,不支持缩小 | 支持在线扩展,不支持缩小 |
快照功能 | 不支持 | 支持 |
延迟分配 | 不支持 | 支持,减少碎片化 |
碎片整理 | 支持(e4defrag) | 不需要,延迟分配减少碎片 |
4. 适用场景
- ext4:
- 适合大多数通用场景,尤其是桌面和小型服务器。
- 适合需要频繁操作小文件的场景。
- 适合对文件系统稳定性要求较高的场景。
- XFS:
- 适合大容量存储和高并发场景(如数据库、视频处理)。
- 适合需要处理大文件的场景。
- 适合需要高性能写入的场景。
5. 优缺点总结
ext4
- 优点:
- 成熟稳定,兼容性好。
- 对小文件操作性能优秀。
- 支持在线扩展。
- 缺点:
- 对大文件和高并发支持较弱。
- 不支持快照功能。
XFS
- 优点:
- 对大文件和高并发支持优秀。
- 延迟分配减少碎片化。
- 支持快照功能。
- 缺点:
- 对小文件操作性能不如 ext4。
- 元数据操作较慢。
TDengine 在 ext4 和 XFS 上性能差异
ext4 和 XFS 都是非常成熟的文件系统,但从稳定性和功能性来看,任何一种都能满足 TDengine 的部署要求。 但是从上面的介绍中,我们可以看出两个文件系统的在不同场景下性能是存在差异的。
为对比不同文件系统对 TDengine 读写性能的影响,我们选择在同一台服务器,分别安装不同操作系统版本和配置文件系统,进行对比测试。
1. 测试环境信息
为了对比 TDengine 在不同文件系统上的性能差异,我们选择了阿里云 ecs.c5.xlarge 服务器,配置为 4 核 8GB 内存 + 高效云盘。
操作系统分别选择了:CentOS 7.9,Ubuntu 22.04 和 Rocky Linux 8.9。
TDengine 版本为 3.3.5.4。
- 数据库参数
name: test4419
create_time: 2025-02-05 16:08:13.075
vgroups: 4
ntables: 6000
replica: 1
strict: on
duration: 10d
keep: 3650d,3650d,3650d
buffer: 256
pagesize: 4
pages: 256
minrows: 100
maxrows: 4096
comp: 2
precision: ms
....
encrypt_algorithm: none数据的读写均采用了 TDengine 自带压测工具 taosBenchmark,使用方法见官网。
- 数据写入
并发 4 个写入线程,创建 6000 张表,每张表写入100000 条数据。
{
"filetype":"insert",
"cfgdir":"/etc/taos",
"host":"localhost",
"port":6030,
"user":"root",
"password":"taosdata",
"thread_count":4,
"thread_count_create_tbl":100,
"num_of_records_per_req":1000,
"confirm_parameter_prompt":"no",
"databases":[{
"dbinfo":{
"name":"test4419",
"cachemodel":"'both'",
"cachesize":16,
"vgroups":4,
"drop":"yes"
},
"super_tables":[{
"name":"meters",
"child_table_exists":"no",
"childtable_count":6000,
"childtable_prefix":"tb_",
"auto_create_table":"no",
"batch_create_tbl_num":2000,
"data_source":"rand",
"insert_mode":"stmt",
"insert_interval":0,
"insert_rows":100000,
"interlace_rows":1000,
"max_sql_len":1048576,
"disorder_ratio":0,
"disorder_range":0,
"timestamp_step":100,
"start_timestamp":"2020-01-01 00:00:00",
"sample_format":"csv",
"sample_file":"",
"tags_file":"",
"columns": [{"type":"int","count":2},
{"type":"float","count":2},
{"type":"double","count":2},
{"type":"bool","count":2},
{"type":"bigint","count":2}],
"tags":[{"type":"varchar","len":8,"count":1},
{"type":"int","count":1}
]
}]
}]}- 数据查询
分布进行投影、聚会、缓存查询,每条语句查询 100 次。
query1:select * from ${db_name}.meters limit 100
query2:select last(*) from ${db_name}.meters
query3:select count(*) from ${db_name}.meters查询示例如下:
{
"filetype": "query",
"cfgdir": "/etc/taos",
"host": "localhost",
"port": 6030,
"user": "root",
"password": "taosdata",
"confirm_parameter_prompt": "no",
"continue_if_fail": "yes",
"databases": "test7202",
"query_times": 100,
"query_mode": "taosc",
"specified_table_query": {
"query_interval": 0,
"concurrent": 4,
"sqls": [
{
"sql": "select * from test7202.meters limit 100",
"result": "./query1.log"
}
]
}
}2. 测试结果
CentOS 7.9
insert(r/s) | 投影 | last | count | |
XFS | 787162.49 | 6.951 | 91.366 | 3.755 |
ext4 | 776243.06 | 6.771 | 104.877 | 3.746 |
Ubuntu 22.04
insert(r/s) | 投影 | last | count | |
XFS | 806287.21 | 7.795 | 63.664 | 3.852 |
ext4 | 811195.23 | 8.069 | 59.907 | 3.877 |
Rocky Linux 8.9
insert(r/s) | 投影 | last | count | |
XFS | 833747.28 | 8.087 | 78.064 | 4.084 |
ext4 | 806754.52 | 7.629 | 72.111 | 3.957 |
3. 测试结论
- Ubuntu 22.04 相比 CentOS 7.9 last 查询性能下降 40%,投影查询性能提升5%,聚合查询(count)无差异。
- Rock Linux 8.9 性能略高于 Ubunt 22.04,整体查询性能提升 5% 左右,写入性能无明显差异。
- 相同操作系统下,
XFS与ext4读写性能无明显差异。
4. 测试的局限性
- 测试用的数据集较小,可能无法体现
XFS文件系统优势。 - 测试服务器配置较低,压测程序和 TDengine 服务端在同一台机器,造成干扰。
结论
根据以上对比测试,TDengine 在 ext4 和 XFS 上性能无明显差异。因此文件系统爱选啥选啥。
PS: 之前在 2.6.x 版本测试时,ext4 + nobarrier 性能明显由于 XFS, 但在上面的测试中,性能变化并不明显(因此未附上测试结果)。
















