2014-02-05 3 views
1

Есть ли способ заставить объект python2.7 находиться в ОЗУ для быстрого доступа к чтению и записи? Или, если это зависит от ОС, есть ли способ заставить Grid Engine сделать то же самое?Обработка памяти большого python recarray для быстрого чтения и записи на GridEngine

У меня есть большой глобальный повтор (myrecarray), состоящий из 19 полей и 50 миллионов строк. Я использую определение (myloop) для циклического переключения myrecarray, посещая каждую строку один раз, чтобы обновить значение 2 полей и скопировать некоторые данные на другие объекты. Это выполняется через qsub в кластере с 256 ГБ ОЗУ (~ 10x размер myrecarray, чтобы он мог справиться с размером myrecarray). Проблема здесь в том, что цикл является огромным узким местом при запуске в кластере. При тестировании цикла с тем же самым повторением 500 000 строк с использованием timeit на macbook pro (4 ГБ оперативной памяти, 2,53 ГГц процессор) цикл занимает 250^-6 секунд и в 5 раз быстрее, чем на кластере.

Похоже, что кластер не удерживает myrecarray в ОЗУ, но заставляет цикл считывать его с диска каждый раз, что вызывает замедление.

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

Пример строка recarray является ...

(49817038, 'C', 'R', 'O', 'U', 'E', 1, 1, 0, 0, 1, 2, 3, 3, 6, 2, 0, 'Tup', 'Hit') 

нотабене Я единственный человек, использующий этот кластер, поэтому нет конфликтов с другими заданиями, это однопоточный процесс, и администратор не устанавливает ограничений на использование ОЗУ.

Большое спасибо заранее

ответ

1

Я думаю, что это настройка ОС. Посмотрите, как настроить свой коэффициент swappiness. Если вы хотите, чтобы держать все в памяти, если это не полный, установите его в 0.

http://en.wikipedia.org/wiki/Swappiness

+0

Большое спасибо за этот ответ @Finch_Powers, я просто проверяю это с администратором кластера. Надеюсь, вы правы, это решит огромную проблему, если она правильная. –

+0

В swappiness задано значение по умолчанию 60, что предполагает, что он должен заменять только stat, когда в этой системе занято ~ 150 ГБ ОЗУ, ОЗУ, проверенное путем просмотра «сверху» во время прогона или через qacct после задания законченные не приближаются к этой цифре. вы все еще думаете, что это может быть проблемой? cheers –

+0

Я не знаю. Вы пытались установить его на ноль, чтобы сравнить, как он себя ведет? –

 Смежные вопросы

  • Нет связанных вопросов^_^