LINUX.ORG.RU

Избранные сообщения xperious

copy_to_user из прерывания

Форум — Development

В дополнение к моей предыдущей теме, возникло непонимание, которое пока не сильно устранилось чтением LDD и SO. Требуется реализовать blocking read, по этому есть темы как в LDD так и на SO, сам механизм blocking read не вызвал затруднений.

Я выделил DMA буфер на 256 Кбайт, через MMIO передаю адрес этого буфера и он успешно заполняется, после чего приходит прерывание, в котором можно инициировать чтение следующего блока. Скорость около 170 Мбайт/с (если запросить гигабайт).

Возникла проблема при реализации char device, а именно операции read. Если осуществить copy_to_user в самом этом вызове то всё успешно читается на стороне userspace (cat, dd). Однако в обработчике прерывания copy_to_user не работает, хотя бы потому что он может сам уходить в sleep, что очевидно недопустимо для ISR.

Как же тогда быть? Допустим я запросил прочитать мегабайт из устройства, а буфер 256К - нужно при получении прерывания проснуться и вернуть лишь 256К а пользователь будет затем повторять запросы чтения четыре раза с разным offset (у char-то устройства)? Например dd bs=1M count=1 не повторит.

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

slapin tailgunner ebantrop Andrey_Utkin :)

 

I-Love-Microsoft
()

Насколько безопасна Embox OS?

Форум — Talks

Почему бы не попытаться делать Embox или его форк на базе безопасного микроядра типа seL4 + возможно на части Genode?

https://www.opennet.ru/opennews/art.shtml?num=40297

В seL4 ведь всего 10 тысяч строк сорцов, вероятно их не так сложно изучить и сертифицировать на безопасность (если это будет нужно) по сравнению с другими ядрами?

Embox — открытая ОС на «Эльбрусе»

Кстати, почему обсуждение в этой теме открыто не для всех ? :(

 , ,

sanyo1234
()

Как выделяется память в линуксе?

Форум — Development

Помогите, пожалуйста, разобраться. Есть 2 программки, одна просто выделяет себе всю доступную память, другая пытается при этом сразу эту память использовать. malloctest.c

#define SIZE 4096
int main(){
    int i, oldi;
    void* ma[SIZE];
    for(i=0; i<SIZE; i++){
        ma[i]=malloc(1024*1024);
        if(ma[i]==NULL)
            break;
    }
    oldi=i;
    printf("allocated %i times 1M = %i\n", i, i*1024*1024);
    for(; i<SIZE; i++){
        ma[i]=malloc(1024);
        if(ma[i]==NULL)
            break;
    }
    printf("allocated %i times 1k = %i\n", i-oldi, (i-oldi)*1024);
    printf("total allocated %i\n", (oldi*1024*1024) + (i-oldi)*1024);
    for(; i!=0; i--)
        free(ma[i]);
}
и malloctest_w_use.c
#define SIZE 4096
int main(){
    int i, oldi;
    void* ma[SIZE];
    for(i=0; i<SIZE; i++){
        ma[i]=malloc(1024*1024);
        memset(ma[i], 0, 1024*1024);
        if(ma[i]==NULL)
            break;
        printf("%i ok\n ", i);
    }
    oldi=i;
    printf("allocated %i times 1M = %i\n", i, i*1024*1024);
    for(; i<SIZE; i++){
        ma[i]=malloc(1024);
        memset(ma[i], 0, 1024);
        if(ma[i]==NULL)
            break;
    }
    printf("allocated %i times 1k = %i\n", i-oldi, (i-oldi)*1024);
    printf("allocated totally %i\n", (oldi*1024*1024) + (i-oldi)*1024);
    for(; i!=0; i--)
        free(ma[i]);
}
имеем
$ cat /proc/sys/vm/overcommit_memory 
2
$ cat /proc/sys/vm/overcommit_ratio 
85
$ free
             total       used       free     shared    buffers     cached
Mem:       2072164    1085868     986296          0      32640     222244
-/+ buffers/cache:     830984    1241180
Swap:            0          0          0
$ grep Commit /proc/meminfo
CommitLimit:     1761336 kB
Committed_AS:     911168 kB
Т.е. overcommit отключен. полностью свободной памяти > 960Mb, но можно ещё освободить.
$ ./malloctest
allocated 744 times 1M = 780140544
allocated 506 times 1k = 518144
total allocated 780658688
$ ./malloctest_w_use
0 ok
...
652 ok
653 ok
Segmentation fault

Во-первых, почему не выделяется вся доступная память? Её остаётся ~200 Мб свободной. Во-вторых, (хотя причина наверняка та же) почему программка сегфолтится?

И общие наблюдения следущие: когда загрузка памяти подходит к ~1Гб без буферов и кешей, программы начинают ругаться «failed to allocate...» или падать в сегфолт. Почему такое может быть? Ядро самосборное, включена поддержка памяти до 4Гб.

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

byteworm
()

linux-0.01 скомпилированный в minix-386 и запущенный в эмуляторе 86box

Галерея — Скриншоты

Я люблю старые программы, мне нравится их изучать и смотреть как они развивались, и во что они сейчас превратились или умерли так и не дожив до современных дней. И по той же самой причине, мне нравится смотреть различных авторов Youtube каналов посвященные ретро тематике в котором авторы рассказывают о корнях программ, игр, приставок или старых компьютерах. И на волне этого, мне захотелось попробовать собрать и запустить, что-то относительно старое, но которое живет и развивается до сих пор. Мой выбор пал на первую версию Linux, версии 0.01.

Те кто знаком с историй создания Linux и её ранних дней, знают, что она писалась Линусом Торвальдсом на 386 машине на которой работала пропатченнная версия Minix 1.5. И не смотря на, то, что есть проект (и не один) позволяющий скомпилировать linux-0.01 на современных версия компиляторов мне же хотелось побыть немного в шкуре самого Линуса и самому собрать ядро в ее родной среде, а именно в Minix и древними версиями GCC.

Те, что интересуется подобной историей (да или просто пользуются гуглом), знают, что такое уже проделывали многократно (посмотрите хотя бы сайт oldlinux.org), но я хотел сделать это всё сам. И вот вооружись энтузиазмом, эмулятором 86Box, старыми версия ПО (многие их которых взяты с вышеупомянутого сайта), а главное ядра Linux, я пошел по стопам Линуса, ну или почти по стопам… :)

