среда, 20 января 2021 г.

Snort3

 Вышел снорт3, порт снорта2, написанного на С, порт на С++.

Вижу в коде совершенно неприемлемые для разработчика с любым стажем неловкости портирования.

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

Для поиска в этих списках само собой приходится итерировать по списку.

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

Но нет.  Осуществлен пословный перевод с С на С++. Более того.  Выбран худший контейнер. Вместо связанного списка задействовали вектор. std::vector<>. Так и вижу этот разговор между сеньором и джуном:

Джун: 

-вижу в снорте2 связанный список. модифицируется изредка. Для поиска пробегается весь список. На что меняем в снорте3 - на очередь и так же будем бегать?

Сеньор:

-совсем больной? какая очередь?

-ну а на что тогда?

-ну если совсем идей нет то попробуй вектор

-нет проблем


суббота, 9 января 2021 г.

 Gentoo + steam = linux gaming 

Собрал системничек на базе #ксеонов_с_алиэкспресса, добавил видяйку, поставил #генту, #стим, вроде бы бы всё работает, что удивительно. Даже виндовые игры.  

Железо:  система с алиэкспресса  Xeon E5-2690 @ 2.90GHz 32Gb  + GeForce GTX 1660 SUPER,  ssd на 480гиг и nvme на терабайт. Старый корпус, на всякий случай пару вентиляторов подвесил в корпусе, причем один костылями, с сомнительной необходимостью в этом костылинге.

Софт: Linux 5.4.80-gentoo-r1 + steam 1.0.0.67  + Proton.  

Можно и без протона, если ограничиться только играми, рассчитанными под SteamOS, это тот же линукс, насколько я понял. ТомбРейдер, например, или BlackMesa имеют версии под линукс=SteamOS. Но после установки этого 'compatibility tool=Proton' становятся доступны и виндовые игры. Подробнее статус поддержки игр надо узнавать в протондб, например вот страничка для GTA V.
При выбранном протоне на вкладке 'compatability' по шестеренке/properties кнопка install/play становится доступной в вендовых играх:


Видеокарта работает под NVIDIA drivers pack #455:

С дровами ещё надо что-то поделать, вручную сейчас скриптом в автостарте local.d модули подгружаю перед стартом иксов, в определенном порядке. Надо бы поизучать проблему, но лень.

В библиотеке уже просмотрены, успешно запущены Rise of the Tomb Raider,  Serious Sam 2-4, DOOM Eternal, Black Mesa, Euro Truck Simulator 2, GTA 4-5, CS и ещё ряд тайтлов.

Собственно, с нерешаемыми проблемами ещё не столкнулся.

TombRaider предупреждает при старте о том, что в биосе для цпу не выбран режим perfomance mode, это действительно так, но производительности хватает. По крайней мере, хватает для full HD:



 Проектор не держит 4к, на телевизоре не так интересно играть. Докупил моник фуллхдшный, подключил и моник и проектор к видяйке в режиме копирования экрана, в конфигураторе nvidia-settings это выглядит таким образом: 



 Что пришлось подправить, в принципе больших проблем не было, но упоминуть стоит.
1. Вначале хотел сжульничать, запустить на системе простую копию установленной и настроенной системы со старой машины. Выяснилось, что если  просто в эту интеловскую систему переткнуть диск/скопировать раздел с системы х64 но под амд, то гипертрединг не будет включаться - в /proc/cpuinfo будет 8 cpu вне зависимости от переключателя в биос.  Ядро собрано с -march=native, или же какие-то опции в menuconfig ядра выбраны, результат интересен. 

Не стал разбираться, в чём именно дело, ибо даже с загрузочной флешки отображается всё корректно. Надо просто пересобраться с -march=native на новой системе.

2. Подгрузку модулей для nvidia пришлось задавать руками - nvidia.ko, далее nvidia-modeset.ko, потом nvidia-drm.ko. упоминал про это.
Ну как бы на этом всё.

Теперь по софту. Cтим ставил по гентушному вики. Всё работает.

Запускаю из консоли, именно через ./steam. Как выяснилось, это дает хороший обьём информации для решения проблем, ибо происходит обильное логирование в stdout/err. 

Создал аккаунт в стиме,  вышел из стима, столкнулся с проблемой:
при установленной галочке "помнить логин" стим  падает при запуске.

 Надо снять эту галочку, вводить пароль при каждом старте стима.
Для удаления сохраненного логина надо выполнить rm -fr ~/.local/share/Steam/config

Сходу запустилась без проблем Rise of Tomb Raider.
Ввообще все игры с отметкой Steam OS должны запускаться без проблем, но на самом деле есть исключения. Например, Black Mesa: не стартовала, в консоль были жалобы о невозможность инициализировать аудиокарту.   Помогло тогда создание ~/.asoundrc,  такого плана:


Ставил же систем с нуля, как-то не заметил отсутствия. Да и не все игры требовали, по умолчанию всё находилось норм. В качестве звуковой использую встроенную в мать реалтековскую.
Но для GTA V и Doom Eternal этого было недостаточно. Вылетали с сообщением что-то типа "Failed to open audio .. device is busy". То есть, устройство никто не использовал, но при старте игрушки само окружение чем-то занимало звуковую карту и далее не отдавало.
Решил довольно просто - разрешил открывать устройство сразу нескольким приложениям. Возможно, что есть и другое решение, но  мне достаточно и этого - задания dmix в .asoundrc, теперь мой .asoundrc выглядит таким образом:


Для копипасты весь файлик текстом, все 4 строчки:

pcm.!default {
        type plug
        slave.pcm "dmix"
}

 GTA V требует скачивания ~100Gb файлов. Трижды подумайте. Далее при старте жалуется, что не хватает лимита на открытые файлы. Поднял до 655535, через /etc/security/limits.conf:

Хватило- https://www.youtube.com/watch?v=SzrCdmXu1Y4