Алгоритмы оптимизации с помощью быстрых дисковых хранилищ (SSD)?

Учитывая, что твердотельные диски (SSD) дешевеют и вскоре станут более распространенными в качестве системных дисков, а также учитывая, что их скорости доступа значительно выше, чем у вращающихся магнитных носителей, какой выигрыш в производительности получат стандартные алгоритмы от использования SSD для локальных место хранения? Например, высокая скорость случайного чтения SSD делает что-то вроде хеш-таблицы на основе диска жизнеспособным для больших хэш-таблиц; 4 ГБ дискового пространства легко доступны, что делает жизнеспособным хеширование всего диапазона 32-битного целого числа (хотя больше для поиска, чем для заполнения, что все равно займет много времени); хотя этот размер хеш-таблицы будет недопустимым для работы с вращающимся носителем из-за скорости доступа, это не должно быть такой большой проблемой с твердотельными накопителями.

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


person Paul Sonier    schedule 16.06.2009    source источник


Ответы (5)


Ваш пример хеш-таблиц действительно является ключевой структурой базы данных, которая принесет пользу. Вместо того, чтобы загружать в память целый файл размером 4 ГБ или более для проверки значений, SSD можно исследовать напрямую. SSD все же медленнее ОЗУ, на порядки, но вполне разумно иметь хэш-таблицу на 50 Гб на диске, а не в ОЗУ, если только вы не платите большие деньги за большое железо.

Примером могут служить базы данных шахматных позиций. У меня более 50 ГБ хешированных позиций. Существует сложный код, чтобы попытаться сгруппировать связанные позиции рядом друг с другом в хэше, поэтому я могу пролистывать 10 МБ таблицы за раз и надеяться повторно использовать некоторые из них для нескольких запросов с похожими позициями. Есть тонна кода и сложности, чтобы сделать это эффективным.

Заменив его на SSD, я смог отказаться от всей сложности кластеризации и просто использовать действительно глупые рандомизированные хэши. Я также получил увеличение производительности, поскольку я извлекаю только те данные, которые мне нужны, с диска, а не большие куски по 10 МБ. Задержка действительно больше, но чистое ускорение значительное... а сверхчистый код (20 строк, а не 800+), возможно, даже лучше.

person SPWorley    schedule 16.06.2009
comment
Отличный пример и хороший момент; Я не думал о шахматных позициях, но это очень интересный случай. - person Paul Sonier; 17.06.2009

SSD значительно быстрее только для произвольного доступа. При последовательном доступе к диску они всего в два раза эффективнее обычных ротационных дисков. Многие твердотельные накопители имеют более низкую производительность во многих сценариях, что приводит к ухудшению их работы, как описано здесь.

Хотя твердотельные накопители значительно двигают стрелку, они все же намного медленнее, чем операции ЦП и физическая память. Для вашего примера хеш-таблицы размером 4 ГБ вы можете поддерживать скорость 250+ МБ/с на SSD для доступа к случайным сегментам хэш-таблицы. Для ротационного диска вам повезет сломать однозначное число МБ/с. Если вы сможете хранить эту 4-гигабайтную хэш-таблицу в памяти, вы сможете получить к ней доступ со скоростью порядка гигабайт в секунду — намного быстрее, чем даже очень быстрый SSD.

В упомянутой статье перечислены несколько изменений, внесенных MS для Windows 7 при работе на SSD, что может дать вам представление о том, какие изменения вы могли бы внести. Во-первых, SuperFetch для предварительной выборки данных с диска отключен — он предназначен для того, чтобы обойти медленное время произвольного доступа к диску, которое облегчается твердотельными накопителями. Дефрагментация отключена, потому что файлы, разбросанные по диску, не влияют на производительность твердотельных накопителей.

person Michael    schedule 16.06.2009
comment
Вы больше говорите об оптимизации для SSD; Я больше рассматриваю типы алгоритмов, которые становятся возможными (или более жизнеспособными) благодаря производительности SSD. Меня меньше интересуют возможные (или необходимые) оптимизации, чем различные типы алгоритмов или приложений, которые были просто невозможны с более медленным постоянным хранилищем. - person Paul Sonier; 17.06.2009

Ipso facto любой алгоритм, который вы можете придумать, требует большого количества случайных дисковых операций ввода-вывода (случайный — ключевое слово, которое помогает бросить принцип локальности птицам, тем самым устраняя полезность большого количества кэширования, которое происходит) .

Однако я мог видеть, что некоторые системы баз данных выигрывают от этого. MySQL, например, с использованием механизма хранения MyISAM (где записи данных в основном представляют собой прославленные CSV). Тем не менее, я думаю, что очень большие хеш-таблицы будут лучшим выбором для хороших примеров.