Первым делом необходимо было установить классический 16-битный Minix 1.5.10 (верхний левый скрин). При наличии дистрибутива (17 дискет), а также Reference Manual делается это не сложно. Просто необходимо внимательно читать manual Танненбаумана. Единственное замечание по установке в эмуляторе 86Box, так это то, что необходимо в настройках эмулятора (и BIOS) выставить тип 360к для 5 1/4 дисковода, иначе Minix сможет грузится с загрузочной дискеты, но root’овую уже не увидет.

Далее необходимо очень внимательно следовать прекраснейшему руководству от Джона Наллома по превращению в minix-386. На этом этапе каких-либо подводных камней нет (опять же внимательно читаем), единственное необходимо установить тип 1.2M для 5 1/4 дисковода. Также необходимо будет перекомпилировать все бинарные файлы в /bin и /usr/bin. В самом руководстве Джон компилирует только часть их них (сам Брюс Эванс в README на bcc писал, что достаточно только sh :) ). Я же перекомпилировал почти всё.

Затем качаем и ставим готовый компилятор GCC 1.37.1 от Alan W Black’а. Нужно как минимум 3 архива с самим gcc, библиотеками и заголовочными файлами. Главное, ОБЯЗАТЕЛЬНО, необходимо пропатчить ядро Minix (kernel) иначе при компиляции ядра Linux, получите сообщение, что-то типа fp stack overflow.

Ну и под финал всего это необходимо скомпилировать сам Linux-0.01. Линус писал, что он использовал пропатченный им же gcc-1.40 c поддержкой -mstring-insns, но он также писал, что возможно подойдет 1.37.1 и да, им можно скомпилировать ядро Linux. Нужно только убрать вышеупомянутую опцию из нескольких Makefile (об этом писал Линус), а также отредактировать под себя boot.s (под нужный тип дискеты) и include/linux/config.h (параметры жесткого диска). Плюс в Makefile надо добавить путь до gnulib (об этом тоже писал). О чем Торвальдс не писал, так это то, необходимо в Makefile добавить команду конвертации бинарного файла в формат, который мог бы исполняется на Minix-386 (на нижнем левом скрине эти команды можно увидеть). Линус не делал подобной конвертации и могу предположить, что у него был патч который позволял запускать бинарные файлы gcc нативно (aka gnutoo).

Осталось только подготовить свободный раздел жесткого диска, создать несколько устройств в /dev и /bin скопировать bash (+ сделать ссылку на sh) и update. Запись ядро на дискету и как писал Линус «Use the three-finger-salute to reboot you machine».

>>> Просмотр (1440x800, 58 Kb)

 , linux-0.01, ,

OlegSL
()

В стандарт C предложено внести лямбды и defer из golang

Форум — Development

Привет, ЛОР!

Я тут тебе немного покушать принёс. Как ты, наверное знаешь, не за горами выход нового стандарта языка C – C23. Среди прочих вкусностей, таких как лямбды в стиле C++, в этот стандарт предложено добавить механизм defer, аналогичный существующему в языке Go.

Ссылка на предложение: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2895.htm

В случае, если этот стандарт будет принят, будет возможно написание вот такого кода:

p = malloc(N);
defer { free(p); }

Где аргументом оператора defer является анонимная функция. Так же возможны более сложные варианты использования:

enum { initial = 16, };
double buffer[initial] = { 0 };
...
size_t elements = 0;
double* q = buffer;
defer [orig = q, &q]{ if (orig != q) { free(q); }};
...
// increase elements somehow
...
// adjust the buffer
if (elements > initial) {
    double* pp = (q == buffer) ? malloc(sizeof(double[elements])) : realloc(q, sizeof(double[elements]));
    if (!pp) return EXIT_FAILURE;
    q = pp;
}
...

Учитывая всё это, скоро в C больше не будет нужно использовать goto вообще нигде, даже для очистки ресурсов при ошибке. Так заживём, ЛОР!

 , ,

hateyoufeel
()

Ardour, JACK и что делать с жопой под названием «звуковой стек Linux»

Форум — Multimedia

У меня тут вышло большое интервью с Полом Дэвисом (главный разработчик Ardour и бывший разработчик JACK) в двух частях.

Можно слушать как подкаст, можно читать отредактированную расшифровку на английском.

Первая часть: http://libregraphicsworld.org/blog/entry/podcast-ep-002-paul-davis-on-the-deep-rewrite-of-ardour-daw

Вторая часть: http://libregraphicsworld.org/blog/entry/podcast-ep-003-paul-davis-on-fixing-big-linux-audio-issues

