LINUX.ORG.RU

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

 ,


2

0

Разберем ускорение работы с помощью 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

★★★★★

Проверено: hobbit ()
Последнее исправление: unfo (всего исправлений: 14)

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

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

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

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

kirill_rrr ★★★★★
()
27 декабря 2022 г.

Для дефолтного Дагерфола смысла от tmpfs нет - меш-ассеты там пустяковые, а текстуры объединены в палитры.

Совсем другая ситуация при использовании модов.

Но сильней всего tmpfs зайдет в Морке и Скайриме. Особенно если предварительно распаковать bsa-архивы.

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

Это просто пример.

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

vbcnthfkmnth123 ★★★★★
() автор топика
Последнее исправление: vbcnthfkmnth123 (всего исправлений: 1)

Так а циферки какие-нибудь по профиту есть? Насколько быстрее стало, есть ли смысл заморачиваться?

shell-script ★★★★★
()

А зачем делать chown? Можно же копировать с сохранением владельца и прав.

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

Нуууэээ... Как бы пример подразумевает какую-то цель. А так неясно, есть ли смысл заморачиваться.

Это как с компиляцией генты. Можно тупо закинуть на время сборки мира /tmp/portage/ в tmpfs, но если само дерево при этом лежит на древенем медленном винте, это мёртвому припарки.

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

Цель - реализация ускорения с помощью tmpfs.

А так неясно

Да.

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

Я делал, загружается в 10 раз медленней, но все программы мнгновенно запускаются. После загрузки в такую систему чувствуешь себя как на суперкомпьютере

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

Чтобы при этом профиль браузера не сбрасывался, использовали какие-то трюки. Или overlayfs или ещё что-то.

Overlay это для склеивания fs и разделения записи и чтения.

Обычно скрипт скидывающий профиль либо инитом дергался, либо в initramfs – dracut так из коробки может, initramfs-tools напильником допиливается.

У меня было жёстче: весь / пожат squashfs, поверх натянута overlayfs с rw-бэком в ext2+zram, при выключении спрашивает rebuild/dump?

Из самого интересного – за всё это дело отвечал исключительно initramfs! Был выбор образов sfs для загрузки (осилил запаковать рач и бубен)

Модули в оверлее лежали поверх / ибо были прибиты к ведру.

Эдакая амига получилась, где kikstart и workbench могли быть разных версий и работать.

Поддерживать задолбало быстро, однако.

timdorohin ★★★★
()
Последнее исправление: timdorohin (всего исправлений: 1)
Ответ на: комментарий от eternal_sorrow

Какая разница? Тебе хватит одного.

Ну я же не гентушник. У меня система не настолько надёжная.

i_am_not_ai
()
Ответ на: комментарий от eternal_sorrow

Он же ясно и однозначно сказал, что у него нет времени править это всё

serg002 ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.