Size: a a a

Пятничный деплой

2021 September 06
Пятничный деплой
Futex (Fast Userspace Mutex) это примитив синхронизации в ядре Linux, который позволяет ждать регион памяти по какому-то значению с каким-то таймаутом. Из-за своего названия может показаться, что futex это на самом деле mutex, но это не так. Это было так в гораздо более ранней реализации, но теперь (Linux 2.6+) это просто примитив очереди ожидания (waitqueue), доступный для пользовательского пространства. Опция FUTEX_WAKE говорит: «Разбуди всех, кто ждет по этому адресу». FUTEX_WAIT говорит: «Когда я читаю ADDR, он содержит VALUE: если он все еще содержит это значение, когда вы смотрите на него, спите, пока кто-то не вызовет FUTEX_WAKE по этому адресу». А FUTEX_FD посылает все нотификации в файловый дескриптор.

Mutex из Futex можно сделать так: Два потока совместно используют некоторую память и соглашаются использовать её часть в качестве синхронизации (или блокировки). 1 означает разблокирован, 0 означает заблокирован, <0 означает заблокирован и кто-то ждет. Чтобы захватить блокировку, вы выполняете операцию atomic декремента: если он достигает 0, значит, это было 1, и у вас есть блокировка. В противном случае вы немного подождёте. Когда вы хотите снять блокировку, вы снова устанавливаете ее на 1. Это действительно быстро, если нет конфликта за блокировку и futex достаточно хорошо работает при маленьком количестве потоков борящихся за блокировку. Также ядро достаточно хитрым образом не уходит в своё пространство, когда нет contention на регион, но об этом в другом посте.

Futex используется в каждой реализации лока, в том числе glibc, abseil. Это действительно удобный интерфейс для имплементации медленных путей в локах, семафорах. Futex хоть и поменял то, как мы мыслим о локах в 2000х годах, к сожалению всё ещё существует достаточно много проблем. Некоторые из них такие:

0. Код вокруг Futex нереально сложный
1. Futex ещё всё умеет только ждать по 32 битному региону памяти, иногда это может вызывать проблемы в долгоживущих программах и некоторых имплементациях локов. Также может не подходить для embedded систем, где 32 битного адреса нет совсем
2. Futex не умеет давать подсказки по тому на какой NUMA стоит иметь регион
3. Futex не умеет ждать по многим регионам памяти одновременно

Последний недостаток как ни странно достаточно сильно бьёт по игровым движкам, например, в Windows есть WaitForMultipleObjects. Тот же wine и proton писали, что на Linux создаются большие проблемы из-за этого и им приходится из-за этого придумывать трюки с eventfd , чтобы демонстрировать то же поведение, из-за чего происходит большая нагрузка на файловые дескрипторы, которых ограниченное количество на Linux (движки репортят миллионы). В итоге получается, что некоторые игры просто не могут пойти на Linux из-за проблем синхронизации или работают медленно.

Valve, Collabora (продукты LibreOffice и тд) объединили свои силы в пропозал почти 2 года назад улучшить futex добавив futex2, где большинство упомянутых проблем решаются. У них получилось с помощью множества wait (futex_waitv) ускорить Beat Saber и Tomb Raider на 4%.

К сожалению, после года обсуждений оф. RFC оно не попало в Linux 5.15, но имеет все шансы попасть в Linux 5.16, почти ни у кого нет уже вопросов, и кажется консенсус обретён.

Я надеюсь, что выбор Arch Linux у Steam Deck от Valve был под влиянием некоторых таких изменений, Arch Linux обновляет своё ядро очень быстро и можно спокойно продолжать гнуть свою палку по переводу игр на Linux, получая сразу все фичи, что несомненно меня радует как и глубокие изменения, которые Valve делают в ядре, чтобы это произошло. Кто, если не Valve 🙂

