Обновить
165.16

Системное программирование *

Обеспечение работы прикладного ПО

Сначала показывать
Порог рейтинга
Уровень сложности

Флаг EPOLLEXCLUSIVE и проблема неравномерного распределения соединений в Nginx на Linux

Время на прочтение5 мин
Количество просмотров6.3K

Совсем недавно, 25 января 2022 года вышел новый релиз Nginx - 1.21.6, в котором исправлена проблема неравномерного распределения входящих соединений между несколькими worker процессами в дефолтной конфигурации на Linux системах. Если конкретнее - use epoll, accept_mutex off, reuseport выключен.

В данной конфигурации при определенном характере нагрузки большинство входящих в Nginx соединений обрабатывается лишь одним worker процессом. 

Насколько я понимаю, эта проблема существует уже более пяти лет и берет начало в версии 1.11.3 (Jul 2016), когда в Nginx по умолчанию отключили accept_mutex, а вместо него стали полагаться на флаг EPOLLEXCLUSIVE, появившийся в ядре Linux 4.5.

Стоит заметить, что проблема балансировки входящих соединений при использовании механизма epoll и флага EPOLLEXCLUSIVE более глобальна и касается не только Nginx, а любых сетевых приложений, работающих по аналогичной схеме.

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

Читать далее

Подключаем Slave-устройства с шиной Wishbone к системе на базе LiteX

Время на прочтение15 мин
Количество просмотров2.9K

В предыдущих трёх статьях мы построили ПЛИС систему на базе LiteX, рабочие блоки для которой могут быть написаны не на странном языке, базирующимся на Питоне, а на чистом Верилоге. А благодаря LiteX, база для системы была создана для нас автоматически. Такой подход позволяет резко упростить и ускорить процесс разработки систем.

Пока что наши собственные модули были подключены к  системе через регистры команд и состояний (CSR). Часто этого более, чем достаточно, но иногда всё-таки разрабатываемые блоки должны содержать в себе сложные наборы регистров, а может даже и память. И без прямого подключения к системной шине не обойтись.

Сегодня мы подключим пару собственных Slave-устройств к системной шине Wishbone, которая будет создана средой LiteX. Устройства, разумеется, будут описаны на Верилоге. Приступаем!

Читать далее

Роботизированная операционная модель Blue Prism: поговорим о практике внедрения RPA

Время на прочтение9 мин
Количество просмотров6.3K


Blue Prism — известное и зарекомендовавшее себя решение (в том числе и на российском рынке) для автоматизации бизнеса. В этой статье мы не будем говорить о преимуществах использования RPA-платформ для оптимизации операционных расходов бизнеса. И без того понятно, что выполнение процесса без обеденных перерывов, перекуров и больничных будет эффективнее и в перспективе снизит операционные расходы. Вместо этого расскажем про роботизированную операционную модель (ROM) — это практика внедрения Blue Prism, направленная на получение бизнесом максимальной выгоды за счет развертывания системы роботизации. Blue Prism обладает полностью готовой методологией внедрения роботизации процессов и при внедрении решения в вашей организации вы сможете воспользоваться всем накопленным массивом знаний. Это поможет снизить неопределенность в проекте и позволит быстрее получить результат.

Технологии — хорошо, но умение ими пользоваться ещё лучше. ROM про максимально эффективное использование технологий роботизации. Это опыт множества внедрений для снижения time-to-market и получения результатов в течении нескольких недель.

Роботизация процессов выглядит как перестроение с «кто должен выполнять конкретные действия» на «как эта работа будет выполняться». Вопрос «кто» подразумевает необходимость ответа каждый раз когда что-то идет не так, а на «как» можно ответить только один раз и дальше автоматизация всё сделает за вас.

Далее вы узнаете о лайфхаках на старте роботизации и о 7 основах роботизированной операционной модели для эффективного внедрения той самой роботизации. Все подробности под катом.
Читать дальше →

Rust 1.58.0: захватываемые идентификаторы, пути поиска в Windows, больше #[must_use] в стандартной библиотеке

Время на прочтение4 мин
Количество просмотров5.8K

Команда Rust рада представить новую версию языка — 1.58.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.58.0 вам достаточно выполнить команду:


rustup update stable

Если у вас ещё нет rustup, то можете установить его со страницы на нашем веб-сайте, а также ознакомиться с подробным описанием выпуска 1.58.0 на GitHub.


Что стабилизировано в 1.58.0


В Rust 1.58 появились захваченные идентификаторы в форматируемых строках, изменился путь поиска в Windows для Command, в стандартной библиотеке стало больше аннотаций #[must_use], а также были стабилизированы некоторые функции.

Читать дальше →

Наводим красоту в коде для ПЛИС Lattice, построенном на базе пакета LiteX

Время на прочтение12 мин
Количество просмотров2.3K
В прошлых двух статьях мы сделали и испытали проект, в основе которого лежит система на базе LiteX, а наши модули были написаны на языке Verilog. На протяжении всего повествования я неустанно повторял: «У нас очень много нового материала, не будем отвлекаться на рюшечки, потом разберёмся». Как правило, нет ничего более постоянного, чем временное, но раз тема оказалась интересная, то в этот раз давайте мы наведём красоту в нашем проекте.



Сегодня мы поменяем принцип описания ножек, чтобы не пришлось прыгать по трём справочникам сразу, разместим несколько полей в одном регистре CSR, добавим автодокументирование к регистрам CSR (Command-Status Register) и, наконец, добавим к этим регистрам статус, а то до сих пор мы пробовали играть только в командные регистры. Приступаем.
Читать дальше →

Гудбай AV/EDR или как обойти защиту EDR в Windows

Время на прочтение11 мин
Количество просмотров9.7K

При проведении Red Team операций часто возникает вопрос обхода средств защиты. В данной статье будет рассмотрен один из методов отключения антивирусов и EDR.

Читать далее

XV6 как ОС для обучения

Время на прочтение4 мин
Количество просмотров8K

Мы уже несколько лет преподаем разработку компонентов учебной операционной системы xv6, и хотим поделиться своим опытом. Этот курс прошли уже около 600 студентов. Если вас заинтересует эта статья, то вы можете ознакомиться с нашим курсом.

После базовых курсов вроде операционных систем часто студенты выходят без реальных практических знаний. Лучше всего можно понять работу операционной системы, написав её самому. Но так как этот процесс может занять не один семестр, в рамках учебного курса можно ограничиться разработкой только ключевых компонентов. Для этого мы используем учебную операционную систему xv6, про которую расскажем ниже, так как она значительно проще Linux или других пользовательских ОС.

Читать далее

Первые эксперименты со смешанным Litex+Verilog проектом для ПЛИС

Время на прочтение14 мин
Количество просмотров3.2K

В предыдущей статье мы начали осваивать построение шинно-ориентированных систем на базе среды Litex (которая всё делает на Питоне) с внедрением собственных модулей на Верилоге. Статья так разрослась, что практические опыты мы оставили на потом. Пришла пора провести их. Сегодня мы подключимся к VGA-монитору и поуправляем изображением, которое выдаёт модуль gpu, описанный в файле gpu.v, то есть, реализованный на языке Verilog. Управлять мы им будем через регистр команд, расположенный в блоке CSR, спроецированном на шину Wishbone. Все эти сущности, в свою очередь относятся к среде Litex. Инструменты для опытов мы тоже будем использовать штатные, Litex-овские. Приступаем!

Читать далее

Создаём простейший проект для ПЛИС Lattice в среде Litex

Время на прочтение16 мин
Количество просмотров8.2K

В предыдущей паре статей я рассуждал про ПЛИС Lattice. Давайте сегодня поговорим об эффективной разработке под них. Один наш крупный руководитель уверяет, что из разговоров с иностранными Заказчиками, он выяснил, что российских разработчиков считают пишущими классные вещи, но делающими это крайне медленно. Ну, разумеется, по сравнению с разработчиками из других стран. И разумеется, «классные» идёт на первом месте.

Один из методов обхода проблемы скорости разработки – использование готовой инфраструктуры для проектов. Я делал цикл статей про комплекс Redd, где продвигал использование готовой шинной инфраструктуры в среде разработки Quartus. Сначала это была честная процессорная система, потом – процессор мы изъяли, а шины – оставили.

