У меня есть несколько серверов, которые выполняют много операций по архивированию файлов. Это также означает, что все файлы должны быть удаленно загружены перед тем, как они будут сжаты и удаленно загружены, или удаленно переданы клиентам.
У меня есть возможность либо обновить старые серверы, либо получить новые.
Характеристики старого сервера составляют около 3.1 GHz
и средняя пропускная способность 100 Mbps
. Характеристики нового сервера составляют около 2.4 GHz
и гарантированная пропускная способность 1000 Mbps up to 2000 Mbps
. Использование памяти должно остаться прежним или быть уменьшено в новой итерации.
На данный момент я выяснил использование оперативной памяти и диска. Это не проблема. Вопрос в том, как скорость ЦП и пропускная способность влияют на потоковые загрузки.
Вот мои варианты.
Какой вариант лучше для моего варианта использования?
решение1
Вам следует отслеживать использование ЦП и пропускной способности на ваших текущих серверах, когда они выполняют эти «операции по архивированию».
Если они используют 100% ЦП, выбирайте более быстрые ЦП; если они используют 100% пропускной способности, выбирайте более высокую пропускную способность.
Также обратите внимание, что новые процессоры могут быть намного быстрее старых, независимо от номинальных значений тактовой частоты; количество ядер процессора также имеет значение (при условии, что эти «операции по архивации» являются многопоточными и/или выполняются параллельно).
решение2
Если вы собираетесь найти некое «оптимальное» решение, вам нужно выяснить, какой объем данных может проходить через ваши шины данных. Оптимальным было бы, если бы данные поступали на какую-то сетевую карту, считывались с процессора и напрямую архивировались в память сетевой карты.
Предположим, вы получили
- 2 (чтобы не путаться при отправке и получении) 10-гигабайтные сетевые карты с 8 полосами PCI Express 4 каждая (15 ГБ/с для каждой), при условии, что вы сможете найти материнскую плату, которая это поддерживает.
- вы инвестируете в процессор+MB, которые действительно могут это поддерживать, RyZen 5950X+x570
Затем идет пропускная способность памяти.
- the вышесистема обеспечивает скорость чтения/записи около 54 ГБ/с или копирования 48 ГБ/с
- сетевые диски могут копировать полученные данные в оперативную память (через кэш или нет)
- скорее всего, вы еще не воспользовались преимуществамиотправка нулевого копированияноболее вероятноотправка приведет к созданию 3-6 копий.
- то же самое, вероятно, происходит и при приеме, но в этом случае ЦП должен прочитать его по крайней мере один раз, чтобы заархивировать его, если повезет, то напрямую в кэш, если нет, то из памяти, и то же самое, когда он заархивирован в кэш, сетевая карта может скопировать его напрямую в свой внутренний буфер отправки.
Так что в лучшем случае, с лучшими сетевыми картами, драйверами на уровне пользователя, всегда загружайте кэш
- копирование из сетевой карты в кэш без обратной записи в ОЗУ
- zip из кэша в кэш
- копировать из кэша на сетевую карту
- Если предположить, что 32 потока могут его обработать, то можно получить пропускную способность 10 ГБ/с.
Если у вас нет доступа к этому счастливому сценарию, скорее всего, вы ограничены пропускной способностью памяти, поскольку
- предполагается 3 копии для перемещения данных в приложение
- 2 копии для загрузки в zip-архив и сохранения результата
- 3 копии для отправки
- и много кэш-обратных записей, чтобы связать все это во тьме
Предполагая 7 чтений и 7 записей, предел должен быть около 54 ГБ/с / 14 = 3,85 ГБ/с в лучшем случае. При меньшем количестве чтений/записей вы быстро упретесь в максимальную скорость NIC.
Таким образом, с этого момента вы можете сокращать спецификации до тех пор, пока не будете соответствовать своему бюджету или потребностям.
Мне не удалось найти никаких данных по многопоточному сжатию в памяти.