[1] Futexes Are Tricky (советую прочитать, чтобы понять как пользоваться futex)
[2] Изначальный пропозал от Collabora и Valve
[3] Rethinking the futex API
[4] futex man page
[5] A New Futex2() System Call - André Almeida, Collabora (видео от основного контрибьютера)
[6] Linux 5.15 attempt, 5.16 attempt
[7] WIN32 WaitForMultipleObjects API
[8] Valve’s upcoming Steam Deck will be based on Arch Linux—not Debian
[9] Официальный RFC в ядро
[10] Glibc lock implementation
[11] C++20 atomic_wait/notify
источник
Пятничный деплой
Советы по эффективному тестированию в Go.

https://proglib.io/w/5fd9a36e
источник
Пятничный деплой
После прочтения популярной книги о шаблонах проектирования Head First Design Patterns, в которой примеры представлены на языке Java, автор статей приступил к реализации шаблонов на Go:

- Стратегия (Strategy)
- Наблюдатель (Observer)
- Декоратор (Decorator)
источник
2021 September 07
Пятничный деплой
Управление командой — миссия, которая приносит хорошие деньги

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

Помните, в детстве вы мечтали быть вожаком и лидером, «главарем банды» и представляли, как за вами пойдут толпы единомышленников? Теперь эти мечты могут стать реальностью благодаря полному и четкому руководству от Skillbox. Мы поможем реализовать ваши способности лидера и обучим профессии тимлида.

Skillbox научит управлять командой разработчиков, обучать их, выстраивать взаимодействие внутри команды и делать всё, чтобы она достигала серьёзных результатов. Вы не понаслышке узнаете как применяется Agile, Scrum, Kanban, и прокачаете личную эффективность. Команда станет горой за вас, а начальство не будет медлить с продвижением по карьере.

Обучаться очень удобно: от работы можно не отрываться, обучение займёт 3-4 часа в неделю, это совсем немного для больших результатов.

Все подробности по ссылке: https://clc.to/dwi21A
источник
Пятничный деплой
🏃 Пишем мессенджер на Go за час: 7 простых шагов от эхо-сервера к асинхронному обмену сообщениями

Авторы большинства статей по сокетным соединениям в примерах ограничиваются реализацией эхо-сервера. Давайте разовьем эту тему и за 7 простых шагов сделаем вместе консольный мессенджер сообщений.

https://proglib.io/sh/EZSxagJs53
источник
Пятничный деплой
На просторах Reddit нашли для вас подборку репозиториев, которые помогут подготовиться к собеседованию:

- System Design Primer
- Interview
- Awesome Interview Questions
- Coding Interview University
- Tech Interview Handbook
источник
Пятничный деплой
Распределенная трассировка (Distributed Tracing) у многих ассоциируется только с сетевым взаимодействием собственных сервисов, за которыми идет наблюдение, ну и, конечно, с решениями Jaeger, Zipkin, OpenTelemetry.

Но со временем все больше интересных возможных применений находят трассировке. И сегодня хочется рассказать о ряде таких:
1) В Kubernetes v1.22 в alpha стадии добавили API Server Tracing, который позволяет замерять и смотреть как выполняется та или иная активность на API Server.  
2) Проект kspan, позволяющий представлять Kubernetes Events в виде spans и также наблюдать за работой Kubernetes.
3) Работы в духе "Detecting Cyber Security Attacks against a Microservices Application using Distributed Tracing" для обнаружения аномалий связанных с нарушением безопасности.

С точки зрения observability это все дает лучше понимать систему и использовать это для повышения ее уровня надежности и безопасности.
источник
Пятничный деплой
​​Ain is a terminal HTTP API client. It's an alternative to postman, paw or insomnia.

Features:
- Flexible organization of API:s using files and folders.
- Use shell-scripts and executables for common tasks.
- Put things that change in environment variables or .env-files.
- Share the resulting curl, wget or httpie command-line.
- Pipe the API output for further processing.
- Tries hard to be helpful when there are errors.

Ain was built to enable scripting of input and further processing of output via pipes. It targets users who work with many API:s using a simple file format. It uses curl, wget or httpie to make the actual calls.

https://github.com/jonaslu/ain

