Я работаю с высокопроизводительным оборудованием, однако я сталкиваюсь с узкими местами процессора во всех ситуациях, когда пытаюсь переместить большие объемы данных.
В частности, я перемещаю файлы больших образов виртуальных машин (VHD) размером 2 ТБ между двумя хостами Ubuntu.
Моя последняя попытка заняла 200 минут, чтобы передать 2 ТБ. В результате скорость передачи составляет около 170 МБ / с.
Я пробую такие методы, как netcat и scp с базовым шифром arcfour.
Аппаратное обеспечение на каждом конце - это 6 твердотельных накопителей корпоративного уровня в RAID 10 на аппаратном RAID-контроллере. 256 ГБ памяти и процессоры Xeon V4. Сеть составляет 20 Гбит / с (2 x 10 Гбит / с LACP).
Во всех случаях сеть и дисковый ввод-вывод имеют достаточно емкости, узким местом является постоянная привязка 1 ядра ЦП к 100%.
Я выполнил базовые тесты, используя различные методы, а именно:
scp: реальные 5 мин. 1. 970 сек.
NC: реальные 2m41.933s
NC & PIGZ: настоящие 1 мин. 24,139 сек.
Однако, поскольку у меня был пустой файл для тестирования, я не верю, что pigz приходилось слишком много работать. Когда я попытался использовать pigz для производственного файла VHD, pigz достигла 1200% загрузки ЦП, я считаю, что это стало узким местом. Поэтому мое самое быстрое время было установлено NC самостоятельно.
nc загружает 100% ЦП на каждом конце, я предполагаю, что просто обрабатывает ввод-вывод с диска в сеть.
Я действительно думал о разделении файла на куски и запуске нескольких nc, чтобы использовать больше ядер, однако у кого-то может быть лучшее предложение.
Несколько вещей, которые стоит попробовать:
sendfile
(например, apache)В База знаний ESnet Fasterdata - отличный ресурс для оптимизации перемещения данных по быстрым сетям.
Ваши конечные точки физически находятся рядом друг с другом? Возможно, рассмотрите другой сетевой носитель, который предназначен для перемещения пакетов данных. Обработка ЦП может быть перенесена на карту адаптера, и ваш Ethernet не будет загружен в течение нескольких минут.
Ниже приведена (бюджетная) установка Infiniband, которая стоит около 500 долларов из частей Ebay (коммутатор Mellanox IS5022, 2 карты CX353A QDR (возможно, FDR, не помню) и (новые) кабели). Я побежал dd
от гипервизора, на котором работает более 20 виртуальных машин, поэтому в нем есть изрядная задержка ввода-вывода. Однако перенос SSD (крепление iSCSI) по-прежнему заслуживает внимания.
В массив SATA (RAID 10):
# time dd if=/dev/zero of=foo.bin bs=1M count=30000
30000+0 records in
30000+0 records out
31457280000 bytes (31 GB, 29 GiB) copied, 106.652 s, 295 MB/s
real 1m52.795s
user 0m0.022s
sys 0m12.531s
И в массив SSD
# time dd if=/dev/zero of=foo.bin bs=1M count=30000
30000+0 records in
30000+0 records out
31457280000 bytes (31 GB, 29 GiB) copied, 19.1353 s, 1.6 GB/s
real 0m19.137s
user 0m0.020s
sys 0m18.782s