Параллельное чтение с нескольких жестких дисков - PullRequest
2 голосов
/ 27 января 2010

Я пишу приложение, которое имеет дело с большим количеством данных (гигабайт). Я рассматриваю возможность разделения данных на несколько жестких дисков и их параллельного чтения. Мне интересно, с какими ограничениями я столкнусь - например, можно ли считывать данные с 4 или 8 жестких дисков параллельно, и получу ли я примерно в 4 или 8 раз больше производительности, если дисковый ввод-вывод является ограничивающим фактором ? Что я должен высматривать? Также приветствуются указатели на релевантные документы - Google мало что показало.

РЕДАКТИРОВАТЬ: я должен отметить, что я смотрел на RAID, но производительность была не так хороша, как я надеялся. Я планирую написать это сам на C / C ++.

Ответы [ 4 ]

2 голосов
/ 27 января 2010

Хорошее разделение данных и параллельное чтение с 4 до 8 дисков не увеличат пропускную способность в 4-8 раз. Есть и другие факторы, которые вы должны учитывать.

  1. Если вы читаете данные в приложении, то потоки могут потребоваться для чтения данных с разных жестких дисков.
  2. Windows предоставляет перекрывающийся и не перекрывающийся метод чтения и записи данных на жесткий диск. Посмотрите, если использование этого увеличивает пропускную способность. Точно так же * nux также будет иметь методы чтения / записи.
  3. На одном ядре / процессоре потоки, по-видимому, работают параллельно, но последовательно лежат в его основе. С многоядерными процессорами можно читать несколько потоков параллельно, но обычно ОС решает, что и когда запускать. Так что чтение большого количества потоков может снизить производительность, а не увеличить.
  4. Если вы проверите спецификации любого жесткого диска, вы увидите, что он дает время произвольного доступа и время последовательного доступа. Поэтому на основании ваших данных вы можете проверить эти параметры.
  5. Когда вы разбиваете данные на разные диски, вы должны помнить, что вашему приложению потребуется синхронизация того, как заполнять данные значимой информацией. Если вы используете потоки, дополнительные потоки должны быть синхронизированы.
  6. Вы можете получить современный жесткий диск с высокой скоростью чтения / записи данных, но слабым звеном может быть другое оборудование. Таким образом, вы можете использовать низкоуровневую материнскую плату или ОЗУ, которые могут не позволить вам получить максимальную скорость.
1 голос
/ 27 января 2010

Если вы не собираетесь использовать настоящий RAID, лучше по крайней мере использовать несколько контроллеров жесткого диска, иначе вы вообще не увидите большого прироста производительности. Один контроллер не может выполнять много параллельных операций ввода-вывода, поэтому он быстро станет узким местом.

0 голосов
/ 27 января 2010

Как вы, кажется, в порядке с переконфигурированием дисков, как насчет SSD? Они запускают кольца вокруг любых механических приводов (до 200 + ГБ / с на чтение, 150 + ГБ / с на запись).

Вы последовательно читаете данные или случайно? Сколько ГБ вы ожидаете?

0 голосов
/ 27 января 2010

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

Это даст вам преимущества RAID без необходимости пытаться разобраться с ним самостоятельно. Вы можете сделать это и на уровне базы данных, распределяя файлы данных по дискам, но это добавляет сложности.

Вы будете передавать данные быстрее. Дисководы только такие быстрые, и если ваш канал ввода / вывода может справиться с большим количеством, сделайте это. Есть также время поиска, чтобы принять во внимание ... Вероятно, не так уж и сложно, основываясь на описании вашего приложения.

...