Personal opinion: I don't like GUIs, they are harder to work with. So, any tools that can be replaced should be replaced.

#go
источник
Пятничный деплой
Why NFS Sucks

This article will give an overview of NFS history, features and shortcomings, briefly compare it to other remote file systems, and present an outlook on future directions.

https://www.cc.gatech.edu/classes/AY2010/cs4210_fall/papers/nfsOLS.pdf
источник
2021 September 08
Пятничный деплой
В продолжение моего недавнего поста про безопасность при node-based multi-tenancy - в официальном блоге Kubernetes вышла статья "Advanced Kubernetes pod to node scheduling"

В ней очень просто, понятно с примерами рассматриваются такие Use Cases для Pod-to-Node Scheduling, как :
- Running pods on nodes with dedicated hardware
- Pods colocation and codependency
- Data Locality
- High Availability and Fault Tolerance

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

В статье рассматриваются следующие механизмы и стратегии:
- nodeSelector
- Node Affinity
- Inter-Pod Affinity
- Taints and Tolerations
- Pod Anti-Affinity

Вообще за последнее время вышло много статей по данной теме и можно сказать, что это какой-то тренд или нет ;)
источник
Пятничный деплой
Kalm — бесплатное приложение с открытым исходным кодом. Представляет собой стандартный контроллер Kubernetes, который можно установить в любой кластер (версии v1.15 и выше), включая Amazon EKS и Google GKE. Основная цель Kalm — предоставить разработчикам простой пользовательский интерфейс, чтобы упростить работу с K8s.

👉 https://bit.ly/3BPxzel

#kubernetes #helm
источник
2021 September 09
Пятничный деплой
Сравнение Go и Python на примере простого CLI-приложения.

https://proglib.io/w/48f0283a
источник
Пятничный деплой
Видео краткого ревью CWiCCS

Кто не смог присутствовать, просили выложить видео. Как обещал выкладываю с разбивкой по времени и тематикам: (в описании к видео прилагается):

https://www.youtube.com/watch?v=TBPiN4aIoz0

ToC:
0:09 Начало
02:41 Презентация: Вступление
04:21 Презентация: Ключевые возможности
09:50 Презентация: Что на сегодня из себя представляет CWiCCS (архитектурно)
10:33 Презентация: Некоторые аргументы (параметры запуска)
12:34 Презентация: Конфиги и Профили
15:37 Презентация: Некоторые автоматические действия
20:01 Demo: Откуда качать CWiCCS
23:10 Demo: Как самому подписать скрипт(ы) PowerShell
24:29 Demo: Startup PowerShell Script in GPO
23:32 Demo: Запуск CWiCCS что происходит
28:16 Demo: Где лежат профили и конфиги CWiCCS
28:36 Demo: Пример конфига для скана софта и его версионности и валидности
29:18 Demo: Пример проверки валидности портов, добавление новых портов как разрешенных, создание своего профиля
40:30 Demo: Пример (обзор) отчета компьютера домена после Startup скрипта
43:55 Demo: Про cwiccs.org и dev.cwiccs.org
44:13 Demo: Как сформировать токен, отконфигурить срипт и отправить данные в dev релиз cwiccs.org
45:22 Bye Bye)

Additional links:
- CWiCCS Repo - https://github.com/m0zgen/cwiccs
YouTube
CWiCCS Demo/Review (PowerShell script for control security settings in the OS Windows)
Check Windows and Control Configs and Security (CWiCCS) PowerShell script Description and Demo
https://github.com/m0zgen/cwiccs

