LINUX.ORG.RU

Использование tmpfs для ускорения работы игр

 ,


2

1

Разберем ускорение работы с помощью tmpfs на примере Daggerfall Unity.

Для работы tmpfs необходимо включить следующие опции в ядре:

File systems  --->
     Pseudo filesystems  --->
          [*] Tmpfs virtual memory file system support (former shm fs)
          [ ] Optional drivers
Перед создание инита необходимо создать директории для копирования и выставить им права. Для этого можно использовать следующие команды:
mkdir -p /home/oleg/Downloads/Daggerfall
chmod 777 /home/oleg/Downloads/Daggerfall
mkdir -p  /home/oleg/dag_ram/
chmod 777 /home/oleg/dag_ram/
mkdir -p /home/oleg/.config/unity3d/Daggerfall\ Workshop
chmod 777 /home/oleg/.config/unity3d/Daggerfall\ Workshop

Для запуска используется следующий инит для системы инициализации sysvinit:

#!/bin/sh
case $1 in
start)
        mount -t tmpfs -o size=560M tmpfs /home/oleg/Downloads/Daggerfall
        cp -r /home/oleg/Downloads/Daggerfall_ram/* /home/oleg/Downloads/Daggerfall
        mount -t tmpfs -o size=360M tmpfs /home/oleg/dag_ram/
        cp -r /home/oleg/Downloads/dfu/* /home/oleg/dag_ram/
        chown -R oleg /home/oleg/Downloads/Daggerfall
        chown -R oleg /home/oleg/dag_ram/
        mount -t tmpfs -o size=580M tmpfs /home/oleg/.config/unity3d/Daggerfall\ Workshop
        cp -r /home/oleg/.config/unity3d/Daggerfall\ Workshop_ram/* /home/oleg/.config/unity3d/Daggerfall\ Workshop
        chown -R oleg  /home/oleg/.config/unity3d/Daggerfall\ Workshop
                ;;
        stop)


                ;;
        restart)
                $0 stop
                sleep 2
                $0 start
                ;;
        *)
                echo "Usage: $0 [start|stop|restart]"
                ;;
esac

В начале происходит монтирование tmpfs в директорию на диске, по сути как создание RAM-диска, затем копирование файлов в эту директорию и как последний этап - выставление прав. Последний этап важен, если его пропустить, то игра может не работать, если ей надо будет писать в директорию. Всего копируются 3 директории:

1) директория с ресурсами Daggerfall (/home/oleg/Downloads/Daggerfall_ram/);

2) директория с движком Daggerfall Unity(/home/oleg/Downloads/dfu/);

3) директория c настройками и сохранениями (/home/oleg/.config/unity3d/Daggerfall\ Workshop_ram/).

Если не копировать папку сохранений в tmpfs, то будут задержки при загрузке сохранения. Но при этом сохранения сохранятся после перезагрузки. Таким образом, необходимо учитывать, что при сохранении сейвов строго в RAM, после перезагрузки они исчезнут.

Затем необходимо проверить полученный результат с помощью команды

df -h

Итоговый результат при использовании данных из статьи выглядит так:

tmpfs           560M  536M   25M  96% /home/oleg/Downloads/Daggerfall
tmpfs           360M  346M   15M  97% /home/oleg/dag_ram
tmpfs           580M  6.2M  574M   2% /home/oleg/.config/unity3d/Daggerfall Workshop

Это конечно здорово, но если там не медлительный хард и минимум оперативки для кеширования, то какой вообще выигрыш можно получить? 2-3 секунды за пару часов игры на загрузке локаций и сохранении? А если игра жирная, скажем на 10+ гигов, тогда задумка вообще имеет смысл только на серверах.

С другой стороны тут многое может пойти не так. И потеря сохранок, и большие тормоза если вдруг придёт свопинг, и выключение существенного куска памяти из нормальной работы.... Короче если вы не занимаетесь разработкой и тестированием этого самого даггерфола на юнити, то ЗАЧЕМ?!

kirill_rrr ★★★★★ ()
Ответ на: комментарий от vbcnthfkmnth123

Не требует. При чтении превосходство на 2-3 порядка будет всегда, при записи скорость может неприятно плавать, но только самые убогие модели умудряются опуститься ниже hdd в оптимальном линейном режиме. А уж если у тебя ещё и оперативка не забита мёртвыми данными, а используется под дисковые кеши...

kirill_rrr ★★★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)