Переводить на русский целиком я задолбаюсь, поэтому главные тезисы:

  • Некоторые пользователи не заинтересованы в ковырянии кода, они хотят чтоб как в Reaper – пишешь плагин на Lua, которые меняет вообще что угодно. Но в рипер Lua встроили явно на очень раннем этапе, сделать похожее в Ardour сейчас уже технологически сложно, поэтому покрытие API в привязках Lua хоть и расширяется, но ряд ограничений останется.

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

  • Пока шёл длительный рефакторинг, пользователи не особенно доставали разработчиков нытьем «ну когда же уже» и даже увеличили финансовую поддержку. Часть дополнительных средств Пол планирует бросить на улучшение документации и видеоуроки.

  • В последние годы проект понемногу уходит от применения GTK. Сейчас тулкит используется для всего нескольких вещей: упаковка виджетов на форме, файловые диалоги, текстовый ввод и виджет дерева (treeview). Остальное рисуется на Cairo. Если бы Пол начинал писать DAW сейчас, он бы выбрал готовый специализированный тулкит вроде JUCE. Переписывать виджет текстового ввода он, например, в принципе не возьмётся – масштаб такой работы часто недооценивается, там можно вообще концы отдать. А вот упаковка виджетов на constrained layout – в планах. На момент выхода второй части интервью уже есть ветка, где ведется эта работа.

  • Пол недавно упоминал, что общается с Мартином Кири (Tantacrul), который в прошлом году вышел на работу UX-дизайнером MuseScore (у Мартина популярный блог на ютубе, где он разбирает косяки в юзабилити программ для набора нот с применением фокус-групп пользователей). На прямой вопрос Пол ответил, что пока ничего конкретного сказать не может, но выразил восхищение работой Мартина и заметил, что нужно быть просто тупым, чтобы не хотеть слушать инсайты пользователей, которые работают с твоим софтом впервые.

  • Звуковой стек в Linux – кромешный ад, лучше CoreAudio в макоси пока ничего не придумано. Но в macOS несколько релизов назад часть функциональности убрали в user space демон. Примерно тот же принцип получается при сопряжении ALSA и PipeWire. Автор PipeWire вроде как прислушивается к тому, что ему говорят парни, пишущие звуковой софт, поэтому есть некоторая надежда сделать ситуацию не такой печальной.

  • У Пола накопился ряд претензий к JACK, который он сам же когда-то и создал. Особенно не нравится JACK2, который написан совсем другими людьми. В какой-то момент Пол сложил с себя все полномочия мейнтейнера и с тех пор пребывает в счастливом неведении, что там вообще происходит. Поддержку JACK из программы никто не выпилит, но пользователям Ardour он советует пользоваться бэкендом ALSA, при использовании которого всё просто работает.

  • OMF и AAF – хреновые форматы для обмена проектами, добавлением их поддержки в команде никто не хочет заниматься. Есть некий интерес к OpenTimelineIO, но надо смотреть более предметно.

  • VCV Rack – офигенный проект, Пол признается, что вынужден себя режимить каждый раз, когда запускает этот синтезатор, иначе может играться просто часами (в перерыве между выходами двух частей подкаста я ему с подачи @ist76 показал SOLAR 50, и Пол за полвечера накидал похожий софтовый аналог в Рэке). Сейчас модулей для Rack вдвое больше, чем LV2-плагинов, хотя проекту всего три года, а LV2 – уже больше десятка лет. Сказалась идея на старте прибить гвоздями модули к ровно одному, но очень мощному синтезатору, и убрать у разработчика сложный выбор, на каком тулките писать GUI. Перенести этот опыт на LV2 априори невозможно, но в последнее время выручают фреймворки, с которыми можно генерировать плагины в любом формате (т.е. под любой популярный API). Это заметно улучшает ситуацию со скоростью разработки и доступностью плагинов.

  • Mixbus как единственный успешный коммерческий отпрыск Ardour выжил потому, что разработчики а) на старте не имели проблем с GPL (Solid State Logic сломались уже на этом), б) приняли подход команды к разработке GUI (на этом погорели Waves Audio со своим Tracks Live), в) оказались готовыми интегрироваться в процесс разработки Ardour (тут Waves тоже нишмагли – в какой-то момент кодовые базы безвозвратно разошлись).

 ,

AP
()

как работают звуковые подсистемы в Linux

Форум — General

К своему стыду не углублялся в эту тему и не совсем понимаю как вся эта кухня работает. И если кто нибудь объяснит человеческим языком, не особо вдаваясь в подробности что за ужас тут творится, то я буду очень признателен.

Итак, я знаю что есть pulseaudio - звуковой сервер. По идеи он должен работать с потоками аудио, сводить источник и output девайсы, управлять громкостью и т.д. Есть ALSA, как я понял работает она в пространстве ядра и тоже имеет свои настройки и делает примерно тоже самое. А также предоставляет API для программистов и работает с низкой и стабильной задержкой. А есть еще JACK и JACK2. Вот тут я уже начинаю путаться. Нафига оно нужно? Да и что такое JACK в принципе? Есть большой пласт приложений, bitwig studio например или другие DAW, которые требуют (хоть и имеют фолбеки к другим подсистемам) его наличия. Почему бы не использовать ALSA к примеру? И чем ALSA плох что на его замену был написан pulseaudio? Плюс как я понял можно объединять ALSA и pulseaudio каналы через JACK. Вопрос нафига?

И еще: всегда интересовал вопрос чем все это отличается от CoreAudio в MacOS или звуковой подсистемы в офтопике если не вдаваться в подробности.

 , , , ,

Unixson
()

Игорь Сысоев покидает nginx

Новости — Open Source
Группа Open Source

…. Поэтому с грустью, но и с благодарностью мы объявляем сегодня, что Игорь решил отказаться от NGINX и F5, чтобы проводить больше времени со своими друзьями и семьей и заниматься личными проектами.

>>> Подробности

 

Jopich1
()

25 лет назад...

Галерея — Скриншоты

