Аналог need for speed linux
Серия Need for Speed известна всем фанатам гонок, и для многих она стала первой, с которой они и начали знакомство с жанром. Игры серии нельзя назвать длинными и пройти их можно относительно быстро. Да и между самими отдельными играми разница бывает минимальной, из-за чего они быстро наскучивают. Поэтому мы постарались собрать игры, похожие на Need for Speed в одном списке, так вам будет проще найти лучшую игру на PC для себя и вновь ощутить прилив адреналина от скорости на трассе.
Forza Horizon 4
Forza Horizon 4 — аркадный гоночный симулятор, который смог прославиться благодаря своему открытому миру. Предыдущая часть серии позволяла игрокам насладиться австралийскими красотами, тогда как четвертая часть перенесла геймеров в туманную Британию, где также будет чем развлечься во время исследования местных дорог. Особенностью игры стала динамичная смена сезонов — примерно неделю в игре длится зима, весна, лето, осень. В зависимости от текущего времени года зависит состояние дорог. Во время гололеда удержать спорткар на дороге — задача не самая простая, в отличие от внедорожника. Множество классов автомобилей, большая разница в характеристиках между ними, разнообразные трассы и гибкие настройки управления, от аркады до симулятора делают Forza Horizon 4 одной из лучших гоночных аркад.
The Crew 2
The Crew 2 похожа на Need for Speed не только общими принципами гонок, но и игровым процессом. По сюжету, теперь геймер — один из тех молодых гонщиков, что желают покорить один большой гоночный фестиваль. Для получения чемпионского титула потребуется освоить сразу несколько типов транспорта. Да, в The Crew 2 доступны гонки не только на автомобилях, но и мотоциклах, самолетах, катерах. Причем переключиться между ними можно в любой момент. Гонка может начаться на земле, продолжиться в воздухе и завершиться адреналиновой погоней на катерах в прибрежной полосе. Все это звучит здорово не только на словах, но и на деле. При этом, для каждой гонки доступно несколько различных режимов. А также стоит прибавить сюда возможность исследовать большой открытый мир, наполненный различными испытаниями и секретами.
Driver: San Francisco
Driver: San Francisco — продолжение серии Driver, что позволяет игрокам снова ощутить себя в шкуре Таннера, который, однако, впал в кому, что не мешает ему продолжать ловить Джерико и в этом состоянии. Игроку предстоит колесить по Сан-Франциско, периодически выполняя сюжетные поручения и дополнительные задания на протяжении семи эпизодов. Уникальной особенностью игры стала возможность переключения на другие автомобили во время движения по трассе, что позволяет решать различные задачи, в зависимости от миссии.
Burnout Paradise: The Ultimate Box
Burnout Paradise: The Ultimate Box можно отнести к играм типа Need for Speed, поскольку многие механики здесь довольно похожи. В частности, здесь также имеется компактный город, по которому можно проехаться в поисках новых автомобилей и гонок. Каждая трасса обладает секретными местами и альтернативными путями, которые довольно интересно искать. Главной фишкой игры можно считать проработанную физику разрушений. Во время аварий у машин сминаются и отваливаются двери, кузов становится плоским, стекла бьются, колеса отлетают. Все это добро игра с большим удовольствием показывает в режиме замедленной съемки.
Forza Motorsport 6: Apex
Forza Motorsport 6: Apex стала первой игрой серии, что появилась на Windows, переехав прямиком с Xbox. Карьера представлена 12-ю гонками, где также сделаны обучающие ролики, способные подготовить игрока к изучению различных тонкостей игровой механики. Всего же геймеров ожидает шесть локаций, 20 треков, а также более 60 моделей автомобилей.
Test Drive Unlimited
Test Drive Unlimited — попытка возродить старую серию Test Drive, причем успешная. В качестве основной локации выступают Гавайи, которые и предстоит изучать в режиме открытого мира. В игре, помимо исследования мира, можно подвозить девушек, смотреть дома и участвовать в веселых догонялках с полицией. Отдельным достоинством игры можно назвать проработанные салоны каждого автомобиля, а для любителей очень быстрой и адреналиновой езды имеются мотокциклы.
Street Racing Syndicate
Street Racing Syndicate можно занести в похожие на Need for Speed проекты, поскольку разработчики постарались аккуратно скопировать как можно больше интересных механик. Однако, релиз в 2004 году, накануне выхода Underground 2, не позволил игре получить заслуженную популярность. Несмотря на довольно слабую физику и не самый умный ИИ, в игре реализована реалистичная система повреждений — авто может терять часть характеристик при столкновениях. Имеется и большой открытый город, который можно исследовать под расслабляющую музыку. Гонки с полицией также прилагаются, как и дополнительные квесты, где главный герой может заполучить себе девушку. Суть игры заключается в прохождении всех гонок, а также финальной дуэли. Street Racing Syndicate — одна из самых недооцененных аркадных гонок, продолжение которой вряд ли сможет увидеть свет.
Forza Horizon 4
Forza Horizon 4 – очередной выпуск аркадной гоночной серии, основной фишкой которого стала динамическая смена сезонов, дополняемая огромным открытым миром и обширным.
The Crew 2
The Crew 2 – продолжение глобальной онлайновой гонки с возможностью опробовать не только автомобили, но и мотоциклы, катера и самолеты
CarX Drift Racing Online
CarX Drift Racing – гость с мобильных платформ, посвященный исключительно дрифту: игрокам предстоит покупать и настраивать автомобили, выезжать на специальные трассы и.
Drift King: Survival
Drift King: Survival – онлайновый симулятор дрифта с кучей культовых японских, американских и германских автомобилей. Любителям заниженных тачек и дыма из под колес.
The Crew: Calling All Units
The Crew: Calling All Units – «полицейское» дополнение к онлайновому гоночному симулятору с новой механикой игры за блюстителей порядка
Forza Horizon 3
Forza Horizon 3 – третья часть эксклюзивной для Xbox серии, действие которой разворачивается на просторах Австралии. В игре появились гоночные багги, кооператив на четверых и.
Forza Motorsport 6: Apex
Forza Motorsport 6: Apex – первая гонка из серии Forza, вышедшая на PC. В комплекте идут 6 гоночных трасс, 63 автомобиля и фирменная система Drivatar
The Crew: Wild Run
The Crew: Wild Run – второй аддон к онлайновой гонке The Crew, подаривший игрокам четыре новых вида транспортных средств и легендарное мероприятие The Summit
Nitro Nation
Nitro Nation – адреналиновый драг-рейсинг с отличной графикой, кучей «заряженных» автомобилей и солидными возможностями по тюнингу
World of Speed
World of Speed – аркадная многопользовательская гонка, ориентированная на командную игру. Проект может похвастаться реальными трассами реальных городов и отличной коллекцией.
The Crew
Одна из немногих на сегодня онлайновых гонок под названием The Crew позволит вам не только поколесить по всей Америке, но и собрать свое собственное авто буквально из тысячи.
Drift City
Drift City – представитель редкого жанра MMO-гонок. Проект во многом схож с NFS World, но заметно отличается по качеству, причем в худшую сторону, как по качеству графики.
Burnout Paradise: The Ultimate Box
Как правило, аварии в аркадных гонках вызывают либо скрежет зубов, либо увечья клавиатуры, либо нажатие кнопки Exit. Однако играя в Burnout Paradise: The Ultimate Box.
Driver: San Francisco
За последние несколько лет, Driver: San Francisco оказалась единственной аркадой, чей сюжет нельзя обвинить в затянутости.
Test Drive Unlimited
В 2006 году компания Eden Games начало разработку игры Test Drive Unlimited, которая возродила серию.
В целом, Grid можно назвать событием в мире аркадных гонок. Динамичный и практически не надоедающий проект. Хотя не надоедает он по одной простой причине – игра слишком.
Пришлось изучать внутренние механизмы Git и сетевой файловой системы NFS. В итоге мы нашли баг в клиенте Linux v4.0 NFS, Тронд Мюклебуст (Trond Myklebust) написал патч для ядра, и с 26 октября этот патч входит в основное ядро Linux.
В этом посте я расскажу, как мы изучали проблему, в каком направлении думали и какие инструменты использовали, чтобы отследить баг. Мы вдохновлялись отличной детективной работой Олега Дашевского, описанной в посте «Как я две недели охотился за утечкой памяти в Ruby».
А еще это отличный пример того, что отладка ПО с открытым исходным кодом — это командный спорт, в котором участвует много людей, компаний и стран. Девиз GitLab «Каждый может внести свой вклад» справедлив не только для самого GitLab, но и для других проектов с открытым исходным кодом, например для ядра Linux.
Воспроизведение бага
- Полный текст ошибки: fatal: Couldn't read ./packed-refs: Stale file handle .
- Судя по всему, проблема возникала, когда клиент вручную запускал сборку мусора в Git командой git gc .
- Ошибка пропадала, когда системный администратор запускал утилиту ls в каталоге.
- Ошибка пропадала, когда процесс git gc завершался.
Понятно, что первые два пункта связаны. Когда вы отправляете изменения в ветку Git, Git создает слабую ссылку — длинное имя файла, которое указывает имя ветки для коммита. Например, при отправке в master будет создан файл с именем refs/heads/master в репозитории:
Команда git gc выполняет несколько задач. Например, собирает эти слабые ссылки (refs) и упаковывает их в один файл с именем packed-refs . Это немного ускоряет работу, ведь прочитать один большой файл проще, чем много маленьких. Например, после запуска команды git gc файл packed-refs может выглядеть как-то так:
Как создается файл packed-refs ? Чтобы это узнать, мы запустили команду strace git gc там, где у нас была слабая ссылка. Вот строки, которые относятся к делу:
Системные вызовы показали, что команда git gc :
- Открыла packed-refs.lock . Это говорит другим процессам, что файл packed-refs заблокирован и не может меняться.
- Открыла packed-refs.new .
- Записала слабые ссылки в packed-refs.new .
- Переименовала packed-refs.new в packed-refs .
- Удалила packed-refs.lock .
- Удалила слабые ссылки.
Ключевой пункт здесь — четвертый, то есть переименование, где Git вводит файл packed-refs . git gc не только собирает слабые ссылки, но и выполняет куда более ресурсоемкую задачу — ищет и удаляет неиспользуемые объекты. В больших репозиториях это может длиться больше часа.
И мы спросили себя: а в больших репозиториях держит ли git gc файл открытым во время очистки? Мы изучили логи strace , запустили утилиту lsof , и вот что узнали о процессе git gc :
Как видно, файл packed-refs закрывается в самом конце, после потенциально долгого процесса Garbage collect objects .
Так возник следующий вопрос: как ведет себя NFS, когда на одной ноде открыт файл packed-refs , а другая в это время переименовывает его?
"В научных целях" мы попросили клиента провести один эксперимент на двух разных машинах (Элис и Боб):
1) В общем томе NFS создайте два файла: test1.txt и test2.txt с разным содержимым, чтобы их было проще различать:
2) На машине Элис файл test1.txt должен быть открыт:
3) На машине Элис непрерывно показывайте содержимое test1.txt :
4) Затем на машине Боб выполните команду:
Последний шаг воспроизводит то, что делает git gc с файлом packed-refs , когда перезаписывает существующий файл.
На машине клиента результат выглядел примерно так:
Есть! Кажется, мы контролируемо воспроизвели проблему. Но в этом же эксперименте на Linux NFS-сервере такая проблема не возникла. Результат был ожидаемым — после переименования принималось новое содержимое:
Откуда эта разница в поведении? Оказывается, клиент использовал хранилище Isilon NFS, которое поддерживало только NFS v4.0. Когда мы изменили параметры подключения на v4.0 с помощью параметра vers=4.0 в /etc/fstab , тест показал другой результат для Linux NFS-сервера:
Вместо устаревшего дескриптора файла Stale file handle сервер Linux NFS v4.0 показывал устаревшее содержимое. Оказывается, разницу в поведении можно объяснить спецификациями NFS. Из RFC 3010:
Дескриптор файла может устареть или потерять силу при переименовании, но не всегда. Специалистам по внедрению серверов рекомендуется принять меры, чтобы дескрипторы файлов не устаревали и не теряли силу таким образом.
Иными словами, NFS-серверы могут выбирать, как себя вести, когда файл переименован, и NFS-сервер вполне обоснованно возвращает ошибку Stale file error в таких случаях. Мы предположили, что причина проблемы — та же, хотя результаты и были разными. Мы подозревали, что дело в проверке кэша, ведь утилита ls в каталоге убирала ошибку. Теперь у нас был воспроизводимый тестовый сценарий, и мы обратились к экспертам — мейнтейнерам Linux NFS.
Ложный след: делегирование на NFS-сервере
Когда мы сумели пошагово воспроизвести ошибку, я написал контактам по Linux NFS о том, что мы узнали. Неделю я переписывался с Брюсом Филдсом, мейнтейнером Linux NFS-сервера, и он предположил, что баг в NFS и нужно изучить сетевой трафик. Он думал, что проблема в делегировании задач на NFS-сервере.
Что такое делегирование на NFS-сервере?
В двух словах, в версии NFS v4 появилась функция делегирования для ускорения доступа к файлам. Сервер может делегировать доступ на чтение или запись клиенту, чтобы клиенту не пришлось постоянно спрашивать у сервера, не изменен ли файл другим клиентом. Проще говоря, делегирование записи — это как одолжить кому-то свой блокнот и сказать: «Ты пока тут пиши, а я заберу его, когда буду готов». И человеку не придется просить блокнот каждый раз, когда нужно что-то записать — у него есть полная свобода действий, пока блокнот не отнимут. В NFS просьба вернуть блокнот называется отзывом делегирования.
Баг в отзыве делегирования в NFS мог бы объяснить проблему Stale file handle . Помните, как в нашем эксперименте у Элис был открыт test1.txt , а потом его заменил test2.txt . Может быть, серверу не удалось отозвать делегирование для test1.txt , и это привело к неверному статусу. Чтобы проверить эту теорию, мы записали трафик NFC утилитой tcpdump и визуализировали его с помощью Wireshark.
Wireshark — это отличный инструмент с открытым исходным кодом для анализа сетевого трафика, особенно для изучения NFS в действии. Мы записали трассировку с помощью следующей команды на NFS-сервере:
Эта команда записывает весь NFS-трафик, который обычно проходит через порт TCP 2049. Раз наш эксперимент удался с NFS v4.1, но не с NFS v4.0, мы могли сравнить поведение NFS в рабочем и нерабочем случае. С Wireshark мы увидели следующее поведение:
NFS v4.0 (устаревший файл)
NFS v4.1 (рабочий случай)
Почему Элис вдруг решается на дополнительный LOOKUP ? Судя по всему, отзыв делегирования прошел успешно, но какая-то проблема, видимо, осталась. Например, пропущен шаг инвалидации. Чтобы это проверить, мы исключили делегирование NFS на самом NFS-сервере этой командой:
Мы повторили эксперимент, но проблема никуда не делась. Мы убедились, что проблема не в NFS-сервере или делегировании, и решили посмотреть на NFS-клиент в ядре.
Копаем глубже: Linux NFS-клиент
Первый вопрос, на который мы должны были ответить мейнтейнерам NFS:
Эта проблема сохраняется в последней версии ядра?
Проблема возникала в ядрах CentOS 7.2 и Ubuntu 16.04 с версиями 3.10.0-862.11.6 и 4.4.0-130 соответственно. Но оба ядра отставали от последней версии, которой на тот момент была 4.19-rc2.
Мы развернули новую виртуальную машину Ubuntu 16.04 на платформе Google Cloud Platform (GCP), клонировали последнее ядро Linux и настроили среду разработки ядра. Мы создали файл .config с помощью menuconfig и проверили, что:
- Драйвер NFS скомпилирован как модуль ( CONFIG_NFSD=m ). указаны верно.
Генетики отслеживают эволюцию в реальном времени по дрозофилам, а мы с помощью первого пункта могли по-быстрому вносить правки в NFS-клиент, не перезапуская ядро. Второй пункт гарантировал, что ядро запустится после установки. К счастью, нас устроили параметры ядра по умолчанию.
Мы убедились, что проблема устаревшего файла никуда не делась в последней версии ядра. Мы спросили себя:
- Где именно возникает проблема?
- Почему это происходит в NFS v4.0, но не в v4.1?
Чтобы ответить на эти вопросы, мы углубились в исходный код NFS. Отладчика ядра у нас не было, так что мы посылали в исходный код вызовы двух типов:
- pr_info() ( раньше это был printk ).
- dump_stack() : он показывает трассировку стека для текущего вызова функции.
Например, первым делом мы подключились к функции nfs4_file_open() в fs/nfs/nfs4file.c :
После каждого изменения мы перекомпилировали модуль и переустанавливали его в ядро с помощью команд:
Что это за вызовы do_dentry_open и vfs_open ? В Linux есть виртуальная файловая система (virtual filesystem, VFS) — слой абстракции, который предоставляет общий интерфейс для всех файловых систем. В документации по VFS говорится:
VFS реализует open(2), stat(2), chmod(2) и другие системные вызовы. Система VFS использует аргумент имени пути, который им передается, для поиска по кэшу записей каталога (dentry-кэш, или dcache). Это обеспечивает очень быстрый механизм поиска, который преобразует имя пути (или имя файла) в конкретный dentry. Dentry находятся в RAM и никогда не сохраняются на диске — они существуют только для производительности.
И нас осенило — а что если проблема в dentry-кэше?
Мы заметили, что dentry-кэш обычно проверяется в fs/nfs/dir.c . Особенно нас заинтересовала функция nfs4_lookup_revalidate() , и в качестве эксперимента мы заставили ее сработать раньше:
И в этом эксперименте проблема устаревшего файла не возникла! Наконец, мы напали на след.
Чтобы узнать, почему проблема не возникала в NFS v4.1, мы добавили вызовы pr_info() в каждый блок if в этой функции. Мы поэкспериментировали с NFS v4.0 и v4.1 и нашли особое условие в версии v4.1:
Что такое NFS_CAP_ATOMIC_OPEN_V1 ? В этом патче к ядру говорится, что это функция версии NFS v4.1, и код в fs/nfs/nfs4proc.c подтвердил, что этот параметр есть в v4.1, но отсутствует в v4.0:
Поэтому версии вели себя по-разному — в v4.1 goto no_open вызывает больше проверок в функции nfs_lookup_revalidate() , а в v4.0 функция nfs4_lookup_revalidate() возвращается раньше. И как мы в итоге решили проблему?
Решение
Оказывается, исправление для бага NFS v4.0 было глубже в базе кода, чем мы думали. Тронд хорошо описал это в патче:
Нужно сделать так, чтобы inode и dentry правильно перепроверялись, когда открывается уже открытый файл. Сейчас мы не перепроверяем ни то, ни другое в NFSv4.0, потому что открытый файл кэширован. Давайте это исправим и будем кэшировать открытые файлы только в особых случаях — для восстановления открытых файлов и возврата делегирования.
Мы убедились, что это исправление решило проблему устаревшего файла, и отправили отчеты о багах командам Ubuntu и RedHat.
Мы прекрасно понимали, что изменения окажутся в стабильной версии ядра еще не скоро, так что добавили временное решение этой проблемы в Gitaly. Мы поэкспериментировали и проверили, что вызов stat() в файле packed-refs заставляет ядро перепроверять переименованный файл в dentry-кэше. Для простоты мы реализовали это в Gitaly для любых файловых систем, не только для NFS. Проверка выполняется только один раз, прежде чем Gitaly открывает репозиторий, а для других файлов уже есть другие вызовы stat() .
Чему мы научились
Баг может прятаться в любом уголке стека программного обеспечения, и иногда искать его нужно за пределами приложения. Если у вас есть полезные связи в мире открытого исходного кода, это облегчит ваш труд.
Огромное спасибо Тронду Мюклебусту за то, что исправил проблему, и Брюсу Филдсу за то, что ответил на наши вопросы и помог разобраться в NFS. Именно за такую отзывчивость и профессионализм мы ценим сообщество разработчиков открытого исходного кода.
Хотя "Безумный Макс" не имеет отношения к киносерии, он основан на ее вселенной. Макс Рокатанский пытается достичь "Равнины Тишины", места, в котором, как он верит.
Суетитесь днем и рискуйте всем этим ночью в Need for Speed™ Жара, захватывающий гоночный опыт, который сталкивает вас с изгоями городской полиции, когда вы сражаетесь.
Станьте абсолютной иконой современной городской автомобильной культуры в Need for Speed™ с пятью способами игры и огромным открытым миром для гонок и исследований от заката.
Project CARS - это потрясающее гоночное путешествие! Игра Project CARS, протестированная и одобренная страстными поклонниками гонок и реальными гонщиками, принимавшими участие также и в ее.
С возвращением в Paradise City! Докажите всем, что скорость - ваше второе имя! Доминируйте на улицах Burnout™ Paradise Remastered. Взорвите город! Весь мир - ваша.
Загрузите пробную версию The Crew® 2 и наслаждайтесь игрой в полной мере на протяжении 4 часов! Представляем новинку революционной серии игр The Crew! Насладитесь азартом.
BeamNG.drive — это игра в жанрах симуляторы и гонки, разработанная SureHit Studio и BeamNG. Она вышла 29 мая 2015 г.. BeamNG выступила издателем игры. BeamNG.drive.
Вас ждёт бесконечный калейдоскоп приключений Horizon! Совершайте увлекательные поездки по невероятно красивому и самобытному миру Мексики за рулём величайших автомобилей в истории. Вас ждут увлекательные.
Особое праздничное Anniversary издание WRC 10, подготовленное в честь 50-летия чемпионата, подарит вам не только дополнительные игровые возможности, но и новые эмоции. Возродите самые яркие.
Counter-Strike: Condition Zero-это вторая часть многопользовательского шутера от первого лица серии Counter-Strike. Это единственная игра в основной серии Counter-Strike, которая включает в себя однопользовательскую кампанию.
Grand Theft Auto (GTA 5) — продолжение серии игр Grand Theft Auto. Новую часть анонсировали в 2011 году. Официальный релиз на PlayStation 3 и Xbox.
Grand Theft Auto - San Andreas-это седьмая запись в серии во франшизе GTA, но только второй большой титул после GTA - Vice City. Оказавшись в.
Grand Theft Auto: Vice City-это шутер от третьего лица с открытым миром. Действие игры разворачивается в вымышленном городе 1980-х годов и демонстрирует уникальный дизайн локаций.
Читайте также: