Когда вы используете файловую систему в памяти, происходит нечто большее, чем просто помещать данные в ОЗУ. Вам по-прежнему приходится обрабатывать структуры данных, связанные с файлом, включая отслеживание того, где в памяти находятся все выделенные ему ресурсы. Запись этой информации также занимает много времени (в частности, для тестирования, которое вы проводите, размер файла обновляется при каждой записи, что сразу удваивает количество мест, в которых данные изменяются в памяти).
Кроме того, выделение памяти очень медленно. На самом деле, это одна из самых медленных вещей, которые вы можете сделать в большинстве систем, не требующих ввода-вывода, с единственной значительно более медленной вещью - созданием нового потока или процесса. Такие инструменты, как ramspeed
предварительное выделение всей памяти, которую они будут использовать при запуске, позволяют проверить фактическую производительность памяти. Для сравнения, tmpfs не имеет ни малейшего представления о том, насколько большой файл вы собираетесь создавать, поэтому он должен распределять все по требованию и делает это кусками не больше, чем dd
размер блока (я думаю, что он ограничен 64 КБ, но Я не уверен). Из-за этого у вас есть издержки в каждом блоке для выделения памяти для хранения этого блока.