Я использую boost::iostreams::mapped_file_source
для создания файлов с отображением памяти. В дополнение к 1024. К моему удивлению, когда я создал около 1024 файлов с отображением памяти, моя программа выдает исключение, в котором открыто слишком много файлов. После некоторых исследований я обнаружил, что Ubuntu использует максимальный размер файла для процессов 1024 (найденный от ulimit -n
). К сожалению, мне нужно, чтобы все файлы были открыты одновременно. Кто-нибудь знает об этом? Возможно ли, чтобы файлы не учитывались до предела? Я думал о попытке объединить их в один файл; однако я хотел бы избежать этого, если это возможно из-за производительности. И я также хотел бы не изменять операционную систему, изменяя значение. Любые точки в правильном направлении очень ценятся!Файлы с памятью и максимальный размер файла
ответ
Зачем вам нужно открыть много отображаемых файлов? Это кажется очень неэффективным. Может быть, вы можете сопоставить (регионы) один большой файл?
Q. Я думал о попытке объединить их в один файл; однако я хотел бы избежать этого, если это возможно из-за производительности
Это ... ерунда. Производительность может в основном только увеличиваться.
Особо следует иметь в виду, чтобы выровнять различные области внутри вашего «большого сопоставленного файла» до нескольких страниц вашей памяти или размера блока. 4k должен быть хорошим стартером для этого грубого выравнивания.
Какая причина, по вашему мнению, это увеличит производительность? – joshu
С одной стороны, вы уменьшите накладные расходы (очевидно, потому что у вас уже закончился определенный ресурс в вашей конфигурации ...). С другой стороны, вы, очевидно, удалите необходимость постоянно открывать/открывать сопоставления (вы можете просто оставить его открытым). Распространенное заблуждение состоит в том, что «это займет слишком много ОЗУ», но виртуальная память просто не работает. – sehe
(На этой последней теме: http://stackoverflow.com/questions/24249763/release-memory-mapped-memory/24253385, также возможно интересно: http://stackoverflow.com/questions/24352943/write-only-memory -отображения-в-импульс/24354199 s = 55 |? 0,0000 # 24354199) – sehe
Возможно, вы захотите проверить этот вопрос http://unix.stackexchange.com/questions/75996/modify-ulimit-open-files-of-a-specific-process – Oleg