Nano Hash - криптовалюты, майнинг, программирование

почему в моем эксперименте virtio-scsi намного медленнее, чем virtio-blk (образ over и ceph rbd)?

Привет, я недавно провел эксперимент virtio-scsi через rbd через qemu target (для его поддержки DISCARD / TRIM) и сравнил пропускную способность и iops с настройкой virtio-blk через rbd на той же машине, используя fio в гостевой системе . Оказалось, что пропускная способность при последовательном чтении и записи в 7 раз меньше (42,3 МБ / с против 309 МБ / с), а скорость операций ввода-вывода в секунду при случайном чтении и записи в 10 раз меньше (546 против 5705).

Что я сделал, так это настроил виртуальную машину с помощью OpenStack Juno, который дал мне настройку virtio-blk поверх rbd. Затем я изменил соответствующую часть в libvirt configure xml следующим образом:

<disk type='network' device='disk'>
  <driver name='qemu' type='raw' cache='writeback'/>
  <auth username='cinder'>
    <secret type='ceph' uuid='482b83f9-be95-448e-87cc-9fa602196590'/>
  </auth>
  <source protocol='rbd' name='vms/c504ea8b-18e6-491e-9470-41c60aa50b81_disk'>
    <host name='192.168.20.105' port='6789'/>
  </source>
  <target dev='vda' bus='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>

к этому:

<disk type='network' device='disk'>
  <driver name='qemu' type='raw' cache='writeback' discard='unmap'/>
  <auth username='cinder'>
    <secret type='ceph' uuid='482b83f9-be95-448e-87cc-9fa602196590'/>
  </auth>
  <source protocol='rbd' name='vms/c504ea8b-18e6-491e-9470-41c60aa50b81_disk'>
    <host name='192.168.20.105' port='6789'/>
  </source>
  <target dev='vda' bus='scsi'/>
  <controller type='scsi' model='virtio-scsi' index='0'/>
</disk>

Версии программного обеспечения:

qemu 2.5.1

libvirt 1.2.2

ядро ​​ 3.18.0-031800-generic # 201412071935 SMP Mon Dec 8 00:36:34 UTC 2014 x86_64 (ядро Ubuntu 14.04)

А гипервизор - KVM.

Я не думаю, что разница в производительности между virtio-scsi и virtio-blk может быть такой большой. Так что укажите, что я сделал не так и как добиться приемлемой производительности.

Ограничение состоит в том, что мне нужно решение, которое работает для OpenStack (идеально, если работает для Juno), без множества исправлений или кодирования. Например, я слышал о virtio-scsi + vhost-scsi + scsi-mq, но, похоже, сейчас он недоступен в OpenStack.


Ответы:


1

Ответ прост: VirtIO-SCSI немного сложнее, чем VirtIO-Block. Заимствовав простое описание из здесь:

VirtIO Block состоит из следующих слоев:

guest: app -> Block Layer -> virtio-blk
host: QEMU -> Block Layer -> Block Device Driver -> Hardware

Тогда как VirtIO SCSI выглядит так:

guest: app -> Block Layer -> SCSI Layer -> scsi_mod
host: QEMU -> Block Layer -> SCSI Layer -> Block Device Driver -> Hardware

По сути, VirtIO SCSI должен пройти другой уровень трансляции по сравнению с VirtIO Block.

В большинстве случаев при использовании локальных устройств это будет медленнее. Однако есть пара необычных конкретных случаев, когда иногда бывает и обратное, а именно:

  • Прямая передача хоста SCSI LUN на адаптер VirtIO SCSI. Это немного быстрее, потому что он обходит блочный уровень на стороне хоста.
  • Встроенный доступ QEMU к устройствам iSCSI. Иногда это происходит быстрее, потому что при этом полностью исключаются уровни блока хоста и SCSI, и ему не нужно преобразовывать команды блока VirtIO в команды SCSI.

Для справки, есть три преимущества использования VirtIO SCSI над VirtIO Block, не связанных с производительностью:

  1. Он поддерживает гораздо больше устройств. VirtIO Block предоставляет одно устройство PCI на каждое блочное устройство, что ограничивает возможности примерно 21-24 устройствами, тогда как VirtIO SCSI использует только одно устройство PCI и может обрабатывать абсолютно астрономическое количество LUN на этом устройстве.
  2. VirtIO SCSI поддерживает команду SCSI UNMAP (TRIM в терминах ATA, DISCARD в терминах ядра Linux). Это важно, если вы используете хранилище с тонким выделением ресурсов.
  3. VirtIO SCSI представляет устройства как обычные узлы SCSI, тогда как VirtIO Block использует особое устройство. Обычно это не очень важно, но может быть полезно при преобразовании из физической системы.
03.08.2017
  • в ссылке наихудшая производительность выглядит примерно как 3/4 virtio-blk, и результаты также предполагают, что ее можно улучшить, увеличив количество iothread в qemu. Вопрос больше похож на 1/10 производительности. Таким образом, ваш ответ, кажется, оставляет вопрос о том, почему в некоторых случаях может быть такая десятикратная разница, но практически нет разницы в других случаях. 10.05.2019
  • И OP использовал очень раннюю версию virtio-scsi. Текущая производительность намного лучше. 24.06.2020

  • 2

    Вы включили отмену отмены отображения в измененном файле configure.xml:

    <driver name='qemu' type='raw' cache='writeback' discard='unmap' />
    

    Это очищает блоки на лету.

    23.10.2016
  • И это отвечает на вопрос, потому что ...? 04.03.2017
  • Нет, это не так. Он определенно не отменяет отображение, пока вы не вызовете fstrim в гостевой системе или, если вы смонтируете с параметром discard, rm. 26.04.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..