Затем я делал пару циклов, где активно использовал данный подход. Мне приходилось дописывать только проблемно-ориентированные модули, остальное — среда разработки создавала за меня.

Есть ли что-то подобное для Lattice в частности и сцепки Yosys/NextPNR в целом? Вы не поверите! Решение не просто есть, но оно ещё и настолько кроссплатформенное, что подойдёт и для Yosys/NextPNR, и для Quartus, и для Vivado! И называется оно Litex. Итак, давайте попробуем поэкспериментировать с ним для подхода, который я уже давно продвигаю: «делаем штатную основу, а на неё нанизываем свои целевые блоки».

Читать далее

Почему проект EasyOS отказался от загрузочных образов ISO

Время на прочтение6 мин
Количество просмотров8.9K

Какое-то время назад я перестал выпускать EasyOS в виде файла ISO, и с тех пор выпускаю её только как файл образа диска. Решение оказалось спорным, и я продолжаю получать письма от людей, страдающих из-за отказа от этого формата. Поэтому мне стоит опубликовать свои мысли о том, почему я сделал такой выбор. Пост не будет исчерпывающим объяснением, это просто мысли, которые приходят мне в голову…

Формат файлов ISO9660 очень стар, он появился ещё в 1988 году, и с тех пор был расширен множеством дополнений (см. страницу ISO9660 в Википедии).

Кроме того, существует «гибридный ISO», обеспечивающий загрузку с USB-флэшки, а поверх него дополнения, позволяющие загружаться на компьютерах и со старым BIOS, и с более новым UEFI (см. здесь).

Всё это значит, что файлы ISO — это мешанина изменений, появлявшихся на протяжении многих лет.
Читать дальше →

Синтезируем SystemVerilog код в OpenSource среде Yosys/NextPNR

Время на прочтение5 мин
Количество просмотров6.1K

В предыдущей статье я поделился опытом работы с ПЛИС фирмы Lattice через инструменты с открытым исходным кодом Yosys и NextPNR. Как я отмечал, освоить их меня заставило не столько любопытство, сколько требования Заказчика. В том проекте у меня просто не было выбора. И та статья, скорее, была написана в помощь для быстрого старта тем, кого тоже заставят. А можно ли использовать эту сцепку для дома, для семьи? Для этого она должна быть удобной.

Как мы обсудили в комментариях к прошлой статье, в минусы этой сцепке можно записать отсутствие такого полезного инструмента, как SignalTap (Altera) или ChipScope (Xilinx). Замену этой парочке пока что удалось найти только в виде физического анализатора. Так себе замена, но хоть что-то.

Более серьёзная трудность заключалась в том, что все примеры, которые я находил, были реализованы на чистом Верилоге. А я уже не могу писать автоматы, не используя такой механизм, как enum. Меня каждый раз злит необходимость перенумеровывать состояния, если я правлю автомат по ходу разработки. Но чтобы был enum, надо пользоваться более прогрессивным стандартом языка, который уже называется SystemVerilog.

На странице Yosys  YosysHQ/yosys: Yosys Open SYnthesis Suite (github.com) описано, что данный язык ограниченно поддерживается синтезатором, и даже указана опция для его использования. А именно сказано, что команде read_verilog надо добавить ключ –sv. Но попытки найти в сети готовую инструкцию для новичков, как её активировать, я не нашёл, потому что если кто-то и пользуется этой командой, то для одного файла, а не для списка.

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

Читать далее

Генераторы случайных чисел в разных ОС

Время на прочтение8 мин
Количество просмотров21K

"Генерация случайных чисел слишком важна, чтобы оставлять ее на волю случая" - Роберт Р. Кавью

Как-то поздним летним вечером мне пришлось разобраться, как устроены генераторы случайных чисел в Windows и Linux. Собственно, в этой статье я попробую привести саккумулированную информацию, и преподнести её максимально простыми словами, без необходимости лезть в исходники, туториалы и статьи.

Читать далее >>>

Реализации машины в qemu

Время на прочтение5 мин
Количество просмотров8.2K

