LINUX.ORG.RU

Сообщения yetanother

 

Virtual box + bridge + docker container = не работает

Клиент-серверная архитектура, обмен по юдипи. Запускаю сервер в докер компоуз, там создается две собственные сети, но с доступом к хостовой (--network host). Графического клиента запускаю на виртуалке и нужно виртуалку затащить в ту же сеть, что и в докер компоуз создается, чтобы они могли обмениваться данными. Для этого я в виртуалке выбирают бридж и выбираю виртуальный адаптер, который создал докер. В итоге клиент пингует сервер и наоборот, между ними происходит обмен на уровне ядра - я по tcpdump вижу, что нужные пакеты от клиента приходят на сервер и наоборот. Но на уровене приложения пакетов нет - клиент и сервер не видят друг друга. Т.е. ядро их отбрасывает. netstat -s показывает, что чексумма неверная и по tcpdump'у тоже это видно - но чексумма рассчитывается сетевухой, т.е. это в принципе не страшно, ну и чексумма кривая только у серверных пакетов, а клиент посылает с корректной суммой, но сервер его не видит. Пытался через ethtool отключить offloading, но в контейнере это недоступно, судя по всему, может capabilities какие-то надо, я хз, я тут уже потерял землю под ногами и на ощупь пытался что-то сделать. В общем, пАмАгИтЕ люди добрые советом, что ли. Как так, пакеты приходят, но ядро их отбрасывает?

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

 , , networking,

yetanother
()

Помогите с анализом нагрузки на ЦПУ в сетевом приложении

Есть сетевое приложение, снял трейс с помощью perf, вышло, что 35% ЦПУ оно проводит в приеме сообщений, 50% в передаче. Передается порядка 110 сообщений в секунду размером в основном от 100 до 500 байт. Т.е. данных явно мало и нагрузка на ЦПУ явно этому не соответствует. Нужно разобраться почему так.

Что бросается в глаза - в приеме только 5% из 35% оно проводит в сисколах ядрах, а при передаче уже 26% из 50%. Разве так должно быть? И самое главное - из 26% ЦПУ, что уходят на _libc_sendmessage (которая уже дергает ядро), около 19% уходит на ip_recv - это же по идее уже прием данных, а не передача? а вообще стек вызова заканчивается вызовом __lock_text_start, где ЦПУ проводит 17.8% времени

есть знатоки линукса и его ядра, кто может пояснить: 1 Нормально ли тратить при передаче 100 сообщений в 100-500 байт столько ЦПУ (запускаю на виртуалке, на хосте рязань 9 5950х) 2. Почему в вызове _libc_sendmessage используется ip_recv и в итоге подавляющее кол-во времени проводится в __lock_text_start

Из подробностей - обмен по мультикасту, создается несколько отдельных сокетов, которые привязываются к одному мультикаст адресу, под капотом boost::asio.

UPDATE: добавил ссылку на FlameGraph со стеком вызовов при отравке сообщения. Тут видно, что __libc_sendmessage занимает 9% от общего времени работы приложения, и из них 6.35% ЦПУ проводит в __lock_text_start. Возможно это скажет кому-то из специалистов?

 , ,

yetanother
()

hdd постоянно в uninterruptable sleep mode при небольшой нагрузке

Приложение пишет в БД postgres в среднем 1Мб/с согласно iotop. При этом процесс postgres'а, который пишет на диск (hdd) постоянно находится в uninterruptable sleep mode - top показывает Ds. Также top показывает 75% idle и 11% waiting for IO. Правильно я понимаю, что это винт умирает или как минимум не справляется? 1Мб/с не должен так нагружать винт.

 , ,

yetanother
()

Вывод iftop

Подскажите, что значат три колонки последние в выводе iftop?

213.180.204.183                         => 192.168.2.8                             1.24Mb  1.15Mb  1.17Mb

Легкий гуглеж ничего не дал, а запуск с опцией -h навел меня на мысль, что это трафик за последние 2, 10 и 40 сек. Я прав в своих подозрениях?

 

yetanother
()

Как выбрать паз в solvespace?

Решил использовать сабж для чертежа двух деревянных деталей, соединенных прямым шипом. Интуитивно попытался на эскизе вырезать и потом экструдировать. Один паз вырезать удается, но как его повторить с помощью Step translating не разобрался. Более менее похожее на результат получилось когда я сделал две детали - одна просто параллелепиед, а вторая это гребенка, чьи шипы должны вырезать нужные мне пазы в первой детали. Но когда я выбрал difference, то получилось наоборот - из гребенки было вырезано «лишнее», т.е. вырезание наоборот происходит, а как задать порядок откуда что вырезается тоже пока не разобрался.

