Linux tmpfs скорость записи медленнее, чем скорость оперативной памяти

у меня есть сервер HPE ProLiant DL360 Gen9, характеристики:

  • процессор: Intel процессор Xeon 2 процессора серии E5-2687W v3 с @ 3.10 ГГц, 25 МБ кэш-памяти L3, 10
    ядер ea
  • RAM: 8x 32GB PC4-17000 DDR4 2133MHz CAS-15 1.2 V SDRAM DIMM
    (256 ГБ)

(полные спецификации сервера здесь)

сервер работает CentOS 7.2 С ядром 3.10.0-327.36.3.el7.x86_64.

я смонтировал tmpfs ramdisk на сервере, используя следующую запись в /etc/fstab:

tmpfs  /ramdisk  tmpfs  noauto,user  0 0

чтобы проверить запись на этот ramdisk, я запускаю следующую команду:

time sh -c "dd if=/dev/zero of=/ramdisk/120GB_testfile bs=4k count=30000000 && sync"

он сообщает, что он написал 122,880,000,000 байт в 58,857 С, что скорость записи 1991 MiB / sec.

учитывая, что скорость записи этой памяти составляет 17 ГБ / С (по этой описание скорости передачи данных в памяти), я удивлен значительно более низкой скоростью при записи на мой tmpfs ramdisk. Может ли кто-нибудь объяснить это несоответствие, и предложите другой способ записи в файл в памяти, который быстрее?

спасибо.

обновление

и vm.swappiness, но это не принесло никакой пользы (1712 Мб / сек).

Я попытался увеличить размер блока, а также (bs=256k count=468750), но опять же, не так много эффекта (2087 Мб / сек).

19
задан atreyu
11.05.2023 3:09 Количество просмотров материала 2970
Распечатать страницу

1 ответ

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

кроме того, выделение памяти очень медленно. Фактически, это одна из самых медленных вещей, которые вы можете сделать в большинстве систем, не связанных с вводом-выводом, и единственная значительно более медленная вещь-создание нового потока или процесса. Такие инструменты, как ramspeed предварительно выделить всю память, которую они будут использовать при запуске, чтобы они могли проверить фактическую производительность памяти. По сравнению с этим, tmpfs не имеет представления о том, насколько большой файл вы собираетесь создавать, поэтому он должен выделять все по требованию, и делает это в кусках не больше, чем dd размер блока (я думаю, что он закрывается на 64k, но я не уверен). Из-за этого у вас есть издержки в каждом блоке для выделения памяти для хранения этого блока.

3
отвечен Austin Hemmelgarn 2023-05-12 10:57

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх