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

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

2 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам