white wizard

My tech notes.

white wizard

Гостевуха.

Если френдите, представьтесь и пишите почему решили зафрендить и что ожидаете читать в блоге (камент можете удалить, если стесняетесь (я в любом случае получу его копию на email в момент публикации)).

Guidelines по бложеку.
1) Пишите содержательно. Старайтесь, чтобы ваши сообщения содержали полезную информацию, чтобы их было полезно читать. Воздержитесь от "а у вас негров линчуют" и "а вот у вас во freebsd уже починили kernel crash при вставке floppy drive?" подъёбок. Если вы хотите посрать идите на лор. Я не хочу, но я может быть начну банить за тупость и разжигание, если увижу здесь набросы, вентиляторы и прочих джавистов, которым кажется, что они способны поддержать разговор на серьёзную тему не слившись на старте.
2) Мат. Если вы хотите написать, что в версии кернела 1.2.3 наконец починили давно заебавший баг и от этого у вас в проекте наступило счастье и взошло солнце - пишите. Если вы хотите написать, что вася - лох - не пишите.

Мотто:
I’ve sometimes joked of Steve that when he needs to write a program, he starts with any other randomly chosen chunk of code, and debugs it until it does what he wants.

Я в Беларуси 06-07-2010 [фото]
Я в Киеве 07-10-2013 [фото]
white wizard

До боли заебало. Везде.



"Всё так, всё. Увидали, осудили, потрындели, махнули, покурили и всё. И всё так." (оно же, но другими словами: "хуяк хуяк и похуй, работет")

Для тех кто не смотрел, про теплотрассу под потолком:
white wizard

qemu networking done right (qemu bridging with nfsroot)

Well, quick and dirty can't go on forever so here's how to configure the qemu networking.

First of all here's a diagram of my network devices:


When I boot my host the host kernel attaches a driver to my hardware nic and I get enp2s0 (ethernet type, pci bus 2 slot 0) interface looking at router. Later systemd-networkd brings up the br0 bridge, enlaves the enp2s0 to it and gets networkd configuration for br0 via DHCP so the interfaces look like this after successful boot:


Notice the "master br0" at enp2s0 and ipv4 address at br0.

Now the configuration for systemd-networkd looks like this:


Now I need the guest kernel:

Hints for guest kernel configuration:
# CONFIG_MODULES is not set
CONFIG_FHANDLE=y (guest systemd will need it for its getty)

And now I need the rootfs:

And then export it via nfsd:


Ok now I have a bridge interface, kernel and nfsroot. Qemu is going to use the qemu-bridge-helper program to configure the tap interface. So now I'm allowing the qemu-bridge-helper to configure the br0 to enslave the vm's tap interface.

And then allow it to use TUNSETIFF ioctl request on /dev/net/tun to create a tap interface.


All ready, let's start now:
Read more...Collapse )
So what happened here is: qemu created a virtual ethernet nic e1000 in guest, tap0 interface in host and connected tap0 to br0 bridge (-netdev bridge,br=br0 is default). Then qemu started the vm, ran the kernel, kernel (and later userspace) used the host's terminal from which I lauchned qemu for i/o. Kernel configured its virtual ethernet nic with settings from router's dhcpd, mounted the rootfs, started systemd and then I logged in, ran a few commands and powered the vm off.

And this is how it's done.
white wizard

Одесса, Храм Ненависти, подвал под Храмом Ненависти и бункер под подвалом.

Был сегодня на Куликовом Поле.
https://plus.google.com/u/1/photos/102688213528984841493/albums/6011909676188114721
То, что раньше называлось Дом Профсоюзов сейчас, я думаю, более адекватно было бы назвать Храм Ненависти. Это не могила и не Дом Скорби, он выглядит как Дом Скорби только снаружи. Внутри помимо разбитых окон (кстати трёх пожарных лестниц, выходов на крышу, которые при желании легко блокируются сверху и как минимум 7 выходов помимо центрального) лежат цветы и стоят горящие свечки, которые регулярно поджигаются специальными хлопцами (надо было, кстати, подойти спросить к какой организации они имеют отношение), стены везде исписаны лозунгами в стиле "остановим фашизм!", "2го их, завтра нас?", "ваш подвиг (какой? какой подвиг? стрелять из-за щитов ментовских в центре города по митингу?) никогда не будет забыт" и т.п. У входа всё обклеено листовками вида "Одесса вставай! Поезд дружбы приехал нас убивать!" (или что-то такое), "украина без фашизма!" и прочий ангажированный бред. Это Дом Скорби только на первый взгляд, если присмотреться хорошо видно как кто-то очень старательно превратил его в Храм Ненависти К Врагам (кто, интересно, это всё орагнизовал? надписи там на стенах, листовки). Лично мне находиться внутри было омерзительно.

Я нашел подвал, где "фашисты зверски убили и сожгли 600 беременных женщин, восставших против киевской хунты".

Подвал оказался двухуровеный. На верхнем уровне никаких следов трупов, свечек, цветов, ничего, что намекало бы, что здесь "фашисты сжигали и травили газом десятки наших мальчиков" нету. Наверное всё качественно "помыла, почистила и проветрила киевская хунта". Ничего интересного.
А вот на уровне -2 обнаружился бункер со стальными дверьми, противогазами, медикаментами и секретным ходом куда-то.
Где-то со второй минуты я комментирую то что вижу ибо мой фонарик не освещает подвал достаточно для камеры.

Нагулявшись по подвалам я вышел на улицу пофотографировать венки.

На ступеньках перед входом пара чуваков взяла в руки венок обмотанный желто-голубыми ленточками и с заявлением "это не моя страна" (или что-то такое) принялась поджигать его зажигалкой. У меня в руках был телефон, в котором я включил камеру и направил на них. Через 13 секунд ко мне подбежала бабушка и принялась меня тянуть за руку, где я собственно камеру и выключил. Один из зажигающих оставил венок, в пару прыжков преградил мне выход со ступенек и сделал предложение от которого было сложно отказаться "или ты показываешь мне камеру или я разобью тебе телефон и лицо". Я отказался, к чуваку подбежал кто-то ещё, взял его за руку и сказал "полегче". Тоже получил угрозу словить в лицо. Из-под ступенек чуваку женщина сказала "что вы устраиваете здесь за демонстрацию, вы что, провокаторы?", чувак кричал в ответ "рот закрой, пизда тупая".
Надо было звать милицию (которая в количестве человек 50 отрядами по трое ходит по территории в бронежилетах), которая по идее должна была быть где-то за углом и если бы я громко крикнул, меня по идее должны были услышать, но я растерялся. Мне стыдно за свою трусость, я показал на телефоне фото венков чуваку и бабушке, оба очень быстро отъебались. Венок с ленточками, который так и не загорелся, бросили в кучу к таким же венкам. Я принял решение оттуда уйти.

Для себя сделал вывод, что снимать на Куликовом Поле можно только "правильным" людям и "правильные" сюжеты. Просто так прийти и включить камеру, как я это делал на Майдане, в Одессе чревато разбитым лицом и разбитой камерой.
white wizard

Об одесских политических настроениях.

Я неделю назад приехал в Одессу на майские праздники (13го возвращаюсь в Киев) и успел уже побывать и на Куликовом Поле второго числа и пообщаться с людьми и посмотреть местное ТВ.

Вот в украинских газетах употребляются слова "сепаратисты", "про-российски настроенные активисты" и прочие за- и про- российские. Так вот я считаю, что это неадекватно описывает общее политическое настроение Одессы. Здесь не рисуют себе иллюзий о том как хорошо было бы стать частью РФ. И здесь по ящикам не крутят русское ТВ и репортажи с места событий как невинных русских заживо сжигает правый сектор, а потом водит по улицам хороводы с "москалей на ножи" и как храбро хорошо эккипированные ополченцы с оружием в руках на востоке сбивают украинские вертолёты, но при этом их почему-то убивют и пленят злобные украинские силовики.

Это всё совсем не про Одессу. Здесь не про это.

Здесь, я считаю, в полный рост стоит и очень активно поддерживается анти-украинское настроение. Не про-российскость, а именно ненависть к Украине, к украинскому правительству новому, к правому сектору и вообще любой группе людей обмотаных украинскими флагами на улице - ко всему украинскому. По ящику здесь показывают как "майдановские нацисты пиздят ногами обожженных имеющих право выражать своё мнение", как "киевские кролики-яценюки лишают одесситов права смотреть российские телеканалы", как "на майдане людям в чай подливали наркотики" и отличительно абсурдная, но горячая тема "киева отбирающего под страхом уголовного наказания право говорить на русском языке", как "госдеп хочет захватить украину, чтобы подготовиться к войне с РФ", а так же "ты националист, но я тебя не боюсь" и ещё много много примеров такого рода. Вот такой тщательно отобранный, льющийся с экранов и прыгающий из головы в голову и не выдерживающий критики и лишенный поддержки фактами шампунь для мозгов "Истерия" здесь - это массовое помешательство, это такая +- стандартная точка зрения на события в Украине. "В стране ад и кошмар, новое правительство долбоёбы, националисты чинят беспредел и жгут людей" - вот это всё и везде.

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

А точка опоры простая.
* Украинское правительство идёт в сторону евроассоциации (что даёт реформы и бонусы к экспорту в страны ЕС, когда ЕС является и главным экономическим партнёром и крупнейшим инвестором в Украину).
* Вооруженные восточные ополченцы уже выхватили (и продолжат выхватывать) пиздюлей от украинской армии.
* Уволен начальник милиции одесской области когда из-за живого щита одесских милиционеров стреляли и укрывались "про-российски настроенные активисты" (которых потом сожгут изверги, нелюди и ну дальше вы знаете). А так же есть Аваков со своей политикой чистки кадров МВД.
* Месседж внутренним росистам и укр-хейтерам послан простой и ясный: don't fuck with UA.
* Скоро выборы президента (который, кстати, начиная с 21 февраля сего года уже имеет меньше полномочий, чем предыдущий).
и т.п., система самостабилизируется

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

PS: Каждое событие о котором я здесь говорю имеет под собой факты, фото, видео и статьи.
white wizard

futex and userspace thread syncronization (gnu/linux glibc/nptl) analysis


(arrows mean "uses as backend", e.g. "GThread uses pthread as backend")

Before I start on mutextes and condvars I'd like to say a few words on the whole userspace thread libraries hierarchy.

First of all I'll talk about nptl and futexes mostly. As you can see from the drawing above std::thread, boost::thread and GThread are portability wrappers around pthreads containing glue code designed to duct tape pthreads to their respective platforms so not much interesting there.

Secondly pthread_create() essentially is

so not interesting as well.

Now for the juicy part.

For my analysis I used the condvar.c from Livermore Computing Center pthread tutorial (it's a pity the page does not have the needed anchor so just scroll to "Example Code - Using Condition Variables").

So what does pthread_mutex_lock() do? It's actually a wrapper around a simple futex usecase. And how does futex work? Let's say a thread wants to acquire the lock which is already locked (if the lock is unlocked then thread just atomically locks it and goes on without going to kernel). The thread goes to kernel (FUTEX_WAIT) puts itself to the wait queue (lock is identified by uaddr) and goes to sleep (beautiful, almost no busywaiting and cpu cycles lost). When thread that acquired the lock finishes the work in the critical section it lifts the lock, goes to kernel (FUTEX_WAKE) to wake the first (FIFO) thread waiting in queue and goes on with its work. When the time comes the woken up thread acquires the lock and goes to do its work in the critical section.


(Google Draw is so much fun!)

Now the condvar. Condvar is holding two mutexes (one for safeguarding against races and second for signalling). The funny thing is the futex mechanism makes the pthread_cond_signal() API (and in some cases the condvars themselves) pointless since it does the same FUTEX_WAKE thing as pthread_mutex_unlock() does. And yes, "_signal()" here is just a standard conformant name, it has nothing to do with unix signals. And pthread_cond_broadcast() just wakes everyone from wait queue up starting the wakestorm.

Conclusion:
futex() is a nice, a very very nice userspace mechanism for thread syncronization. If a thread needs the lock it doesn't need to spin (aside from short userspace spin to prevent going to kernel unless absolutely necessary), it just goes to sleep and is woken up when the time is right. And no sys_kill().

Refs:
http://www.kernel.org/doc/ols/2002/ols2002-pages-479-495.pdf
http://lwn.net/Articles/360699/
http://lwn.net/Articles/387246/
http://lwn.net/images/conf/rtlws11/papers/paper.10.html
http://people.redhat.com/drepper/futex.pdf
https://sourceware.org/git/?p=glibc.git;a=tree;h=refs/tags/glibc-2.18 /nptl