Подскажите, как правильно комбинировать детали для получения сложных форм.

 

yetanother
()

systemd убивает виртуальные машины (virtualbox)

Вот и я столкнулся с этим самым системд. В syslog’е следующее:

Aug 24 21:21:01 srv4 systemd[1]: session-923.scope: Killing process 7095 (dbus-launch) with signal SIGTERM.
Aug 24 21:21:01 srv4 systemd[1]: session-923.scope: Killing process 7098 (VBoxXPCOMIPCD) with signal SIGTERM.
Aug 24 21:21:01 srv4 systemd[1]: session-923.scope: Killing process 7103 (VBoxSVC) with signal SIGTERM.
Aug 24 21:21:01 srv4 systemd[1]: session-923.scope: Killing process 7273 (VBoxHeadless) with signal SIGTERM.
Aug 24 21:21:01 srv4 systemd[1]: session-923.scope: Killing process 7302 (VBoxHeadless) with signal SIGTERM.
Aug 24 21:21:01 srv4 systemd[1]: session-923.scope: Killing process 7332 (VBoxHeadless) with signal SIGTERM.

Как я понял это какая штатная фича системд т.к. если запустить гуй виртуалбокса, то он эти машины не прибивает. Очевидно, что определяет по какой-то своей логике, что эти процессы никем не используются == «лишние» и убивает их. Как его настроить, чтобы он не считал их лишними?

 

yetanother
()

dhcp сервер - работает только ручное распределение IP адресов

Переехали на новое место и теперь dhcp сервер раздает ip адреса только по mac адресу. Настройки нашей небольшой сети остались те же, железо тоже за исключением того, что раньше был управляемый коммутатор, а теперь сеть автономная и стоит неуправляемый. Сориентируйте куда копать?

 

yetanother
()

Произвольно выключаются ВМ (VirtualBox)

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

(все это на Астра Линукс, в.2.12.29)

 , ,

yetanother
()

Права работодателя на код сотрудника

Если в договоре написано что-то вроде:

право на результаты деятельности Сотрудника в ходе выполнения своих трудовых обязанностей или конкретного задания Работодателя принадлежат Работодателю

правильно я понимаю, что если я написал код в рабочее время, то он автоматически принадлежит Работодателю?

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

  • есть коммиты в рабочее время
  • нет коммитов, выполненных в рабочее время

 

yetanother
()

Что даст аппаратная виртуализация в Эльбрус-16С?

Прочитал на днях, что очередная версия Эльбруса будет иметь аппаратную виртуализацию. В связи с чем вопрос - позволит ли это повысить скорость эмуляции amd64 и если да, то на сколько?

В теории МЦСТ должны быть заинтересованы в эффективной виртуализации amd64, но насколько это на практике возможно по техническим причинам, а также юридическим?

 , ,

yetanother
()

Почему llvm не подходит для Эльбруса?

Может кто-нибудь объяснить, почему llvm не подходит для Эльбруса, как (вроде) утверждает МЦСТ? Действительно ли llvm не подходит для процессоров с широким словом?

Я бы понял, если бы МЦСТ сказали, что по историческим причинам они не используют llvm, но они утверждают, что llvm именно не подходит для Эльбруса.

 ,

yetanother
()

Аналог GNU assembly на llvm

C ассемблером не работаю, но возникла следующая задача. Есть gcc-шная ассемблерная вставка:

void func(int a, int b)
{
__asm__ __volatile__ (
	".asciz \"%n[_SDT_S1]@%[_SDT_A1] %n[_SDT_S2]@%[_SDT_A2]\"\n"
	:: [_SDT_S1] "n" (4),
	   [_SDT_A1] "nor" ((a)), 
	   [_SDT_S2] "n" (4), 
	   [_SDT_A2] "nor" ((b))
); 
}
и нужно ее переписать на llvm assembler. Но я не смог найти аналог InputOperands на llvm.

Основная задача у меня это чтобы аргументы функции a, b преобразовать в их адреса на стеке -4(%rbp) и -8(%rbp) соответственно.

Где можно про это почитать?

 , , ,

yetanother
()

Можно ли читать данные из базы данных debconf в скрипте prerm?

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

 ,

yetanother
()

Кем и когда вызывается DEBIAN/config?

В сети нашел, что этот скрипт вызывается еще до распаковки пакета. Однако в реальности вызова скрипта не происходит (остальные типа post[inst|rm] вызываются). Вопрос - вызывается ли этот скрипт автоматически все-таки и если да, то когда?

