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

Добавь подсветку синтаксиса

```bash
будет красивее =)

LINUX-ORG-RU ★★★★★ ()

хм! а это интересная задумка! а что если всю систему в tmpfs загружать?! кто-нибудь уже пробовал?

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

Да, был тут один клоун, раздул из этого целую религию.

t184256 ★★★★★ ()

cp -r

Поменяй на cp -a. И не нужно будет делать chown -R.

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

from

mkdir -p /home/oleg/Downloads/Daggerfall

to

mkdir -p "${HOME}/Downloads/Daggerfall"
serg002 ()
#!/usr/bin/env bash


DIR_DEST="${HOME}/Downloads/Daggerfall"
DIR_RAM="${HOME}/dag_ram"
DIR_UNITY="${HOME}/.config/unity3d/Daggerfall/Workshop"
RAM1_SIZE="560M"
RAM2_SIZE="360M"
RAM3_SIZE="580M"

dir_create() {
    mkdir -p "${DIR_DEST}";chmod 777 "${DIR_DEST}"
    mkdir -p  "${DIR_RAM}";chmod 777 "${DIR_RAM}"
    mkdir -p "${DIR_UNITY}";chmod 777 "${DIR_UNITY}"
}

dir_rm() {
    rm -rf "${DIR_DEST}"
    rm -rf "${DIR_RAM}"
    rm -rf "${DIR_UNITY}"
}

case $1 in
    start)
        dir_create
        mount -t tmpfs -o size="${RAM1_SIZE}" tmpfs "${DIR_DEST}"
        cp -r /home/oleg/Downloads/Daggerfall_ram/* "${DIR_DEST}" <-- ПРОДОЛЖИТЬ ЗДЕСЯ\ТУТА
        mount -t tmpfs -o size="${RAM2_SIZE}" tmpfs "${DIR_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="${RAM3_SIZE}" 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)
        dir_remove
        ;;
    restart)
        $0 stop
        sleep 2
        $0 start
        ;;
    *)
        echo "Usage: $0 [start|stop|restart]"
        ;;
esac
serg002 ()
Последнее исправление: serg002 (всего исправлений: 2 )

Переписать на systemd ибо для 99% пользователей твоя инструкция бесполезна.

С потерей сохранений нужно что-то делать. На рассвете ssd все упарывались переносом кэша браузера в RAM, чтобы снизить износ диска. Чтобы при этом профиль браузера не сбрасывался, использовали какие-то трюки. Или overlayfs или ещё что-то. Я не помню. Можно эти фишки использовать для твоих сохранений.

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

Переписать на systemd ибо для 99% пользователей твоя инструкция бесполезна.

Глупости. systemd хоть и ненужно, но его авторы всё-таки понимали, что без поддержки запуска инит-скриптов его ненужность станет очевидна даже идиотам.

firkax ★★★ ()

А теперь злонамеренный юзер делает такую команду

mv /home/oleg/Downloads /home/oleg/Downloads.x
mkdir /home/oleg/Downloads
ln -s /etc /home/oleg/Downloads/Daggerfall

и на следующем ребуте комп скорее всего уже не запустится. А если всё-таки запустится, то следующий этап: кладём в /home/oleg/Downloads/Daggerfall_ram/ специально сделанные скрипты, которые, при попадании в /etc, дадут юзеру рут-доступ.

Чтобы избежать всех этих уязвимостей, надо монтировать tmpfs строго снаружи от /home/username и давать туда симлинк из $HOME уже с правами юзера

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

Ну это же бред. Ты же понимаешь чтобы записать этот скрипт в /etc/rc.d и выставить его запуск в rc.conf уже нужен root? Так что все эти танцы с обходом бессмысленны, у человека уже есть права.

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

Вот именно, не надо с рут-правами записывать в /etc такие скрипты, которые потом позволят нерутовому юзеру запороть или взломать систему. Вообще, общее правило: в /etc не должно быть никаких упоминаний файлов внутри /home/username/ ни под каким предлогом. Потому как в /etc - системные настройки, а содержимое /home/username - юзерское.

у человека уже есть права.

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

firkax ★★★ ()

Если оставить в стороне ненужность идеи, то стоит посмотреть в сторону zram, и сильно упростить реализацию, убрав самопальный инит, вынеся копирование в скрипт на уровне пользователя.

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

Тестировал по сравнению с SSD, там требует чтобы половина места была пустая, иначе работает на уровне HDDпо скорости. А тут можно места впритык выделить, и тормозить не начнет.

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

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

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

Это быстрее SSD. Кроме того SSD требует, чтобы место было наполовину пустым, столкнулся с этим когда отрезал от SSD раздела кусочек. Иначе скорость примерно как у HDD.

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

Тестировал по сравнению с SSD, там требует чтобы половина места была пустая, иначе работает на уровне HDDпо скорости.

Байки или говно-ссд.

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

Столкнулся с этим на практике. Воспроизводится просто - отрежь кусок от раздела и забей его больше чем наполовину, затем проверь скорость считывания и скорость записи. Увидел это на NVME

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

отрежь кусок от раздела и забей его больше чем наполовину

ssd ничего не знает о разделах. Это вопросы к файловой системе.

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

Это быстрее SSD

В теории. На практике - я сомневаюсь, что это «быстрее» ощущается человеком.

Кроме того SSD требует, чтобы место было наполовину пустым, столкнулся с этим когда отрезал от SSD раздела кусочек. Иначе скорость примерно как у HDD.

Хз о чём ты.

alex1101 ()

Какое-то извращение, тем более для такой игры. Какая там нагрузка на I/O вообще, чтобы что-то изменилось? Загрузка на секунду короче?

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

Делай тогда chmod -R 0777 / сразу. Система разделения прав не просто так сделана и даже с одним человеком-пользователем полезна в плане барьеров безопасности. И при их рассмотрении надо забыть о том, кто реально пользуется компом, и думать в терминах unix-аккаунтов и unix-прав. Рут это системный администратор, юзер это юзер, и дыры в административные доступы у него быть не должно.

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

Он нерабочий изначально т.к. $HOME у него будет либо / либо /root а не /home/oleg

А главную проблему его скрипта (дыру из юзера oleg до юзера root) ты даже не пытался исправлять.

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

И при их рассмотрении надо забыть о том, кто реально пользуется компом, и думать в терминах unix-аккаунтов и unix-прав

А толку? Зачем усложнять себе жизнь? Какие преимущества это даст?

Система разделения прав не просто так сделана и даже с одним человеком-пользователем полезна в плане барьеров безопасности

В целом, бесполезна на домашнем компьютере. Пользовательские данные хранятся в доступе пользователя, и именно они являются самыми существенными.

Если ты поймал неиллюзорную малварь, дел она и так предостаточно сможет натворить. Хочешь действительно безопасности - пускай в контейнере или ещё лучше в виртуалке.

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

Так это.. сколько % ускорения даёт то..?

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

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

Пользовательские данные хранятся в доступе пользователя, и именно они являются самыми существенными.

Значит запускай игру от другого юзера, у которого нет важных данных (я так и делаю). И доступ к подмене /etc этому юзеру тоже давать не надо.

И в любом случае, подход «всё равно всё будет плохо, поэтому не буду даже пытаться» приводит, закономерно, как раз к плохим последствиям.

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

поругаю сразу:

chown -R oleg /home/oleg/Downloads/Daggerfall
если уж делать нормально, то можно делать как-то так (код ясно не тестил и даже не смотрел bash там или sh, так что может там `whoami` нормально не отработает и надо вместо этого писать $(whoami)):

chown -R `whoami` ~/Downloads/Daggerfall

Как понимаешь, даже сделав это, я найду ещё 100500 способов поругать код, пока он не превратится в какой-то заумный и дико непонятный однострочник/код вида ехала абстракция через абстракцию, потому KISS наше всё.

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

Если скрипт будет запускаться от рута, то подставит тебе root. Лучше вынести

CHROOR_USER='user'
serg002 ()

Я за удаление статьи в таком виде, в котором она сейчас есть

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

SSD требует, чтобы место было наполовину пустым, столкнулся с этим когда отрезал от SSD раздела кусочек. Иначе скорость примерно как у HDD

fstrim -av

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

Какой изврат только не делают ради игрушечек.

turbognida ()

Зойчем копировать если есть bcache. Зойчем bcache, если и так всё в оперативку через кеширование влезает

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

В некоторых небольших livecd есть опция при загрузке copytoram или похожая. Можно портянку написать которая при загрузке /usr сетапит в tmpfs

etwrq ★★★★★ ()

У меня памяти 128гектар, я как то ради интереса весь Киберпанк засунул в tmpfs. Разницы в работе по сравнению с NVMe SSD в игре не почувствовал, один чорт оно в видимокарту упирается.

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

продолжайте вести наблюдение(с)

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