Привет, ЛОР! Давненько не было скриншотов от меня, но тем не менее… Я решил снова возродить мой музейный экспонат и поискать старые образы линуксов. Я нашел debian 1.3 и 0.93r6. Правда сколько я не пытался, я так и не смог запустить его, хоть и у меня была рабочая дискета. Поэтому единственное что оставалось - виртуальная машина. Но и тут завелся только «livecd-образ», установить я не смог, потому что старый debian отказывался видеть жесткий диск виртуалки (см. первый скриншот). Однако я рад, что он запустился. Приятно видеть, каким Debian стал сейчас!

  • Ядро Linux 2.0.26
  • emacs
  • vi
  • ash
  • grep

>>> Просмотр (1440x800, 48 Kb)

 ,

Dumppper001
()

Install Djentoo

Галерея — Скриншоты

Всё! Чтоб его, установил-таки этот проклятый всеми богами Gentoo! И даже умудрился джентануть немножечко (и даже больше – да простит меня покойный Эдди)! Правда, через кое-как настроеный Guitarix, но это детали…

А теперь всё по порядку.

Как-то в декабре меня в очередной раз посетила мысль – а не накатить ли мне Gentoo? Несколько раз, между прочим, ещё с прошлого года, я уже пробовал, да только вечно что-то мешало – то нехватка времени (почему-то я думал, что мощностей пятой "ряженки" хватит для компиляции всего за ночь; хватить-то может и хватило бы, но установка "генты" – это ведь не только компиляция!), то как раз в этот момент что-то сломали в репозитории, и Python не ставился, а месяц назад вообще Wiki легла, стоило мне только до загрузчика добраться!

Но наконец-то наступил новый 2022 век год, и я таки поборол этого монстра! Так как я "арчевод" со стажем, большинства проблем мне удалось избежать. Однако не всех, ой не всех…

( читать дальше... )

>>> Просмотр (3840x2160, 3384 Kb)

 , ,

Korchevatel
()

Документация к языкам программирования

Форум — Development

Всевозможные учебники и книги - это хорошо, но обычно их предлагают купить и часто не совсем дёшево, даже если они описывают базовый уровень. Бесплатным решением, очевидно, является официальная документация. Когда я открыл документацию к python, я был приятно удивлён, что она написана практически как учебник. Для Java вроде бы тоже всё относительно неплохо в этом плане, хотя хотелось бы отдельный оффлайновый pdf.

Мне захотелось скачать себе документацию в подобном виде для C и C++. Зашёл на их официальные сайты, там описание стандарта предлагают получить на сайте ISO за немалые суммы денег. Да и само описание стандарта далеко не для обучения. Хорошо, подумал я, попробую тогда посмотреть документацию к одной из реализаций языка - GCC-CPP, и вижу, что описанное там тоже вовсе не подходит для обучения. Даже описания типов и примеров объявления нет (может плохо искал, но в заголовках не заметил).

Нет, это не тред «подскажите книгу по Сям», таких для начинающих я и сам могу гору насоветовать.

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


Update

C, C++
Online-ресурсы и учебные пособия для начинающих:

Как дополнение: Рабочая версия стандарта C++14 от 19 ноября 2014 г. (с официального сайта стандарта)


Fortran


Python
В дополнение к официальной документациипереводу руководства Python 3.1):


Object Pascal. Lazarus

Перемещено Klymedy из talks

 , , , ,

grem
()

Задачка с leetcode

Форум — Development

Наткнулся тут на такую задачку:

Видео игра рендерит объекты, но не все, а только ближайшие к игроку и на сколько хватит мощности видеокарты.

Расстояние объектов от игрока находится в векторе D, сложность рендеринга в векторе C. Расстояние объектра и его сложность находятся под одним индексом. Мощность видеокарты задается параметром P.

int render(vector<int> D, vector<int> C, int P);

Рендерить объекты можно только по порядку. Т.е. чтобь отрендерить объект 3, надо чтобы 2 и 1 уже были отрендерены.

Надо найти наибольшее кол-во объектов, которые можно отрендерить на заданной мощности видеокарты.

Пример.
D = {2,5,1,3}
C = {2,3,3,4}
P = 6

В данном примере мы можем отрендерить только 2 объекта, D[2] со сложностью 3 и D[0] со сложностью 2: 3 + 2 <= 6.

Надеюсь, доступно объяснил.

Я решал на C++ так: засунул всё это дело в std::map<int, multiset> с ключами из D и валуе multiset со значениями из C, затем шел по мапе и суммировал сложности рендеринга до тех пор, пока они <= P.

