小编Yao*_*ang的帖子

ext4 文件系统中的文件是否允许恒定时间查找?

我正在使用 Tensorflow 的 TFRecords 格式,它将一堆数据点序列化到一个大文件中。这里的典型值是每个数据点 10KB,每个大文件 10,000 个数据点,一个大文件大约 100MB。TFRecord 通常只写入一次 - 它们不会被附加。我认为这意味着它们不会非常分散。

我相信 TFRecords 是基于 Google 的内部 RecordIO 格式。

通常人们在 Ubuntu 18.04 或 20.04 上运行 Tensorflow 和 TFRecords,我认为这通常是 ext4 文件系统。

通常,深度学习工程师在 SSD/NVME 磁盘上运行。与 GPU 本身的巨大成本相比,磁力旋转盘的成本增量并不重要。

问题一:

在 ext4 文件系统中,如果我知道某个特定数据点是文件中的 9,000,000 字节,我可以查找该位置并开始在恒定时间内读取该数据点吗?我所说的恒定时间只是作为搜索深度的函数。我不担心文件总大小的影响。

如果这是真的,则意味着 ext4 文件系统中的每个文件都有某种查找表/索引,将查找位置映射到磁盘扇区。

我已经几十年没有研究过文件系统了,但我似乎记得 FAT 文件系统是链表——你必须读取一个磁盘扇区才能知道下一个磁盘扇区是什么。这意味着要在文件中查找 9,000,000 字节,我需要从前 8,999,999 字节读取所有磁盘扇区。例如,寻道时间与寻道的“深度”成线性关系。我希望 ext4 是恒定时间,而不是线性的。

问题2:

我的最终目标是对 TFRecord 执行随机访问。由于我认为与优化磁旋转盘片读取速度有关的原因,TFRecord 是为串行读取而不是随机访问而设计的。

无论查找函数是否是恒定时间(作为查找深度的函数),随机访问 ext4 文件系统上的大文件是否“足够快”?老实说,我并不确切知道足够快的速度是多少,但为了简单起见,假设一个非常快的深度学习模型可能每秒能够提取 10000 个数据点,其中每个数据点约为 10KB,并从一个大文件中随机提取。

ext4

3
推荐指数
1
解决办法
518
查看次数

标签 统计

ext4 ×1