Yur*_*kov 16 windows ntfs ext4
根据我作为在 Windows 工作站上工作的 Java 开发人员的观察,与 Linux 文件系统相比,NTFS 速度较慢。问题是,NTFS 驱动程序中是否有任何可以手动调整的内容,例如为其提供更多内存用于缓存?启用一些实验算法?如果那不可用,是否有另一种文件系统可以在 Windows 上使用,甚至可能是商业的,它比 NTFS 快?
需要明确的是,我不希望提高 Maven 项目的编译速度,我希望对操作系统进行全面改进。我有一种感觉,与 Linux 文件系统相比,NTFS 早已过时且缓慢。让我感到奇怪的是,地球上最流行的操作系统只有一个仍然需要手动碎片整理的文件系统。也许,是一种替代?
更新:根据我的观察,这是缓慢的。我正在构建/打包一个项目,这意味着在磁盘上进行大量读/写操作。构建系统是跨平台的(Java、Maven),因此我可以在启动到 Ubuntu 时执行完全相同的操作,例如。
在 Linux 上,我的构建速度至少快了 1/3。因此,关于文件系统的问题。如果放错了地方,我很抱歉。
我想真正的解决方案是重写您的构建系统,以便它使用本机 Windows 文件系统 API,而不是可移植性框架下的 unix API(fopen 等)本身。但这不会发生,所以基本上你会坚持他们认为可以接受的任何性能水平。
通常在使用最初不是为 Windows 编写的系统时,您会发现目录遍历处理得非常糟糕,因此请确保您有一个非常扁平的目录树。
虽然我希望看到 ZFS 之类的东西可用于 Windows 主机,但 NTFS 并不是一个可怕的文件系统。它支持大多数“现代”文件系统功能(扩展属性、日志记录、ACL,等等),但它受到 Explorer 和大多数其他不支持这些功能的应用程序的阻碍。
绝对会影响其性能的一件事是目录中的条目“太多”。一旦你在一个目录中传递了几千个条目,一切都会变得缓慢。从字面上看,当发生这种情况时,整个计算机将停止等待 NTFS 创建或删除条目。
我曾经使用过一个为 .NET 程序集生成基于 HTML 的文档的应用程序;它会为每个属性、方法、类、命名空间等创建一个文件。对于较大的程序集,我们会看到 20+k 个文件,它们都很好地转储到一个目录中。在 NTFS 上构建期间,机器将花费几个小时。
理论上,Windows 支持文件系统插件,这将使本机 ZFS、ext3 或任何(甚至 FUSE)成为可能。实际上,API 没有文档记录,因此您完全依靠自己。
现在,既然您正在进行 Java 开发,您是否可以在计算机上安装不同的操作系统,或者在 Windows 之上使用 VM?
另外,您可能想尝试一些独立于平台的文件系统基准测试(iozone、bonnie...可能有更现代的基准测试,我根本不知道,甚至可能有一些是用 Java 编写的)来看看它是否有效实际上是文件系统阻碍了你,或者是其他原因。过早的优化以及所有这些......