Multiset нужен потому что у объектов может быть равное расстояние до игрока, но разные сложности.

Автосудья сказал, что 100% корректно, но по эффективности 1 из 4. Я так понял (возможно неверно), комплексити моего решения O(nlogn).

Есть идеи, как решать эту проблему эффективнее?

 ,

untitl3d
()

Мода на облака, бигдату, и распределенные БД [теория тупости]

Форум — Talks

Давайте немножко побеседуем про новомодные low consistency poor availability системы, снискавшие популярность в последнее время.

Попытка заблокировать сервисы Google обернулась сбоем в работе систем Центробанка РФ (комментарий)
«интернет вояками планировался как отказоустойчивая сеть, но вебмакаки умудрились сделать из нее сильно связанный фарш, поздравляю, вы сломали чугунный шар»

Как мы все знаем, интернет разрабатывался, как отказоустойчивая система, которая функционирует до последнего узла. Как мы знаем, коммерсанту частенько есть что скрывать и не хочется зависеть от благого расположения Васи Пупкина, даже если Васю Пупкина зовут SAP, Oracle, IBM, или Microsoft. Так почему же люди покупают Office 365 и Dynamics 365 при том, что есть полностью оффлайн альтернативы? Если вы размещаетесь в России или Китае, покупаете продукт 365, а потом Роскомнадзоры или сам MS блокирует вам облако — вы остаетесь полностью в дерьме. Кто это покупает и что ими движет? Кто завязывает свой бизнес на Dynamics 365? Или на облачный Битрикс? Я не понимаю, предлагайте ваши вариант.

«Облака», в плане «привязан цепью к интернет-серверу», не новы, Самая отстойная копирастическая контора, Ubisoft, в свое время отличилась тем, что их uPlay при кратковременной потере интернет-соединения вываливал вас из ОФФЛАЙН игры. По сути, многие софтоделы ориентируются на облако просто для того, чтобы иметь больше возможностей струсить денег с потребителя. И даже несмотря на то, что теоретически возможность миграции предоставляет много кто — фактически эта миграция выйдет вам в копеечку и вы семь раз подумаете, прежде чем мигрировать.

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

Но раскидать серваки по планете — это одно, а заставить их работать после этого вместе — это совершенно другого уровня задача. Как она обычно решается? Через базы данных, в число которых входят брокеры сообщений, вроде RabbitMQ. И здесь мы вступаем на тропу лютого треша, потому что проектировать и реализовывать распределенные системы и БД в частности на планете умеет человек двадцать, и скорее всего они работают не у вас, но спрос на них сильно больше, потому что другие «умники» уже давно витают в облаках и своих спецов не отдадут.

«Готовые решения всё порешают» — скажете вы? А знаете ли вы, что ZooKeeper — единственная распределенная СУБД, гарантирующая строгую согласованность данных при отказах? А знаете ли вы, что, даже несмотря на выдающиеся достижения, в ZooKeeper операция синхронизированного чтения нелинеаризуема, а потому часть вашего кластера может сидеть с тухлыми данными, не зная об этом? А знаете ли вы, что полностью исправный кластер Riak при интенсивных конфликтах обновлений теряет более половины этих обновлений на полностью исправном кластере? Даже при самых строгих настройках согласованности данных. Причем, таким ужасным Riak делать было не обязательно — на самом деле это спонсоры Riak и попросили сделать умолчательную конфигурацию такой ужасной.

Но как же так, мы же все давно знаем про Paxos, который еще триста лет назад позволял достигнуть консенсуса в распределенной системе с отказами узлов — почему же до сих пор в школе не преподают основы построения распределенных систем? Если мы возьмем тот же ZooKeeper, то мы увидим, что в случае отказа лидера кластеру требуется НЕСКОЛЬКО СЕКУНД на возобновление работы — это настоящая стоимость честного распределенного консенсуса, который у ZooKeeper при выборах лидера похож на Paxos. Для решения проблем дичайше медленного консенсуса и возникла идея выбора «эталонного сервера», лидера, мнение которого безоговорочно принимает весь кластер без затрат на спор между узлами.