Chapters:
0:09 Начало
02:41 Презентация: Вступление
04:21 Презентация: Ключевые возможности
09:50 Презентация: Что на сегодня из себя представляет CWiCCS (архитектурно)
10:33 Презентация: Некоторые аргументы (параметры запуска)
12:34 Презентация: Конфиги и Профили
15:37 Презентация: Некоторые автоматические действия
20:01 Demo: Откуда качать CWiCCS
23:10 Demo: Как самому подписать скрипт(ы) PowerShell
24:29 Demo: Startup PowerShell Script in GPO
23:32 Demo: Запуск CWiCCS что происходит
28:16 Demo: Где лежат профили и конфиги CWiCCS
28:36 Demo: Пример конфига для скана софта и его версионности и валидности
29:18 Demo: Пример проверки валидности портов, добавление новых портов как разрешенных, создание своего профиля
40:30 Demo: Пример (обзор) отчета компьютера домена после Startup скрипта
43:55 Demo: Про cwiccs.org и dev.cwiccs.org
44:13 Demo: Как сформировать токен, отконфигурить срипт…
источник
Пятничный деплой
8 лучших фреймворков для тестирования с помощью Python в 2021 году
https://habr.com/ru/post/576760/?utm_campaign=576760&utm_source=habrahabr&utm_medium=rss
источник
Пятничный деплой
Без стресса: в новом посте наша бэкэнд-команда представляет плагин k6 для нагрузочного тестирования WebSockets.

Мы пробуем на прочность real-time приложение и сравниваем результаты для разных WebSocket-серверов: Action Cable, AnyCable и AnyCable Pro.

http://amp.gs/jTK0j
источник
Пятничный деплой
​​Делюсь с вами отличным youtube каналом на тему системного администрирования и devops - Unix way.

https://www.youtube.com/channel/UCgY050JAKtaew3IEgGW1qSQ

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

В канале не очень много роликов, но они объемные, с хорошим разбором предметной области. Для экономии времени смотреть можно с ускорением 1.5.

Пример отличной серии роликов на тему Jenkins:

Система автоматизации Jenkins. Часть 1 (установка, базовые понятия)
Система автоматизации Jenkins. Часть 2 (Jenkins Jobs Builder, простое ci/cd)
Система автоматизации Jenkins. Часть 3 (более сложные ci/cd)

Так же там хороший цикл про Kubernetes, PostgreSQL и некоторые общие инструменты из системного администрирования Linux.

#видео #обучение
источник
Пятничный деплой
Автотесты в Авито

Последнее время занялся изучением практик тестирования из-конца-в-конец. Сегодня утром посмотрел доклад Алексея Шпирко из Авито.

Доклад крутой, особенно интересно было послушать про факапы, которые случилась в процессе настройки е2е тестов.
источник
Пятничный деплой
Знаете ли вы что Buildah читается как «билда» и пародирует бостонской акцент руководителя этого проекта Дэна Уолша при произношении слова «builder»?

*Честно утащил из хабра RedHat Russia
источник
2021 September 10
Пятничный деплой
Introduction to OWASP Top 10 2021

OWASP выпустили драфт документа OWASP Top 10 2021!

Из нового, что отсутствовало в последнем Top 10 2017:
- A04:2021-Insecure Design
- A08:2021-Software and Data Integrity Failures
- A10:2021-Server-Side Request Forgery

Также по списку поднялись уязвимости класса A06:2021 – Vulnerable and Outdated Components, что автоматически повышает перспективы инструментов SCA.

В начале этого года Wallarm также представили свою версию Top10, основанную на анализе базы данных Vulners.

#web #dev
источник
Пятничный деплой
Легкий пятничный пост.

Те, кто занимаются пентестами и имеют дело с Linux и Windows окружениями определённо должны знать о таких проектах как:
- GTFOBin для Linux  
- LOLBAS для Windows (есть даже drivers)

Это набор/список/перечень легитимных исполняемых файлов, библиотек, скриптов, которые можно использовать для атакующих целей: что-то скачать и выгрузить, выключить, обойти, спрятать, поднять привилегии и т.д. При этом как вы понимаете сигнатуру/правило на это написать, конечно, можно, но нужно будет часто фильтровать от нормального использования ;)

Так вот пользователь twitter подметил, что всеми нами любимый kubectl с флагом --raw отлично подходит для замены тех же curl и/или wget, если их нет под рукой, и отлично подходит для пополнения данных проектов!
источник