Почему скорость работы дисковых операций в docker контейнере такая медленная?
Уже давно работаю с докером, собрал много контейнеров, которые работают и по сути нет нареканий. Но я никак не могу понять вот что: есть дамп базы sql объёмом например 10Mb. Есть Докер контейнер с mysql внутри(докер конейнер mysql из официального образа). Предположим что файлы базы физически находятся на HDD диске которые пробрасываются внутрь контейнера. Когда я заливаю дамп из sql файла в этот докер контейнер то он будет заливаться к примеру 5 минут.
Если файлы базы лежат на SSD то время сокращается примерно в 10 раз, оно и понятно, скорость чтения/записи на SSD как раз в 10 раз выше чем у HDD.
Но меня беспокоит вопрос: если я просто установлю mysql внутрь системы и залью туда дамп то скорость заливки существенно сокращается. Те же 10Мб зальются на HDD за секунд 20, про SSD можно вообще не говорить. Почему такая большая разница в скорости разворачивания дампа sql файла внутри контейнера по сравнению с разворачиванием на прямую? И вопрос не только в скорости развёртывания, то есть операция записи, чтение также страдает. Из-за этого обычный drupal сайт грузится в разы медленнее чем, если бы его база была не в докер контейнере.
Я не делал точных замеров, но пропорции по времени выполнения примерно такие. Конечно я понимаю что docker это система виртуализации а наверняка из-за этого есть какой-то оверхед, но не настолько же большой! Нигде в интернете не могу найти информацию по этому вопросу, такое ощущение что всем пофиг на это.
Почему у вас HDD в 10 раз медленнее SSD, ведь это не так?
Линейная скорость записи/чтения для одиночного файла, тем более размером в 10 мегабайт, который вообще поместится в буфер любого современного винта, не должны заметно отличаться между разными носителями.
Tyranron: Пока что ничего хорошего от перехода на overlay2 не произошло, также несчастный 15MB дамп загружался порядка 4-х минут. Но я не разбирался с ограничением ресурсов, может там чего выявится. Про дисковые операции в ораничениях я ничего не нащёл, везде только оперативу и проц ограничивают.
Tyranron: Настройки может быть и не идентичны, но причина как мне кажется именно в storage driver, т.к. когда на HDD пытаюсь в докер залить дамп то жёсткий диск грузится как мне кажется на все 100% даже программу запускал типа fio и она показывала какие-то заоблачные результаты во время заливки дампа. По моему сам mysql на это никак не влияет, там настройки кешей и т.п.
По сути объяснение тут: https://docs.docker.com/engine/userguide/storagedr...
Там прям так и написано: Solid State Devices (SSD). For best performance it is always a good idea to use fast storage media such as solid state devices (SSD).
Это всё хорошо, но неужели для обычных HDD дисков решения так и нет решения..
Николай: "кажется" и догадки это все хорошо, но лучше смотреть на реальное состояние дел.
Если Вам нужно померить скорость дисковых операций - так заверните какой-то дисковый бенч в контейнер и померяйте, после чего сравните с результатами с чистого хоста.
Если Вам нужно добиться вменяемой производительности БД, то тюнингуйте её, либо хотя бы приведите конфиг в соответствие с хостовым. Незатюненая БД очень сильно влияет на производительность.
Не спешите из одного делать выводы о другом, пока не будет цифр доказывающих это явным образом.
Я догадывался что без реальных цифр врятли дальше дело пойдёт)
На днях постараюсь выделить время и сделать все замеры и конфиги покажу(для mysql они почти дефолтные)
Основной оверхед при записи на диск в контейнере - это запись в тома образов, а не напрямую в дерево файлов хоста. Можно избежать путём указания точек монтирования в docker run ... -v /путь/источник:куда/монтируем Документация