Show newer
Roman boosted

К вопросу использования #epoll вместо хорошо знакомых и «традиционных» select & poll. Т.е. асинхронной работы с чем-либо посредством polling’а и мультиплексирования.

Недавно пришлось заниматься реализацией очереди событий для AMQP-CPP. В одном из продуктов решено сделать связь агентских частей с основным «контроллером» через #AMQP, в качестве брокера #RabbitMQ (всё стандартно, обычный кластер и TLS-соединения).

Вот только агенты продукта активно используют асинхронно-реактивное программирование с хорошей «горизонтальной масштабируемостью». Когда достигнуто полноценное sharing nothing, не просто горизонтальная масштабируемость через lock-free или wait-free и закон Амдала. Исключается много всего и сразу, как старый-добрый cache ping-pong, так и печаль с false sharing.

Отсюда внутри агентов и своё управление потоками с выделениями памяти. Не только в плане heap (динамической памяти, со своими аллокаторами а-ля #jemalloc от #Facebook), но и приколы вокруг узлов #NUMA и даже huge pages (снижающих «давление» на #TLB, меньше промахов).

Первая же проблема выплыла почти сразу — не реально использовать библиотеку AMQP-CPP с уже предоставляющейся поддержкой #libev, #libuv, #libevent. Несовместимы эти очереди сообщений с имеющейся моделью управления потоками и организации задач на агентах.

Почему был взят epoll

Подход используемый в #epoll выглядит более современно, меньше копирований памяти между user space и kernel space. А при появлении данных в отслеживаемом файловом дескрипторе можно напрямую перейти по указателю на объект класса или структуру данных. Тем самым обходиться без поиска дескриптора по индексным массивам/контейнерам. Сразу же работать с экземплярами объектов оборачивающих нужное #tcp -соединение, того самого, в которое и пришли данные.

И тут обозначилась вторая проблема, что используема AMQP-библиотека не вычитывает данные целиком из потока сокета. Например, забирает данные лишь до тех пор, пока не насытится автомат состояний (finite-state machine), выполняющий парсинг сущностей AMQP-протокола.

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

срабатывание оповещений «по уровню» (level-triggered),
выбрасывания событий «по фронту» (edge-triggered).

И беда с библиотекой в очередной раз показала, что нельзя использовать работу «по фронту» (edge-triggered) не изучив досконально работу подсистемы отвечающей за вычитывание данных из файловых дескрипторов. И появление флага EPOLLET в коде является маркером, о том, чтобы проводить аудит использовавшихся решений.

Про Edge Triggered Vs Level Triggered interrupts можно почитать в https://venkateshabbarapu.blogspot.com/2013/03/edge-triggered-vs-level-triggered.html)

#programming #linux #трудовыебудни

Path of exaile 2 выглядит отлично, но играть в экшен рпг я не люблю, нужно жать кнопки со скоростью пулемета.

Roman boosted

Рики (19.08): Объявление в газете : "При покупке 500 мб оперативной памяти вы получмете 12 мб бесплатно, при покупке 1000 мб - 24 мб бесплатно!". Капаццо!!11!адин

Судя по всему следующий ноут будет от msi. Дорожный превосходен. Начну собираться текущий продать таки и когда выйдут ноуты на 5080 5090 куплю новый. На этот раз может даже проверю что бы был более совместим с линуксом :)

В общем все, что я прекрутил так и не помогло, перегружается. Так что полдня играл в винде, крутить надоело :) Судя по всему судьба ноута быть игровой приставкой.

Но зато кажется я понял еще вариант причины перезагрузок, попробую. Раньше убунта не перегружалась так часто, это дай бог раз в год было.

Show thread

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

Поставил pop os, первый рестарт наступил через минуту. Видать не катит.

Кстати, на маке глючит dbeaver, а мне нравится эта штука.

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

В США президент осужденный уголовник, о дивный чудный мир :) Что происходит вообще :)

Но я не стал настаивать, не хочется давить.

Show thread

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

Сегодня чувак заявил, что написал дважды одно и то же, и это правильно. Хотя есть решение проще. Меня такие решения, просто очевидно не разумные, бесят. Хочется рвать и метать. Это же так очевидно.

Я так вкусно поел, что временно счастлив! Соорудил не сложное и очень клевое блюдо.

Говорят Исландия после двухлетнего эксперимента решила перейти на четырехдневную рабочую неделю :)

Roman boosted

xxx: Прошел Йошкар-Олу за час
yyy: на харде?

Show older
MustUdon

I like Twitter, but, Mastodon it is so excited! Feel free to register it is server just for fun! Usefull links https://instances.social https://www.reddit.com/r/Mastodon/comments/yugh2o/some_useful_mastodon_lists/?utm_source=share&utm_medium=web2x&context=3