В процессе обратной разработки прошивок иногда возникает задача по ее эмуляции, например, для фаззинг тестирования или детального изучения поведения в динамике. На практике обычно для этого хватает фреймворков avatar2, unicorn, qiling и подобных. Однако они поддерживают далеко не все платформы и имеют ряд ограничений для решения таких задач. При разработке эмулятора PLC я столкнулся с тем, что ни один фреймворк для эмуляции не поддерживал требуемую платформу.

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

Читать далее

Ближайшие события

Rust 1.57.0: константный panic!, пользовательские профили в Cargo и обработка ошибок выделения памяти

Время на прочтение3 мин
Количество просмотров5.5K

Команда Rust рада сообщить о выпуске новой версии — 1.57.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если вы установили предыдущую версию Rust средствами rustup, то для обновления до версии 1.57.0 вам достаточно выполнить следующую команду:


rustup update stable

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


Что стабилизировано в 1.57.0


Rust 1.57 привносит panic! в константные контексты, добавляет поддержку настраиваемых профилей в Cargo и стабилизирует API, позволяющие обработать ошибки резервирования памяти.

Читать дальше →

PA — Pointer Authentication на ARMv8.3: устройство инструкций защиты

Время на прочтение5 мин
Количество просмотров3.5K

Сегодня процессоры, микропроцессоры и микроконтроллеры стали неотъемлемой частью жизни. Они повсюду: смартфоны, умные часы, наушники и другие гаджеты. Однако первое стало обязательной частью каждого человека, а следовательно интерес злоумышленников к взлому или получению доступа к смартфону жертвы возрос многократно. Эта статья посвящена технологии защиты, которую компания ARM не так давно внедрила в свою архитектуру.

Читать далее

Си должен умереть

Время на прочтение21 мин
Количество просмотров113K

Язык Си - один из наиболее влиятельных языков программирования за всю историю. Он стал незаменимым инструментом разработки операционных систем, сместив с этого пьедестала языки ассемблера. Изучение Си обязательно для любого уважающего себя программиста. Этот язык любим за свою внешнюю простоту и ненавидим за беспощадность к ошибкам. Благодаря нему у нас есть ядро Linux и тысячи уязвимостей в нём же в придачу.

Попробуем понять, что же такое этот противоречивый язык Си - благословение или проклятие?

Читать далее

Рельсы веб-интеграции. REST и SOAP

Время на прочтение5 мин
Количество просмотров96K

В каждой отрасли бизнеса, каждой компании, как правило, используется целый зоопарк ПО. Одни системы «из коробки» умеют взаимодействовать с «соседними» продуктами, другие же приходится дорабатывать. За десятилетия существования веба как отрасли сформировались следующие практики межсетевого взаимодействия:

В данной статье мы поговорим о веб-сервисах. Чем они отличаются от прочих способов и какие они бывают.

Читать далее

Виртуальная память как критический ресурс, или Как справиться с расстрелом из-за угла

Время на прочтение15 мин
Количество просмотров13K
Если вы сталкивались хотя бы раз, что важная задача была убита OOM killerʼом…
Заготовки к этой статье очень старые, но проблема ещё старее. Такое впечатление, что с 1980-х никто не заинтересован в её осмысленном решении, хотя жалобы на последствия, похоже, не писал только тот, кто вообще не работал с компьютером. Здесь я попытаюсь сформулировать общую картину и тот метод решения, который мне кажется способствующим хоть какому-то конструктивному решению.


(ходит птичка весело по тропинке бедствий, не предвидя от сего никаких последствий)
Читать дальше →

Другой взгляд на многопоточность

Время на прочтение7 мин
Количество просмотров23K

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

Читать далее

Внутренняя история внешнего расследования SoftRAM 95

Время на прочтение6 мин
Количество просмотров15K


Перевод статьи Рэймонда Чена, более 25 лет участвовавшего в разработке ОС Windows, автора блога The Old New Thing, начатого им в 2003 году.

С выходом Windows 95 появилось большое количество программных продуктов, предназначенных специально для этой ОС. Много внимания в какой-то момент привлекла одна из таких программ – SoftRAM 95. На коробке значилось, что программа может «удвоить вашу память».

Оказалось, что не может.

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

Вклад авторов