Git 测试下载不保存

Git test to download without saving

我需要测试 git 在特定网络设置上的性能。 我不希望我的测试测量硬盘写入时间或任何其他文件系统计时,但仅测量网络。

是否有任何技巧可以使 git 下载为“空”或类似的?

注意: 无奈之下,我可用的 PC 运行 Windows 10.

谢谢!

如果您有足够的 RAM,可以使用 ramdisk。

如果 space 是一个问题,当文件/目录出现时,如果 CPU 扫描它们的负载(或等待通知) 不干涉。一个新的 GIT 克隆可能主要是一个大文件,所以这无济于事。


如果您使用 Linux 而不是 Windows,您可以使用很多很酷的技巧

其中一些可能有 Windows 等价物,但我不知道它们是什么。其中一些可能在 Linux 上也不可行。

在 Linux 上,您可以编写一个程序,使用 inotify 侦听要创建的文件,然后使用 ftruncate 丢弃它们写入的块。类似于 SSD TRIM 操作,但在文件系统中的文件上打孔(使其稀疏),因此文件系统不需要存储这些块。
您可以在 tmpfs 文件系统上执行此操作,就像 /tmp 通常那样; go-to low-overhead Linux ramdisk-like 文件系统根本不使用 block-device,实际上只是内核的 in-memory VFS 缓存基础结构。

(Windows 当然,在另一个进程打开文件进行写入时打开文件会很不方便。)

或者在 Linux 上,您可以使用一个 device-mapper 虚拟设备,其中包含一些实际存储(虚拟磁盘)和一个由“丢弃”或“零”设备支持的更大区域离开写道。 (类似于 Simulate a faulty block device with read errors? 但使用“零”而不是“错误”设备,或 linear/dev/zero)。一些文件系统类型可能能够 mkfs 并挂载在这样的文件系统上,尽管如果任何元数据从 RAM 中被逐出并读回,则由于全零而回读可能会崩溃/恐慌很多文件系统。

或者,如果您使用像 XFS 或 BTRFS 这样的文件系统,可以将元数据放在一个设备上,将文件内容放在另一台设备上,您可以将元数据放在 ramdisk 上,将文件数据放在 /dev/zero(丢弃写入,读作零)。 (预期 use-case 用于快速磁盘或 SSD 的快速 RAID10 上的元数据,速度较慢的 RAID5 或 RAID6 上的数据,尤其是 lower-RPM spinning rust。)

FUSE(User-Space 中的 FS)文件系统可能也可以做到这一点,甚至可以按名称选择性地过滤文件以丢弃或保留其数据,因此 GIT 如果它不会损坏试图读回它的数据。或者保留每个文件的前 16kiB,因此可以读回 headers / 文件类型。不过,FUSE 是额外的文件系统开销。