person Chris Tonkinson    schedule 16.06.2009
comment
На самом деле, дело было в том, что сами алгоритмы не используют диски; вопрос был в том, какие стандартные алгоритмы можно включить с помощью увеличения производительности SSD? Очень похоже на то, как управляемый код был включен компьютерами определенной скорости и размера... - person Paul Sonier; 17.06.2009
comment
Сами алгоритмы не используют диски — их используют реализации алгоритмов — с этим мы можем согласиться. Да, управляемый код стал возможен благодаря аппаратным улучшениям, но для этого требовалось на много порядков лучшее компьютерное оборудование. Скачок между жесткими дисками и твердотельными накопителями (извините за выражение) не так уж и велик. Единственным надежным преимуществом является произвольный доступ. Возвращаясь к моему первоначальному ответу... который требует большого количества случайных дисковых операций ввода-вывода... - person Chris Tonkinson; 17.06.2009

SSD намного быстрее для случайного чтения, немного для последовательного чтения и соответственно медленнее для записи (случайной или нет).

Таким образом, дисковая хеш-таблица, по сути, не полезна с SSD, так как теперь для ее обновления требуется значительное время, но поиск на диске становится (по сравнению с обычным жестким диском) очень дешевым.

person tomjen    schedule 18.06.2009
comment
Обратите внимание, что в исходном вопросе я упомянул, что именно по этой причине хеш-таблица более подходит для поиска, чем население; рассмотрите концепцию предварительно заполненной хеш-таблицы, которая поставляется с программным обеспечением, позволяющим предварительно определить поиск хэша; 4 ГБ места для установки вполне разумно для современных приложений. - person Paul Sonier; 18.06.2009

Не обманывай себя. SSD по-прежнему намного медленнее, чем системная память. Любой алгоритм, использующий системную память, а не жесткий диск, будет намного быстрее при прочих равных условиях.

person Triptych    schedule 16.06.2009
comment
Дело в том, что не все остальные вещи равны. Например, относительно легко найти 4 ГБ места на SSD; 4 ГБ системной памяти, легко адресуемой, найти намного сложнее. - person Paul Sonier; 17.06.2009
comment
4 ГБ ОЗУ — это довольно стандартно для любого компьютера, которому нужно сортировать файлы объемом 4 ГБ. - person Triptych; 17.06.2009
comment
Цена за гигабайт памяти по-прежнему ниже для RAM по сравнению с SSD. 64-битное адресное пространство распространено на серверах и становится все более распространенным на настольных компьютерах. - person Michael; 17.06.2009
comment
@Triptych: да, 4 ГБ ОЗУ довольно стандартны, когда вы заполняете эти 4 ГБ хэш-таблицей, где будет находиться ваша ОС? Ваше приложение? - person Paul Sonier; 17.06.2009
comment
@Michael: да, это хороший момент, но обычно оперативная память в большом почете; постоянное хранилище в меньшей степени. - person Paul Sonier; 17.06.2009
comment
@McWafflestix - я перепутал свое утверждение, оперативная память все еще дороже за гигабайт. Но 4 ГБ оперативной памяти дешевле, чем SSD с приличной производительностью. - person Michael; 17.06.2009
comment
@Michael: да, это хороший момент; тем не менее, рассмотрим ситуацию, когда пользовательское приложение хотело бы использовать большую предварительно вычисленную хеш-таблицу. Во время установки вы, вероятно, можете рассчитывать на 4 ГБ дискового пространства, и когда-нибудь в ближайшем будущем вы можете ожидать, что это будет твердотельное состояние; Я не знаю, насколько целесообразно ожидать, что у пользователя будет 4 ГБ ДОПОЛНИТЕЛЬНОЙ ОЗУ для размещения вашей хеш-таблицы. Однако я согласен с тем, что для серверного типа обычно проще добавить больше ОЗУ; рассмотрим, однако, точку зрения Арно Сетагая выше о 50-гигабайтной хеш-таблице. - person Paul Sonier; 17.06.2009
comment
@McWafflestix - мне кажется, что мы пытаемся создать ситуации, когда SSD были бы полезны, создавая сценарии, патологические для вращающихся носителей. Хеш-таблица объемом 50 ГБ, которая должна иметь пропускную способность чтения выше 50 МБ/с, выиграет от SSD — но только потому, что мы выбрали худшее хранилище данных, какое только можно вообразить для механического диска. Если бы данные можно было реорганизовать в B-дерево, например, в макет, или мы разделили бы индексы и сохранили их в памяти, кэшируя большие фрагменты таблицы в памяти и т. д., мы все равно могли бы добиться приличной производительности. - person Michael; 17.06.2009
comment
@Michael: это хороший момент; Я не особенно хочу слишком много возиться с деталями; дело в том, что идея хеш-таблицы — это всего лишь одна идея; Я хотел узнать, есть ли у кого-нибудь еще. - person Paul Sonier; 17.06.2009