Назад | Перейти на главную страницу

Может ли tmpfs стать фрагментированным?

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

Насколько мне известно, нет способов дефрагментировать файловую систему tmpfs (по крайней мере, не во FreeBSD, Linux или Solaris).

В зависимости от базовой реализации tmpfs может стать фрагментированным (например, некоторые реализации tmpfs не находятся в ОЗУ - они занимают пространство подкачки: в зависимости от алгоритма распределения выделенное пространство подкачки может быть фрагментировано и показывать заметное падение скорости).

Также возможно, что tmpfs в ОЗУ станут «фрагментированными», но это не практическая проблема: оперативная память «достаточно быстрая», поэтому вы потратите больше процессорного времени на ее «дефрагментацию», чем потеряете доступ к несмежным разделов ОЗУ (не нужно беспокоиться о задержке вращения, а дополнительные накладные расходы для MMU или эквивалента для доступа к несмежным разделам ОЗУ по сравнению с непрерывной серией страниц достаточно малы, что вы, вероятно, можете им пренебречь.

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

Все реализации tmpfs поддерживаются виртуальной памятью, а не физической. Тогда вопрос не имеет особого смысла, поскольку смежные области виртуальной памяти вряд ли будут смежными на физическом уровне и могут даже не присутствовать в оперативной памяти в зависимости от спроса.