Правда, этот подход все равно не сработает при достаточно частых сбоях с частыми потерями лидера. Более того, система на консенсусе полностью выйдет из строя при потере более половины узлов. Вы можете заметить, что согласно теореме говна-или-мочи достижима либо согласованность данных, либо доступность системы, либо в системе недопустимы отказы. Давайте пожертвует согласованностью ради доступности! Но беда мамкиных бигдатовцев заключается в том, что средняя система по больнице не обладает высокой доступностью и не обладает хорошими гарантиями согласованности. То есть, высокодоступная система готова работать 24/7 до первого отказа сервера или потери соединения с интернетом. Почему пришлось так делать? Потому что иначе будет высокая задержка ответа и/или большая нагрузка на каналы.

Возьмем среднюю бигдату в вакууме — GitLab:
https://about.gitlab.com/blog/2017/02/01/gitlab-dot-com-database-incident/
Пока бигдатовцы боролись со спамером, они умудрились ушатать данные пользователей за целый день, и потом еще день восстанавливали ее из бэкапа. Тест на доступность успешно провален. Это еще ладно — а я слышал истории о том, что у сервиса бэкапы-то есть, но восстанавливать их придется несколько недель. Так что отказ на день — это еще вполне себе High Availability по нынешним меркам.

Да, какой-нибудь яндекс регулярно устраивает тесты отказоустойчивости, вырубая датацентр. Однако, мне страшно подумать, что случится, если у яндекса внезапно вырубится более половины датацентров и отвалятся службы, опирающиеся на консенсус. Ихний кластер ClickHouse опирается в своей работе на (сюрприз) ZooKeeper. Отказ обезьянника (а он полностью отрубается при отказе половины узлов) приводит к переходу кластера в read-only. Сколько там еще служб отправится в read-only — мне было бы интересно узнать (давайте попросим роскомнадзор для проверки поблокировать датацентры яндекса).

Заметьте, что на серверах обычно SSD/HDD стоят в зеркале — чтобы, боже упаси, 24/7 сервис не умер из-за отказа одного из жестких дисков. И этому процессу впаривания говна нет конца, даже если завтра сделают устройства для передачи информации со сверхсветовой скоростью на спутанных квантовых состояниях и карманные петабайтные носители со средним периодом отказа в 2000 лет, то желающих хранить данные на локалхосте станет еще меньше и облачные сервисы будут выходить из строя по таймаутам при недопустимо больших задержках канала связи в 1 мс.

Потому, как ни странно, самое надежное «облако» — это то, которое стоит у вас в локальной сетке. Мало того, что облака могут в любой момент отвалиться — они еще и более несводобны, чем проприетарная софтина на локалхосте, как и предупреждал нас Штолман:
https://www.gnu.org/philosophy/who-does-that-server-really-serve.html

Я вот что не пойму: я один это вижу? Ваши данные, которые не ваши, ваши приложения, которая не ваши, ваши высоконадежные высокодоступные SaaS, которые остаются таковыми до первого отказа (и тоже, в общем-то, не ваши). Или вы тут все зарабатываете на SaaS (как Шома), потому особо не вскрываете эту тему? А со мной не поделились — у-у-у, подлецы.

PS: сам участвовал в разработке SaaS, но поставляли также и коробку для внутреннего сервера.

 , , , ,

byko3y
()

Новая книга «Linux Kernel Programming»

Новости — Ядро Linux
Группа Ядро Linux

Много воды утекло с момента выхода LDD3 (LDD4 мы, видимо, уже не дождёмся), безнадёжно устарел фундаментальный труд Бовета и Чезати, Роберт Лав давно не радовал нас своими прекрасными творениями. Казалось бы, в мире литературы о программировании ядра Linux наметилась устойчивая стагнация…

Но нет! Ситуацию спасает замечательный индийский программист со звучным именем Кайван Биллимория. Он написал книгу о программировании ядра, аж в двух томах.

Об авторе

Кайван программирует с 1983 года. В то время он самостоятельно научился программировать на бейсике, затем освоил Си и ассемблер под MS-DOS, а потом открыл для себя мир UNIX и Linux. Занимался программированием ядра и драйверов, участвовал в коммерческих и свободных проектах, занимался преподавательской деятельностью.

Повествование в книге ведётся на основе Ubuntu 18.04 LTS и ядра версии 5.4.

( читать дальше... )

>>> Том 1 на Amazon

>>> Том 2 на Amazon

 , , ,

