RAM-диск медленнее, чем диск? - PullRequest
9 голосов
/ 14 октября 2010

Созданная мной программа на Python ограничена по IO.Большая часть времени (более 90%) проводится в одном цикле, который повторяется ~ 10000 раз.В этом цикле данные ~ 100 КБ генерируются и записываются во временный файл;это тогда прочитано назад другой программой и статистикой об этих данных, собранных.Это единственный способ передать данные во вторую программу.

Из-за того, что это является главным узким местом, я подумал, что перемещение временного файла с моего основного жесткого диска на (~ 40 МБ) RAM-диск (внутриболее 2 ГБ свободной оперативной памяти) значительно увеличит скорость ввода-вывода для этого файла и тем самым сократит время выполнения.Тем не менее, я получил следующие результаты (в среднем по 20 прогонов):

  • Тестовые данные 1: без RAMdisk - 72,7 с, с RAMdisk - 78,6 с
  • Тестовые данные 2: безRAMdisk - 223,0 с, с RAMdisk - 235,1 с

Может показаться, что RAMdisk медленнее моего жесткого диска.

Что может быть причиной этого?

Есть ли какая-либо другая альтернатива использованию RAM-диска для более быстрого ввода-вывода файла?

Ответы [ 5 ]

3 голосов
/ 14 октября 2010

Ваша операционная система почти наверняка уже буферизует / кеширует записи на диск.Не удивительно, что RAM-диск так близок по производительности.

Не зная точно, что вы пишете и как, мы можем предложить только общие рекомендации.Некоторые идеи:

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

  • Если вы выполняете много небольших операций записи, объединяйте их для одновременной записи больших частей.(Можем ли мы увидеть исходный код?)

  • Вы удаляете файл размером 100 КБ после использования?Если вам это не нужно, то удалите его.В противном случае ОС может быть вынуждена сбросить ее на диск.

2 голосов
/ 14 октября 2010

Я знаю, что Windows очень агрессивно относится к кешированию данных на диске в ОЗУ, и 100К легко поместятся. Записи идут непосредственно в кеш, а затем, возможно, записываются на диск через неблокирующую запись, что позволяет программе продолжаться. RAM-диск, вероятно, не будет поддерживать неблокирующие операции, потому что ожидает, что эти операции будут быстрыми и не стоит беспокоиться.

Сокращая объем памяти, доступной для программ и кеширования, вы увеличите объем дискового ввода-вывода для подкачки, хотя бы незначительно.

Это все мои предположения, так как я не знаком с ядром или драйверами. Я также полагаю, что Linux будет работать аналогично.

2 голосов
/ 14 октября 2010

Можете ли вы записывать данные партиями, а не по одному элементу за раз? Кешируете ли вы такие ресурсы, как дескрипторы открытых файлов и т. Д., Или очищаете их? Блокирует ли запись на ваш диск, можете ли вы использовать фоновые потоки для насыщения ввода-вывода, не влияя на производительность вычислений.

Я бы сначала посмотрел на оптимизацию записи на диск, а затем посмотрел на более быстрые диски, когда это будет завершено.

0 голосов
/ 17 мая 2016

В своих тестах я обнаружил, что не только размер пакета влияет на общую производительность, но и сам характер данных. Мне удалось получить в 5 раз лучшее время записи по сравнению с SSD только в одном сценарии: запись 100-Мбайт предварительно подготовленного массива случайных байтов на диск RAM. Запись более «предсказуемых» данных, таких как буквы «aaa» или текущая дата-время, дает совершенно противоположные результаты - SSD всегда быстрее или одинаковее. Поэтому я предполагаю, что операционная система (в моем случае Win 7) выполняет много операций кэширования и оптимизации. Похоже, что наиболее затруднительным для RAM-диска является случай, когда вы выполняете много маленьких записей вместо нескольких больших, а RAM-диск прекрасно справляется с записью большого количества трудно сжимаемых данных.

0 голосов
/ 08 июня 2013

У меня был такой же ошеломляющий опыт, и после многих попыток я понял это. Когда ramdisk отформатирован как FAT32, тогда, хотя тесты показывают высокие значения, реальное использование на самом деле медленнее, чем в отформатированном NTFS SSD. Но виртуальный диск в формате NTFS быстрее, чем SSD.

...