内存缓存 Ubuntu 9.10 服务器 x86 无法按预期工作

内存缓存 Ubuntu 9.10 服务器 x86 无法按预期工作

我们使用 Ubuntu 9.10 服务器来传输 Ghost 映像文件。我们只用 Samba 配置了它。DOS 客户端连接到 Samba。安装了最新更新,到目前为止,服务器运行良好。

当我们使用 2 个 2GB 文件的相同映像对 10 台电脑进行映像时,没有任何磁盘活动。所有内容都加载到 RAM 中。服务器中有 4GB。

但是当我们使用 2 台电脑,其中有 2 个不同的 500 MB (8x) 映像文件时,就会有大量连续的磁盘活动。速度会降低。

看来 Ubuntu 不会缓存超过一个大文件。是否有设置可以更改此行为?

答案1

2x 8x 500Mb 超过了您的 4Gb 机器在缓存中所能容纳的大小,因此两台 PC 中的任何一台都不太可能从缓存中获取太多数据(即,所有文件读取都导致磁盘访问)。

同时读取两个文件要比读取一个文件慢,因为磁盘磁头需要在各个文件之间翻转 - 这对观察到的性能的影响可能非常大,除非您使用固态硬盘,因为其接近于零(相对于基于旋转磁盘的驱动器)随机访问延迟,可以将这种影响最小化。

2x 2Gb 仍然会超过您的机器在任意给定时间的缓存容量,因此也无法完全缓存。但其中很大一部分可以完全缓存,因此如果机器 2 在机器 1 之后不久开始读取,它将在机器 1 的读取操作期间缓存块。使用 100Mbit 网络,在整个操作过程中,机器 2 在每个文件中的距离可能都落后于机器 1。使用 1Gbit 网络,驱动器可能是瓶颈,在这种情况下,机器 2 很快就会赶上,两者将交替进行,导致物理读取,而获取块的缓存副本。

因此我怀疑你在第一种情况下,你会看到磁盘活动(4Gb 的读取),但磁头移动很少,所以你实际上不会看到听到活动(如果您正在听驱动器的咔嗒声来判断这一点),少数磁头运动也不足以让您注意到速度差异。当第一台机器到达传输结束时,文件的开头将被推出缓存,但第二台和后续机器要么尚未启动,要么已经读取了该点以外的内容。

为了加快此过程,我建议您压缩映像文件(除非驱动器已加密,否则驱动器映像往往压缩得很好,尤其是在拍摄映像之前将可用空间清零的情况下)。这将使拍摄新映像花费更长时间,但可以节省您的恢复时间,因为它将更好地利用服务器的缓存,即使缓存中没有任何有用的东西,也会减少磁盘活动,并且还会减少网络负载(如果您在客户端解压缩)。

答案2

我认为您看到的速度变慢主要是由于网络层。 Ghost 使用多播,因此用 1 张图像对 10 台计算机进行成像与对 1 台计算机进行成像相同。 但如果您同时广播 2 张图像,那么两个广播都会争夺网络带宽。

这并不是说磁盘活动与你看到的任何性能无关。我只是提供另一种观点。

答案3

David 写道:

2x 8x 500Mb 比你的 4Gb 机器还要多

在我们对 HP7700 和 HP7800 进行的测试中,我们有 2 个图像,它们被分成 (大约 8) 个片段。每个图像只需要同时将一个 500 MB 的片段加载到缓存中。

因此 2x 500 是 1 GB。当某个段完全加载到客户端时,需要加载下一个 500 MB 的段。但我们有很多磁盘活动。(如果有一个 2 GB 的大段,并且只加载到 HP7800,服务器的磁盘什么也没做……)

3dinfluence:我们不使用多播,每个客户端直接从服务器加载。

相关内容