У меня есть сервер, который используется для научных вычислений, у каждого пользователя есть виртуальная машина (Linux или Windows) для своего использования. Проблема в том, что отчеты, генерируемые этими вычислениями, занимают огромный объем памяти, когда этот сервер используют много пользователей.
Я хочу узнать, есть ли способ сжать выходные данные, не после завершения отчета, а когда он будет записан на диск.
обновление1:Мы используем Vsphere в качестве гипервизора и HDD для хранения данных.
решение1
Вы можете инлайн сжимать и/или дедуплицировать свое хранилище. Есть несколько способов сделать это — некоторые проще, некоторые эффективнее.
Для начала, системы Linux и UNIX могут использовать ZFS — файловую систему и менеджер томов, который поддерживает как сжатие, так и дедупликацию на уровне блоков. Любая общая или локальная система хранения, построенная поверх этого, может использовать эти функции, поэтому что-то такое простое, как NFS поверх ZFS, может делать то, что вам нужно, с общим пулом на всех виртуальных машинах.
Linux может использовать btrfs, которая является файловой системой для нескольких устройств, которая поддерживает встроенную дедупликацию и сжатие. Те же идеи, что и выше. Btrfs имеет меньше требований к оборудованию, чем ZFS, но встроенная дедупликация все еще довольно интенсивна (например, вам было бы лучше делать это в более крупном общем наборе данных, используя любую файловую систему). Что следует иметь в виду о btrfs, так это то, что это в первую очередь файловая система, а во вторую — менеджер томов. Она также не предлагает абстракций на основе блоков, как ZFS, поэтому это чисто файловая система.
Существует несколько предложений NAS/SAN, включающих эту функциональность. Использование одного из них для общего хранилища позволит эффективно использовать дедупликацию и сжатие, будучи при этом готовым и поддерживаемым продуктом. FreeNAS — пример одной из таких систем, которая может использовать ZFS. Устройства Synology NAS также могут использовать и часто используют btrfs.
решение2
Я согласен с @SmallLoanOf1M, но еще одна идея, которую вы могли бы реализовать, — это сжать отчеты внутри виртуальной машины. Таким образом, вы не будете нагружать базовый гипервизор (например, Xen Dom0) и поместите его в пределы ограничений ЦП виртуальной машины.
Если вы можете передать данные, вы всегда можете сделать что-то вроде:
report-generator-program | lz4 > report-file.lz4
Или используйте gzip
, если вам нужно более медленное, но лучшее сжатие, или xz
если вы хотите расплавить свой процессор.