Нам нужно читать и считать разные типы сообщений / запустить
немного статистики для текстового файла 10 ГБ, например, FIX движок
журнал. Мы используем Linux, 32-битные, 4 процессора, Intel, кодирование на Perl, но
язык на самом деле не имеет значения.
Я нашел несколько интересных советов у Тима Брея
Проект WideFinder . Тем не менее, мы обнаружили, что с помощью отображения памяти
ограничен 32-битной архитектурой.
Мы попытались использовать несколько процессов, которые, кажется, работают
быстрее, если мы обрабатываем файл параллельно, используя 4 процесса
на 4 процессорах. Добавление многопоточности замедляет, может быть
из-за стоимости переключения контекста. Мы пытались изменить
размер пула потоков, но это все еще медленнее, чем
простая многопроцессная версия.
Часть отображения памяти не очень стабильна, иногда она
занимает 80 секунд, а иногда 7 секунд для файла размером 2 ГБ, может быть из
ошибки страницы или что-то, связанное с использованием виртуальной памяти.
Во всяком случае, Mmap не может масштабироваться выше 4 ГБ на 32-битной
архитектура.
Мы попробовали Perl IPC :: Mmap и Sys :: Mmap . Смотрел
в Map-Reduce, но проблема действительно в I / O
связана, сама обработка достаточно быстро.
Поэтому мы решили попробовать оптимизировать базовый ввод-вывод, настроив
размер буфера, тип и т. д.
Может ли кто-нибудь, кто знает о существующем проекте, где это
проблема была эффективно решена на любом языке / платформе
указать полезную ссылку или предложить направление?