x-signal
()

как ускорить линукс ядро даже в ущерб безопасности для локалхоста игоря

Форум — Admin

настраивать ванильное ядро и cmdline уже умею
локалхост без интернета
и как вырубить всякие защищалки в компиляции софта и ядра в gentoo
и прочее
скидывайте все сюда даже бесполезное

 , , ,

nanosecond
()

Написали эмулятор RISC-V для GPU

Форум — Talks

Линукс запускается

Новость на opennet https://www.opennet.ru/opennews/art.shtml?num=55694
Бложик автора https://blog.pimaker.at/texts/rvc1/
Код https://github.com/pimaker/rvc

 ,

bga_
()

Что вас раздражает в фреймворках?

Форум — Talks

Сразу скажу, что пишу про Java. Но интересно и про другое почитать.

Меня раздражают:

  1. Какие-то свои плагины для сборки. Например id 'org.springframework.boot' version '1.4.3.RELEASE'.

  2. Дико бесят какие-то свои выдуманные программки для управления проектом. Вот читаю про Micronaut: mn create-app example.micronaut.micronautguide --build=maven --lang=java и уже начинаю раздражаться.

  3. Магия. Вообще сложно найти фреймворк для Java без магии. Это одна из причин, по которым я долго пользовался спрингом без бута. Там есть возможность писать код почти без магии. Мне нужно, чтобы я написать main, чтобы я там всё сам сконфигурировал и запустил. Никаких автоматических сканирований всех моих классов в проекте. Ничего такого. Всё должно идти из main-а. Весь граф вызовов и прочего должен находиться через Find Usages. Каждый класс должен создаваться через конструктор, или через фабрику, но не через магию.

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

К примеру я пишу interface PersonMapper { PersonDto toDto(PersonDb db); } и использую его в своём коде, а mapstruct генерирует его реализацию, которая делает очевидные вещи. Это в принципе максимум кодогенерации, которую я выношу.

Ломбок должен сдохнуть.

 , ,

Legioner
()

Домашний сервер

Галерея — Рабочие места

Не знаю будет ли интересно благородным донам, но вот мой домашний сервер!

Машина на базе одноплатного компьютера raspberry pi zero с дистрибутивом raspbian. Машина большую часть своего времени занята воспроизведением losless аудио и онлайн-радио, о чем говорит специально заточенная под это панель. За звук отвечает могучий i2c ЦАП. VU-метр в центре пока в процессе допиливания ибо alsa странно себя ведет.

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

Все конструктивные узлы корпуса начерчены в православном cl-cad и вырезаны лазером у рекламщиков. Дизайн устройства вдохновлен рандомным мэном из интернета.

А теперь важный вопрос к дочитавшим: есть ли какая программа в линуксе или андроиде для ведения учета коллекции компакт-дисков и винилов? К примеру чтобы собрался я купить диск мотли-крю и мог бы удобно и быстро есть ли у меня такой альбом в домашней коллекции? Так же предупреждая вопрос «А DSD файлы слушаешь?» отвечаю, у зеро-малинки не хватает ресурсов на такой формат чтобы играть его без заиканий))))

>>> Просмотр (5069x2811, 593 Kb)

 , , ,

bioreactor
()

Xilinx открыла исходный код Vitis HLS

Новости — Open Source
Xilinx открыла исходный код Vitis HLS
Группа Open Source

Компания Xilinx, выпускающая интегральные микросхемы программируемой логики, открыла исходный код Vitis HLS — набора инструментов, который позволяет синтезировать высокоуровневое описание логической структуры FPGA из кода на Си/Си++ (в том числе с использованием OpenCL).

По словам представителя компании, публикация исходного кода интерфейса Vitis HLS открывает новые возможности для исследователей, разработчиков и энтузиастов компиляторов в использовании и модификации Vitis HLS в соответствии с конкретными потребностями своих приложений.

Исходный код опубликован на условиях лицензии Apache 2.0 и доступен в репозитории на GitHub.

>>> Подробности

 ,

ymn
()

Атомарны ли указатели в Си?

Форум — Development

Вот пишут, что

You can also assume that pointer types are atomic

https://www.gnu.org/software/libc/manual/html_node/Atomic-Types.html

То есть указатели всегда атомарные даже без дополнительных инклудов и atomic?

 , ,

metaprog
()