在 18.04.01 LTS 上使用 RamDrive 和 HandBrake

在 18.04.01 LTS 上使用 RamDrive 和 HandBrake

我想利用一些未得到充分利用的 RAM 来创建一个 RAM 驱动器,以便系统上一些负担很重的软件可以通过使用这些 RAM 获得一些帮助。

我特别想跑手刹,最好是使用 GUI。我有相关的软件和有关如何创建实际 RAM 驱动器的信息,所以我不需要帮助,但我想知道

  1. 我可以设置 Handbrake 以便它在进行某些计算时优先使用 RAM 驱动器而不是临时文件目录吗?这可能有助于改进,如果没有...

  2. 是否可以将我的 Handbrake 安装在特定的地方(比如实际的 RAM 驱动器上,以便它会自动使用它;我注意到 Ubuntu 从不询问安装位置,它只是将它想要的东西放在它想要的地方,我们对此几乎没有选择)。

  3. 但我也想知道“我可以在 RAM 驱动器上安装任何东西吗,或者它是否只能与具有允许您强制使用 RAM 驱动器作为临时工作驱动器的设置的东西一起使用,或者所有软件是否都只是安装在原来的位置并且不可更改(从外行人的角度来看)”的答案。

Handbrake 确实使我的处理器工作非常辛苦,而且变得非常热,这也是之前选择作为随机示例的另一个原因。

答案1

Handbrake 是一款视频转换工具。视频转换工具往往对 CPU/GPU 要求较高,而不是对 IO 要求较高。

在 CPU 上编码,我通常每秒获得 25-100 帧。如果你有一部 50Mb/s 24fps 的电影,这意味着你必须摄取 200Mb/s 或 25MB/s。这是顺序的从文件中读取,这是最简单和最可预测IO。即使是转速为 5400RPM 的廉价笔记本电脑硬盘也能毫无问题地跟上这一速度。

即使将编码率提高四倍,达到 400fps,也只有 100MB/s。这在 7200rpm 硬盘的范围内,而且琐碎的对于 SSD。使用 RAM 缓存视频转换数据可能不会对编码速度有任何改善,除非您拥有专门用于视频编码的硬件。在这种情况下,最好的办法可能是使用快速 SSD,它可以轻松处理每秒 GB 的数据。

只有当磁盘 IO 是瓶颈时,RAM 才有意义。要进行优化,你应该第一的找出实际的瓶颈,然后找出可以采取哪些措施来解决该瓶颈。

此外,将 RAM 专用于 RAM 驱动器可能会使速度变慢。Linux 非常擅长在未使用的 RAM 中缓存内容。但是,如果你强制它使用专用 RAM 驱动器来缓存某些内容,那么你可能会冒着可以从缓存中受益的将不会被缓存。

当然,在某些情况下您希望明确地将内容缓存在 RAM 中……

  1. 你必须缓存一些输入以供处理,迅速地。例如,这可能是来自某个外部传感器的突发数据,该传感器在短时间内以比磁盘更快的速度传输数据。在这种情况下,在写入磁盘之前对其进行缓存是一种很好的策略。

  2. 您有一个 IO 绑定的进程,需要临时存储数据集。

  3. 您有一些(少量)您不关心但暂时需要的数据。例如,这可能是 Web 服务器的 phpsession 文件。

在许多情况下,第二个示例可以用管道代替,这样就不需要存储了。只有在必须立即提供完整数据集的情况下才需要存储。

在大多数其他情况下,您无论如何都必须将数据读取或写入磁盘。如果您想保留转码的结果,则必须将其移动到磁盘。如果您想将要转码的视频移动到 RAM 驱动器,您必须先从磁盘读取它,依此类推...

请记住,操作系统默认将文件缓存在 RAM 中。每当操作系统读取文件时,它都会缓存在 RAM 中。当写入文件时,它也会缓存。

答案2

通常,Linux 上的应用程序使用专用的 tmp 目录 /tmp 或 /var/tmp 来存放临时文件。/tmp据称,/tmp 是供短期快速使用,而/var/ /var/tmptmp 应在启动之间持续存在。如果您的目标是减少 SSD 磁盘的磨损,那么将 /tmp 移至 RAM 将消除应用程序写入这些临时目录时 SSD 磁盘的活动。

你可以移动/tmp到 RAM 并添加此行到你的/etc/fstab

tmpfs /tmp tmpfs rw,nosuid,nodev,noatime 0       0

tmpfs 文件系统使用的内存会根据需要增加或减少。如果内存不足,则使用交换。默认情况下,Ubuntu 已经默认将 tmpfs 用于 等目录/run/dev/shm

显然,这是一个通用答案。如果应用程序也使用 /tmp 作为其临时文件,那么它对 Handbrake 也有所帮助。

相关内容