Я всегда могу его вызвать из postinst например, когда он вызван с аргументом configure, но по логике, раз про этот файл описано явно, он должен вызываться каким-то заранее определенным способом, а не вручную.

 ,

yetanother
()

Оптимальный способ поднять энное количество однотипных виртуальных машин

Есть виртуальная машина ВМ0 (vbox) со статическим адресом. В скрипте Ansible выполняется следующее:

  1. ВМ0 клонируется как ВМ1 (ВМ0 выключена)
  2. Запускаем ВМ1
  3. Заходим на ВМ1 на нее по этому адресу
  4. Настраиваем ВМ1 плюс меняем адрес на заранее определенный
  5. Перегружаем ВМ1
  6. Переходим к п.1 и клонируем уже ВМ2, ВМ3 ... ВМn

Хочется одновременно запустить все n ВМ и одновременно их настраивать, т.к. это быстрее в n раз.

Идеальным вариантом было бы еще при клонировании ВМ задавать ей hostname (да и адрес иногда полезно), но я этого не нашел как сделать. Можно задавать mac адрес при клонировании и по нему привязать адреса на dhcp сервере, но мне не нравится что нужно будет лезть в его настройки, хотелось бы ограничиться настройкой только ВМ

 ,

yetanother
()

Странный ping

Машина Б пингуется с машины А только если перед этим пингануть машину А с машины Б, т.е. если был пинг в обратном направлении. Можете подсказать куда копать? Это известный случай или нужна дополнительная информация?

 

yetanother
()

Целесообразность разработка собственного кодека для ffmpeg

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

Главный вопрос - насколько это глупая идея? Может быть проще просто сделать свой упрощенный adhoc вариант и не связываться с чужим кодом?

Уточняющие вопросы:

  1. сложно ли добавить кодек к ffmpeg? В первую очередь интересует трудоемкость по времени, абстрактно - навыков разобраться и реализовать у меня хватит, но если там просто много разного бойлер плейта, то тратить на это время я бы не хотел, тогда лучше adhoc вариант.
  2. какой контейнер из существующих лучше использовать? я смотрю на matroska, но это просто выбор пальцем в небо
  3. сложно ли добавить свой контейнер? хотя надеюсь что это лишнее

 

yetanother
()

using ctor and cast operator as accessors

Есть кодовая база, в которой нужно закрыть доступ к полю структуры. Использование классических get()/set() дело понятное и привычное. Но есть еще один способ реализовать свойства - с помощью конструкторов и операторов приведения.

ВАЖНО: в структуре только одно поле. по факту это замена встроенного типа на свой тип с более сложной логикой.

Классика

struct Value
{
    float getValue()        { return _value; }
    void  setValue(float v) { _value = v; }
private:
    float _value;
}

Через конструктор и оператор приведения

struct Value
{
    float()        { return _value; }
    Value(float v) { _value = v; }
private:
    float _value;
}

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

 

yetanother
()

C++/D младший разработчик/стажер (СПб)

Для разработки компонента системы средней сложности требуется помощник. Система на С/С++, прототип компонента, тесты и инструменты на D. С точки зрения computer science система простая, сложность лежит в предметной области. Чтобы сотрудник мог сосредоточится на предметной области и нужен помощник. Обязанности:

  • развитие внутреннего инструмента для визуальной отладки (modern opengl, простая профессиональная графика без освещения и прочей красоты);
  • развитие тестов (функциональные тесты развиваются вместе с компонентом и сейчас их нужно выделить в отдельную сущность плюс на носу интеграционные; разрабатывать тесты не требуется, достаточно их реализации);

Требования:

  • знание linux cli, git, C++, D
  • желание развиваться (данная позиция не более чем промежуточный этап в карьере программиста, если вы готовы сидеть на такой позиции вам не к нам)
  • чтение документации на английском языке

опыт и образование менее значимы чем реальные знания

Желательно:

  • cmake
  • jenkins
  • github/gitlab
  • modern opengl
  • immediate gui
  • метапрограммирование (D)
  • твер и матстатистика будут заметным плюсом (ну а вдруг?)) )

Во всех требованиях достаточно базового уровня. Главное, чтобы понятия о «базовости» у нас совпадали. Код тоже простой.

График работы: вилка 30-40 килорублей, поэтому график очень гибкий, трудоустройство официальное, полное или частичное (как желаете), в принципе возможна удаленная работа, но должна быть возможность приехать в офис, работа стабильная

Контакты: Помощника ищу сам для себя, так как опасаюсь что найдут мне кого попало на эти 30-40 денег, поэтому почта - личная drug2004[at]bk[dot]ru

 , ,

yetanother
()

RSS подписка на новые темы