LINUX.ORG.RU

Избранные сообщения Vlad-76

Как я получал российский TLS-сертификат

 , ,

Услышал, что LE не продлевает сертификаты кому-то из России.

Услышал, что какие-то удостоверяющие центры отозвали сертификаты у кого-то из России.

А мне как раз нужен сертификат для сайта организации (раньше не было никакого). Решил не наступать на зарубежные грабли и получить суверенный бесплатный сертификат от Минцифры.

  1. Домен зарегистрирован на физлицо, это для Минцифры не подходит, нужно перерегистрировать на организацию. В Руцентре это делается через подачу заявления лично в офисе (остальные способы ещё хуже). Подал заявление, рассмотрение до 3 рабочих дней.

  2. Проходит 3 рабочих дня, в личном кабинете домена нет, звонок в поддержку (только по будним дням в рабочее время), ожидание на линии 15 минут, специалист отвечает «рассмотрение до месяца», я проявляю настойчивость и говорю, что в офисе обещали 3 дня, должна быть какая-то причина, и лишь в результате тщательного допроса специалист признался, что в личном кабинете нужно зайти в «Операции → Смена администратора» и там нажать «Принять домен». На главной странице личного кабинета не было ни намёка на то, что появился новый домен для принятия, и я так и не узнал, когда он там появился, через 3 дня или через полчаса.

  3. Для подачи заявления на сертификат нужна справка о принадлежности домена, подписанная УКЭП. Руцентр выдаёт такие справки бесплатно, если у вас подключена платная услуга «Безопасность домена» (я её подключать не собирался, они сами подключили). Заказываю справку, пропускаю при заказе варианты выбора доставки справки, и оказывается, что я заказал «Доставку почтой». Заказываю вторично, выбираю на этот раз электронный вариант, получаю отказ, т. к. уже заказана доставка почтой. Звоню в поддержку, ожидание на линии 10 минут, специалист отвечает, что отменить заказ можно только по заявке в поддержку через сайт. Пишу заявку на сайте, жду день, жду второй, звоню снова, через какое-то время заказ отменяют.

  4. Заново заказываю справку о принадлежности домена, но теперь это платная услуга, потому что «Безопасность домена» как раз за эти 2 дня истекла и продлевать её я не собираюсь. Плачу за справку (сумма меньше), получаю результат через ещё 2 дня. Электронную справку без живой подписи, которая делается автоматически, делают 2 дня.

  5. Справка получена, перехожу к заполнению заявления на Госуслугах на получение OV-сертификата. Первый вопрос: RSA или ГОСТ? Отвечаю, конечно ГОСТ, мы тут в суверенность играем или что, и я ещё давно слышал, что гостовские алгоритмы шифрования включили в OpenSSL. Заполняю конфигурационый файл по инструкции. В процессе пришлось выяснять, какого класса у меня СКЗИ Криптопро (оказалось, что КС1), а также расчехлить виртуалку с Астра-линуксом, чтобы создать ключ по ГОСТу (здесь меня должны были начать терзать смутные сомнения, но не начали).

  6. Для отправки заявления нужно доказать владение доменом путём добавления TXT-записи с подтверждающим кодом. Это означает ожидание от 10 до 30 минут, пока запись дойдёт до московских DNS-серверов, что на общем фоне незначительная потеря. Но для чего тогда нужна справка?

  7. Заявление отправлено в Минцифры, код подтверждён, справка с подписью тоже приложена. Через 10 секунд приходит отказ с формулировкой:

    NCA-315. Подпись документа, подтверждающего владение доменом, не прошла проверку

    Интернет таких слов не знает. Обращаюсь в поддержку Минцифры через Госуслуги же. Из поддержки отвечают на следующий день: оказывается, подписывать справку о принадлежности домена должен не регистратор домена, а организация, на которую оформлен домен. Из-за этого, во-первых, теряет всякий смысл само требование справки (и открывается возможность к более простой и нечестной процедуре получения справки без выполнения пп. 1-2), и во-вторых, теряют смысл действия в пп. 3-4, потому что справку без электронной подписи Руцентр просто даёт скачать с сайта бесплатно.

  8. Подписываю уже имеющуюся справку Руцентра подписью организации, подаю заявление на Госуслуги снова, через 10 секунд отказ не приходит, радуюсь, затем радость постепенно сменяется томительным ожиданием, потому что срок рассмотрения до 3 рабочих дней (в моём случае было 2).

  9. Получаю желанный сертификат, спешу поставить его на сервер и обнаруживаю, что:

    • Из коробки сертификат в nginx не работает, потому что суверенные гостовские алгоритмы, см. п. 5;

    • Рунет пестрит рекламой кастомной сборки nginx от Криптопро, в которую эти алгоритмы встроены, но последнее, что я хочу делать — это ставить на сервер чьи-либо кастомные сборки с регистрацией и кодами активации;

    • Всё же при наличии пакета libengine-gost-openssl, включения gost.so в конфиге OpenSSL и добавления в конфиг сайта

      ssl_protocols TLSv1.2; # Но не 1.3
      ssl_ciphers GOST2012-GOST8912-GOST8912:kGOST:aGOST;
      

      штатный nginx начинает работать.

  10. Но начинает работать в п. 9 только сервер. Клиенты не работают. Точнее, работает один: openssl s_client из командной строки (при условии установки и включения gost.so из п. 9). Никакие десктопные браузеры сайт не открывают. Ни Хром, ни Фаерфокс, ни chromium-gost, ни даже Яндекс-браузер. Не открывают вообще, опции «открой, я доверяю», не предлагается. Для того, чтобы зайти на сайт, нужно расширение Криптопро. Тот факт, что системный OpenSSL работает без Криптопро, браузерам не помогает, потому что все они тащат свои реализации TLS, системной не пользуются. Есть возможность локального проксирования трафика через OpenSSL и хождения на сайт через http://localhost:1234, но это слишком неестественно даже для пользователей Линукса. В прошлом были десктопные браузеры, поддерживающие ГОСТ (Атом, Спутник), но их уже нет. Также ходят слухи о секретной государственной разработке под названием «Браузер Восток», но её ещё нет. Короче говоря, гостовский сертификат был ошибкой.

  11. Возвращаюсь к. 5, заполняю заявку по другой форме на RSA-сертификат, повторяю п. 6, заявление отправлено, сертификат получен вечером того же дня, это успех.

  12. На этом фоне требование поставить суверенные корневые сертификаты кажется сущим пустяком. Единственное, нужно поставить их дважды: в браузер (чтобы открывать сайт без предупреждения от браузера) и в систему (чтобы работало всё остальное). Но в браузер их и так уже все поставили из-за Сбербанка и РЖД, а в систему, ну что ж, сгорел сарай — гори и хата.

Выводы:

  • С Руцентром лучше дела не иметь и регистрировать домены где угодно, только не в нём;

  • Подписывайте сами выданные вам справки о владении доменами (не проверял, работает ли также выдача этих справок самому себе);

  • Гостовские сертификаты вам нужны, только если вы государственная организация с повышенными требованиями к информационной безопасности, в остальных случаях берите RSA-сертификат;

  • Если не делать лишних действий и если очень повезёт, можно справиться за 1 рабочий день!

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

ringill
()

Intent AI Ops - Админ/DevOps для управления серверами на человеческом языке

 , intentaiops, , ,

Intent AI Ops - это командный интерфейс для управлениям серверами или любыми хостами под управлением GNU/Linux (проверенно на Ubuntu, Debian, Fedora, AlmaLinux, Rocky Linux, openSUSE, Arch, Alpine Linux, Oracle Linux), Windows, FreeBSD, macOS и для Kubernetes на человеческом языке с помощью ИИ.

Работает так:

Вы подключайте хост под SSH, пишите задание например установить WordPress и магия происходит сама по себе. Также можно одновременно выполнять задания сразу на нескольких сохраненных хостах одновременно, как-будто ansible, salt stack или знания как что-то устанавливать или настраивать на конечной ОС вообще не нужны.

Отличие от большинства проектов подобного рода такое:

  • Данные для подключения к SSH в случае их сохранения зашифрованы, не нужно устанавливать ИИ-агента или какой-то софт (агента для управления) изначально на каждую машину, достаточно только SSH.

  • Никакие секреты ИИ не передаются

  • Можно подключиться к машине как временный хост, например для того чтобы посмотреть логи, можно не сохранять пароль к SSH и каждый раз самому вводить

  • Вместо какой-то софтины если нужно продвинутое управление, то CLI сам установить легковестный мониторинг Netdata и плагин к нему (плагин намного проще ревьювить, чем отдельную софтину)

  • Не нужны никакие API-ключи для ИИ, CLI просто работает с системным Сodex напрямую, подписка рекомендуется (но даже если юзать через API это точно будет дешевле чем нанять админа)

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

  • через ? можно просто общаться с ИИ (например если нужно уточнить что-то до составления плана)

  • Есть история выполнения, история не содержит каких-либо секретных данные для сервиса, можно откатить все изменения, также если задание не выполнится корректно, можно запустить его снова с новыми своими или корректировками от ИИ и делать так пока цель не будет выполнена.

P.S.: Надеюсь никакой админ меня не пристрелит, этот инструмент направлен на улучшение продуктивности и уменьшения рутинных действий. Создание этого или подобных инструментов просто неизбежны.

Да я честно, не знаю насколько хорошо это будет работать в ваших юзкейсах, у меня работало даже слишком хорошо. Сейчас только работает с gpt-5.6-luna, medium. В исходниках можно поменять на более слабую модель по идеи, но вот я именно тестил только с ней. Самое трудное конечно это было сделать тест-лабу со многими Linux дистрибутивами, FreeBSD, macOS, Windows, Kubernetes. Да я бы мог обучить с бинарником claude например, но у меня просто нету подписки их, а там явно не $20 понадобится чтобы все тесты прогнать под всеми платформами и зоопарком.

Еще одно замечание, если хост поддерживает, то будет всегда стараться использовать Docker/Podman/Colima/Docker Desktop/WSL для веб-сервесов.

Из интересного по ходу проекта: Самое трудное было обучиться для зоопарка Linux дистрибутивов, а не для Windows или macOS например, это не, что чего я ожидал, так как всегда казалось что Linux проще админить.

Также если попросить установить обновления, то оно должно именно установить обновления без перезагрузки, а не сделать do-release-upgrade. Я все-таки зато, чтобы такие операции делали вручную.

anonymous_sama
()

Как отговорить себя от написания своей ФС

 , high performance,

Моя идея о том, чтобы переписать наш Flussonic с Erlang на Rust оказалась совершенно прекрасной и у меня совершенно прекрасные результаты. Захват 10 000 камер на сервер - это прямо скажем серьезный результат, на рынке таких предложений мало.

Однако трафик записи в 16-17 гигабит на 38 шпинделей - не предел возможности диска, это порядка 420 мегабит, а в теории шпиндель может принять и до 2 000 мегабит.

Единственная мысль, которая осталась после всех оптимизаций (выравнивание по границе блока, fadvise) - это хранение данных в одном файле в interleaved режиме, т.е. все камеры на одном диске держать в одном файле.

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

Давайте 3 причины не лезть в этот блуд.

max_lapshin
()

Си. Нормально ли не освобождать ресурсы, которые освобождает ОС после завершения программы?

 ,

Пример:

int main()
{
  int fd;
  char *filename;

  filename = malloc_filename();
  fd = open(filename, O_RDWR);
  if (!fd) {
    perror(filename);
    /* free(filename); */
    return 1;
  }
  
  doing_something(fd);

  /* free(filename); */
  /* close(fd); */
  return 0;
}

Что плохого, если я не сделаю free() и close()? Какие подводные камни? Я раньше думал, что valgrind ругается, если сам не сделал free(), но нет (не исключено, что я неправильно воспользовался valgrind).

Jullyfish
()

Linux наконец-то не тормозит или пятничный релакс

 , ,

Помню давние времена, это был Debian 4, прекрасные третьи кеды, Celeron, HDD диски, какой-то древний GeForce и летающий Linux.

Прошли десятилетия. Из статьи в статью копипастится мантра «Linux для слабого железа», так же она повторяется и в комментариях, непременно сопровождаясь аннотацией «Пишет Вася, 32 Gb RAM, SSD Tb, GeForce RTX 5060 Ti». А я тем временем наблюдаю на своем железе какую-то ужасающую деградацию работы десктопного линукса. И если лет 5 назад это еще не так заметно было, то в последние года два это совсем уже из ряда вон выходящее и описывается одним словом: «безбожно тормозит». Разумеется мне эксперты вторят в один голос дескать у меня руки кривые. Возможно. Но что-то то мне подсказывало, что дело то не совсем в руках, ведь пользуюсь я линуксом то давненько и почему-то раньше, когда был менее опытным, все работало хорошо из коробки.

Итак, я консервативный технический аскет, мое домашнее железо сейчас это HDD (ни разу не покупал домой SSD), средненький проц и 8Gb RAM, видеокарта GTX 970. Это позволяет видеть проблемы сразу, собственно инженеры подтверждают этот тезис, см. https://news.ycombinator.com/item?id=41499633. Я начал искать, почему я наблюдаю отчетливо плохую работу домашней системы на современных дистрибутивах Linux. Первой проблемой стал snap. На таком железе всякие mint и ubuntu ушли в мусорку очень быстро, так как там используется оный, а это мазохизм, если у тебя не SSD и куча оперативы (да и вообще явный продукт копроэкономики). С flathub получше, но тоже нет. Эсперты на этом месте скажут «Ты что идиот? Купи SSD, HDD это прошлый век». У меня бывают долгие отсутствия или я могу попросту положить HDD на полку. С HDD я уверен что данные останутся, с SSD нет, см. статью о потере данных без питания у SSD https://www.ixbt.com/news/2025/04/20/dva-goda-bez-pitanija-issledovanie-podtverdilo-riski-dolgosrochnogo-hranenija-dannyh-na-ssd-bez-pitanija.html. А еще прекрасное, в век LLM SSD теперь ушатываются на раз https://4pda.to/2026/06/23/457958/nejroset_codex_okazalas_sposobna_ubit_ssd_menshe_chem_za_god/. Разумеется я не стал использовать всякие BTRFS, ZFS, XFS и подобные фс, которые уже давно заточены под SSD. Оставил ext4.

А дальше явных проблем я не нашел. Но как быть, если сетап окружения примерно такой же как раньше (использую браузер и IDE), а результат разный в разы? Ну не может же быть дело только в HDD, откуда бы такая деградация. Оказывается видимо может. Я нашел прекрасный тред https://www.linuxquestions.org/questions/slackware-14/disk-thrashing-on-5-15-x-kernels-but-not-on-4-4-x-or-4-19-x-kernels-4175713190/. В общем тенденция такова, что корпы очень сильно отравляют ядро в угоду корпоративным интересам (и корпоративного уровня железа), а домашнее железо игнорят или не сильно на него обращают внимание и с каждой свежей версией ядра на домашнем железе работа Linux деградирует. Видимо сейчас накопилось достаточно проблем, чтобы это стало визуально заметно. Что там напихали со времен 5.15 ядра, каких регресионных изменений, бог его знает, заниматься этим нет ни времени ни желания.

И я решил провести эксперимент, и поставли Debian 10 c бекпортами (ядро 4.19), форматнул с ext2(boot) и ext3, накатил Trinity Desktop https://wiki.trinitydesktop.org/Debian_Trinity_Repository_Installation_Instructions#TDE_R14.1.x_series и о чудо, все залетало! Браузер и IDE стали открываться мгновенно, сайты работают шустро, графическая оболочка откликается молниеносно, ощущения что я вернулся во времена Debian 4!

А что насчет старого софта спросите вы, а что, вы не умеет собирать свежий софт из исходников?…

Итого, сижу и наслаждаюсь старым добрым Linux в пятницу и в очередной раз читаю экспертов на сайтах: «У тебя руки кривые, у меня все работает на моей Ubuntu». Разумеется, они абсолютно правы. Всем добра :)

P.S. Жду клоунов в реакциях

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

nullb0t
()

Вкатится в devops

 ,

Здравствуйте! Работаю офисным сисадмином 12 лет. Могу в Linux немного, в вайб кодинг. Из последнего: Вайбкодил формы для мобилок для инвентаризации в zabbix. Получилось вполне годное решение. Вайбкодил утилиты для инфобеза(скрины экранов пользователей с передачей на сервак, проверка заблокирован экран или нет, открытое текущее окно и кейлогер и т.п.) все это с записью в zabbix В 2026 году поздно ли заходить в devops?

ssigko
()

Не могу поднять Silicom карточку(SFP+) на чипе интелла

 82599es, , , silicom

Вот и пришлось вернуться к сетям . Пишет что No_carrier и ethtool -m тоже дает laser bias нулевой

*-network:0
       description: Ethernet interface
       product: 82599ES 10-Gigabit SFI/SFP+ Network Connection
       vendor: Intel Corporation
       physical id: 0
       bus info: pci@0000:93:00.0
       logical name: enp199s0f0
       version: 01
       serial: 00:e0
       capacity: 10Gbit/s
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi msix pciexpress vpd bus_master cap_list ethernet physical fibre 10000bt-fd
       configuration: autonegotiation=off broadcast=yes driver=ixgbe driverversion=7.0.12-1-pve firmware=0x80000208 latency=0 link=no multicast=yes port=fibre
       resources: irq:668 memory:94100000-9411ffff memory:94140000-94143fff

ethtool -m enp199s0f0

        Identifier                                : 0x03 (SFP)
        Extended identifier                       : 0x04 (GBIC/SFP defined by 2-wire interface ID)
        Connector                                 : 0x07 (LC)
        Transceiver codes                         : 0x20 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        Transceiver type                          : 10G Ethernet: 10G Base-LR
        Encoding                                  : 0x03 (NRZ)
        BR Nominal                                : 10300MBd
        Rate identifier                           : 0x00 (unspecified)
        Length (SMF)                              : 10km
        Length (OM2)                              : 0m
        Length (OM1)                              : 0m
        Length (Copper or Active cable)           : 0m
        Length (OM3)                              : 0m
        Laser wavelength                          : 1310nm
        Vendor name                               : SOURCEPHOTONICS
        Vendor OUI                                : 00:1f:22
        Vendor PN                                 : SPP10ELRCDFF
        Vendor rev                                : 10
        Option values                             : 0x00 0x1a
        Option                                    : TX_DISABLE implemented
        BR margin max                             : 0%
        BR margin min                             : 0%
        Vendor SN                                 : L8H2
        Date code                                 : 210716
        Optical diagnostics support               : Yes
        Laser bias current                        : 0.000 mA
        Laser output power                        : 0.0000 mW / -inf dBm
        Receiver signal average optical power     : 0.0000 mW / -inf dBm
        Module temperature                        : 27.18 degrees C / 80.92 degrees F
        Module voltage                            : 3.3774 V
        Alarm/warning flags implemented           : Yes
        Laser bias current high alarm             : Off
        Laser bias current low alarm              : On
        Laser bias current high warning           : Off
        Laser bias current low warning            : On
        Laser output power high alarm             : Off
        Laser output power low alarm              : On
        Laser output power high warning           : Off
        Laser output power low warning            : On
        Module temperature high alarm             : Off
        Module temperature low alarm              : Off
        Module temperature high warning           : Off
        Module temperature low warning            : Off
        Module voltage high alarm                 : Off
        Module voltage low alarm                  : Off
        Module voltage high warning               : Off
        Module voltage low warning                : Off
        Laser rx power high alarm                 : Off
        Laser rx power low alarm                  : On
        Laser rx power high warning               : Off
        Laser rx power low warning                : On
        Laser bias current high alarm threshold   : 95.000 mA
        Laser bias current low alarm threshold    : 3.000 mA
        Laser bias current high warning threshold : 90.000 mA
        Laser bias current low warning threshold  : 5.000 mA
        Laser output power high alarm threshold   : 2.2387 mW / 3.50 dBm
        Laser output power low alarm threshold    : 0.0759 mW / -11.20 dBm
        Laser output power high warning threshold : 1.7783 mW / 2.50 dBm
        Laser output power low warning threshold  : 0.0955 mW / -10.20 dBm
        Module temperature high alarm threshold   : 80.00 degrees C / 176.00 degrees F
        Module temperature low alarm threshold    : -15.00 degrees C / 5.00 degrees F
        Module temperature high warning threshold : 75.00 degrees C / 167.00 degrees F
        Module temperature low warning threshold  : -10.00 degrees C / 14.00 degrees F
        Module voltage high alarm threshold       : 3.6000 V
        Module voltage low alarm threshold        : 3.0000 V
        Module voltage high warning threshold     : 3.5500 V
        Module voltage low warning threshold      : 3.0500 V
        Laser rx power high alarm threshold       : 2.2387 mW / 3.50 dBm
        Laser rx power low alarm threshold        : 0.0182 mW / -17.40 dBm
        Laser rx power high warning threshold     : 1.7783 mW / 2.50 dBm
        Laser rx power low warning threshold      : 0.0229 mW / -16.40 dBm

P.S. ip link up и down делал, в dmesg ничего связанного с bias или power или sfp нету (

pinachet
()

Зависимость скорости работы циклов от выравнивания кода

 , ,

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

00000000000016b9 <.bL11>:
    16b9:       48 8b 04 ce             mov    rax,QWORD PTR [rsi+rcx*8]
    16bd:       48 19 04 cf             sbb    QWORD PTR [rdi+rcx*8],rax
    16c1:       48 ff c1                inc    rcx
    16c4:       75 f3                   jne    16b9 <.bL11>
    16c6:       48 83 1f 00             sbb    QWORD PTR [rdi],0x0
^ вот так всё работает с «обычной» скоростью. А так (всё сдвинуто на 1 байт вниз) - на 30-35% медленнее:
00000000000016ba <.bL11>:
    16ba:       48 8b 04 ce             mov    rax,QWORD PTR [rsi+rcx*8]
    16be:       48 19 04 cf             sbb    QWORD PTR [rdi+rcx*8],rax
    16c2:       48 ff c1                inc    rcx
    16c5:       75 f3                   jne    16ba <.bL11>
    16c7:       48 83 1f 00             sbb    QWORD PTR [rdi],0x0
двигаем дальше, всё медленно, вплоть до сюда:
00000000000016c5 <.bL11>:
    16c5:       48 8b 04 ce             mov    rax,QWORD PTR [rsi+rcx*8]
    16c9:       48 19 04 cf             sbb    QWORD PTR [rdi+rcx*8],rax
    16cd:       48 ff c1                inc    rcx
    16d0:       75 f3                   jne    16c5 <.bL11>
    16d2:       48 83 1f 00             sbb    QWORD PTR [rdi],0x0
Если сдвинуть ещё на 1 байт вниз - лаги исчезают.

Собственно, если отметить первый лагающий вариант (где .bL11=0x16BA) за точку отсчёта, то итоги такие:

-7..-1 - хорошая скорость
0..11 - замедление на 30-35%
12..15 - хорошая скорость
16..23 - замедление на 15-20%
24..31 - хорошая скорость
32..32+11 - замедление на 30-35%
32+12..32+31 - хорошая скорость
Именно так, 30-35% замедление циклично повторяется через 32 байта (и дальше тоже повторяется), а вот второе замедление, сдвинутое на 16 байт от первого, и меньше по величине, и короче по байтам, и отсутствует во втором цикле. Более того, оно отсутствует и при сдвиге на 64+16, и 96+16, и 128+16, но опять появляется на 256+16 (на 512+16 его опять нет, промежуточные уже не проверял) - странно. А ещё оно появляется/исчезает в зависимости от изменений в других линкуемых модулей. Например, простое дописывание к линкеру -lm (без изменений исходников) может на него повлиять. 30-35% же замедление присутствует стабильно на своём месте.

Ещё я проверил что будет если вставлять NOP-ы внутрь цикла. Так вот, добавление например 2 NOP-ов приводит к тому, что лаги начинаются на 2 байта раньше (т.е. при той же позиции JNE как и раньше начинались), а вот заканчиваются на том же месте как раньше, т.е. при той же позиции метки (т.е. лаги от -2 до 11). Вторая зона лагов стала какой-то размазанной с усилившимся пиком в самом начале, а так же она появилась таки во втором цикле на 32+16-2.

сдвиг   время выполнения бенчмарка
-6       511.9 +- 14.8
-5       515.2 +- 12.3
-4       511.6 +- 8.9
-3       507.3 +- 7.2
-2       683.0 +- 9.2    <-- первый круг
-1       672.1 +- 12.3
0        670.5 +- 8.6
1        674.8 +- 17.1
2        669.4 +- 7.4
3        672.5 +- 11.0
4        675.0 +- 9.1
5        669.9 +- 8.9
6        675.5 +- 8.8
7        679.1 +- 7.6
8        696.9 +- 23.6
9        691.6 +- 14.8
10       680.5 +- 9.5
11       684.0 +- 9.0
12       516.5 +- 7.9
13       517.2 +- 11.6
14       792.3 +- 36.8   <--
15       605.4 +- 37.5
16       575.8 +- 24.2
17       566.0 +- 16.0
18       555.8 +- 21.6
19       562.0 +- 14.5
20       555.7 +- 8.7
21       537.2 +- 10.7
22       534.4 +- 11.2
23       549.9 +- 14.6
24       522.1 +- 10.6
25       517.8 +- 9.5
26       515.5 +- 8.4
27       517.0 +- 4.2
28       512.2 +- 7.4
29       516.8 +- 8.6
30       680.3 +- 9.2  <-- второй круг
31       675.0 +- 19.7
32       671.7 +- 8.9
33       669.2 +- 9.1
34       668.3 +- 10.8
35       667.0 +- 9.6
36       669.0 +- 8.9
37       671.0 +- 9.5
38       670.6 +- 10.8
39       676.5 +- 10.1
40       681.0 +- 10.5
41       682.1 +- 12.7
42       693.5 +- 16.7
43       689.8 +- 13.5
44       512.5 +- 4.9
45       516.9 +- 7.1
46       685.5 +- 12.3   <--
47       515.2 +- 7.6
48       519.0 +- 8.7
49       513.2 +- 7.9
50       512.4 +- 6.2
51       510.8 +- 4.7
52       510.3 +- 7.3
53       507.4 +- 7.0
54       509.2 +- 6.9

Вообще мне казалось что для более быстрой работы кода надо выравнивать начала циклов по 16-байтным границам, но тут ничего подобного незаметно, все адреса не пойми какие. Есть замеченная закономерность: когда JNE доползает до адреса 0x16c5 - лаги начинаются, когда до него доползает и начало цикла - заканчиваются. Но JNE двухбайтовый, т.е. когда он на 0x16c4 то второй его байт на 0x16c5 и лагов ещё нет.

Есть ли шанс объяснить почему так? А то мне совсем не нравится что код рандомно теряет треть скорости на ровном месте, тут я заметил, где-то не замечу, да и на разных процах это может быть по-разному, что делать?

---------------

Почти итог: адреса в дампах выше считал от начала объектного модуля, оказывается модуль автоматически (если явно не указать) по 16-байт границе не выравнивается, и адреса в бинарнике уплыли. Реальное замедление получается если тело цикла пересекает 32-байт границу (кроме случая когда за неё вылезает только один байт последней инструкции, почему-то), выглядит логично.

firkax
()

Проброс портов SSH

 , ,

Вопрос знатокам:

У меня есть SSH-сервер на локальной машине, на которую проброшен порт с удалённой машины: ssh -R port:localhost:port user@ip.

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

Спасибо.

PunkPerson
()

Отчёт по надёжности HDD от облака

 , ,

Сабж


Служба облачного хранения данных Backblaze опубликовала статистику отказов жёстких дисков по итогам IV квартала, всего 2025 года, а также за весь срок службы соответствующих моделей.

При составлении отчёта за IV квартал из парка накопителей исключили некоторое число экземпляров и оставили в статистике данные по 337 192 жёстким дискам. За отчётный период Backblaze ввела в эксплуатацию две новые модели: 112 экземпляров Seagate ST16000NM000J на 16 Тбайт и 1201 экземпляр WDC WUH722626ALE6L4 на 26 Тбайт — первый жёсткий диск такого объёма.

В течение квартала модели HGST HMS5C4040BLE640 (4 Тбайт), Seagate ST12000NM000J (12 Тбайт) и Seagate ST16000NM000J (16 Тбайт) продемонстрировали всего по одному отказу; вышел также из строя один вышеупомянутый WDC на 26 Тбайт — в первый же квартал эксплуатации. Модели Seagate ST8000NM000A (8 Тбайт) и Seagate ST16000NM002J (16 Тбайт) не вышли из строя ни разу. Наименее надёжными оказались HGST HUH728080ALE600 (8 Тбайт) со среднегодовым уровнем отказов (AFR) 10,29 %, Seagate ST10000NM0086 (10 Тбайт) с 5,23 % и Toshiba MG08ACA16TEY (16 Тбайт) с 4,14 %.

Тревожный двузначный показатель отказов HGST HUH728080ALE600 вынудил компанию провести краткое расследование. Температурный фактор эксперты исключили, и наиболее вероятной причиной отказов назвали фактор вибрации. В Backblaze приняли решение начать постепенный вывод модели из эксплуатации и не принимать дополнительных мер по исправлению ситуации. Жёсткие диски Toshiba MG08ACA16TEY демонстрировали аномально высокий уровень отказов в предыдущем квартале, но он был связан не с фактическими неисправностями, а с обновлением прошивки, которое в Backblaze были вынуждены установить. В последний отчётный период жёсткий диск снова демонстрировал AFR выше, чем по всему парку накопителей, но обозначил и тенденцию к снижению.

В годовой отчёт Backblaze включила 344 196 экземпляров жёстких дисков — всего 30 моделей. Общегодовой показатель AFR по всему парку в 2025 году составил 1,36 % по сравнению с 1,55 %, которые были в 2024 году. Квартальные результаты за последние 12 месяце колебались, но результат за весь год отражает ощутимое улучшение. Ни одна модель не показала нулевого числа отказов за год, но у некоторых моделей наблюдалось очень низкое их число, в среднем менее двух отказов за квартал. Это, в частности, HGST HMS5C4040BLE640 (4 Тбайт, 5 отказов), Seagate ST12000NM000J (12 Тбайт, 4), Seagate ST14000NM000J (14 Тбайт, 7), Seagate ST16000NM002J (16 Тбайт, 1), Toshiba MG09ACA16TE (16 Тбайт, 3), WDC WUH722626ALE6L4 (26 Тбайт, 1).

Компания также сравнила среднегодовые показатели отказов за 2023, 2024 и 2025 годы. В сравнение вошли модели, которых на 31 декабря 2025 года было 250 единиц в эксплуатации, и которые наработали в 2025 году более 50 000 дней. В 2023 году показатель AFR был 1,70 %, в 2024 году — 1,57 %, а в 2025 году снизился до 1,36 %, вернувшись к уровню 2022 года, когда он был 1,37 %. По итогам квартала 25,13 % накопителей имели объём до 12 Тбайт; 52,06 % — от 14 до 16 Тбайт; и 22,81 % — более 20 Тбайт.

Ещё одну сводку составили на основе показателя AFR за весь срок службы моделей в длительной эксплуатации. В статистику включили жёсткие диски, которых по состоянию на 31 декабря 2025 года было более 500 единиц при наработке более 100 000 дней. Общий показатель к настоящему времени составил 1,30 %, и он остаётся относительно стабильным в течение нескольких отчётных периодов. Несмотря на квартальные колебания и изменения модельного ряда, долгосрочная надёжность парка накопителей сохраняется в узком диапазоне.


Как говорится, за что купил…

tiinn
()

Можно ли дергать crow api из других (собственных) потоков?

 

Привет, заюзал crow для http сервера. Вопрос, который я не понял - а можно ли дергать crow апи из других (своих) потоков? Ведь он работает на базе asio, а там свой event_loop, thread_pool и всё такое, и надо помещать задание в очередь asio, которое будет выполнено его потоками. Сомнения были сразу, но после того как увидел Crow::tick(), которое даёт возможность помещать функцию в очередь на выполнение, задумался конкретно. Пример набросал, отдельный мой поток играет в пинг-понг с websocket коннектами и закрывает мертвые. Так можно?

std::mutex g_ws_mtx;
std::unordered_map<crow::websocket::connection*, steady_clock_t::time_point>
   g_ws_connections;


void ws_ping_thread_fn()
{
   while (true) {
      std::this_thread::sleep_for(...);
      if (true) {
         std::lock_guard lck(g_ws_mtx);
         for (auto i : g_ws_connections) {
            ...
            if (last time > threshold)
               // close connection
            else
               i.first->send_ping(...);
            ...
         }
      }
   }
}

int main() {
   crow::SimpleApp app;
   ...
   CROW_WEBSOCKET_ROUTE(app, "/ws")
      .onopen([&](crow::websocket::connection &conn) {
            std::lock_guard lck(g_ws_mtx);
         auto res = g_ws_connections.insert({&conn, steady_clock_t::now()});
      })
      .onclose([&](crow::websocket::connection &conn,
            const std::string& reason, uint16_t) {
         std::lock_guard lck(g_ws_mtx);
         auto res = g_ws_connections.erase(&conn);
      })
      .onmessage([&](crow::websocket::connection &conn,
            const std::string& data,
            bool is_binary) {
         std::lock_guard lck(g_ws_mtx);
         auto e = g_ws_connections.find(&conn);
         e->second = steady_clock_t::now();
      });

   std::thread ws_ping_thread(ws_ping_thread_fn);
   app.port(g_server_port).bindaddr("127.0.0.1").multithreaded().run();
   ws_ping_thread.join();
}

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

kvpfs_2
()

Сайты с таблицами системных вызовов

 

  1. https://syscalls.mebeim.net – всегда свежие данные; есть сигнатура вызова; JSON для отдельных версий ядра.

  2. https://syscalls.defoy.tech – еженедельное обновление; syscalls.tar.gz всех CSV.

  3. https://x64.syscall.sh – только arm, arm64, x86; есть сигнатура вызова; есть API сайта.

  4. https://filippo.io/linux-syscall-table – Linux 6.16-rc1; нечёткий поиск по имени; исходники этого HTML на Go.

Enjoy!

dataman
()

Как найти утечку?

 ,

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

Что именно произошло? Было два случая.

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

  2. Мы собираемся поехать бухать в Териберку. Зафоткать северное сияние, и вообще делать нам нечего, по всей видимости. Мы вели небольшую часть обсужений в чате ТГ и на приватном инстансе nextcloud. Через несколько дней мне позвонили гиды по Териберке. С таким уверенным голосом, как будто мне это 100% нужно.

Что самое любопытное, во всех обсуждениях я наблюдатель, т.е. не писал лично ничего.

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

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

Pierre_Dolle
()

Как у вас, программистов, зарождаются проекты?

 , ,

Все, что меня интересует это какие идеи вами двигают, автоматические считалки или основательные программные продукты такие как Microsoft office.

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

saufesma
()

Nginx + Lua вернуть JSON, как?

 ,

Добрый день Подскажите пожалуйста, как вернуть JSON в response? Есть сам JSON

{"1_sign_level":"0200200","2_sign_level":"0200300"}
Пробовал ngx.say и cjson.encodeНо ничего не получается. Помогите, пожалуйста, с кодом.

darksmoke
()

Инкрементальное и дифференциальное резервное копирование виртуальной машины QEMU/KVM

 , , ,

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

Статья является «конспектом» документации QEMU. Я потратил некоторое время на изучение этого вопроса и проверки. Выкладываю – может кому-нибудь пригодится.

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

smola0609
()

OpenVZ7, исчезло место в контейнере.

 ,

/# du -sch /*
11M     /bin
4.0K    /boot
20K     /dev
16M     /etc
356K    /home
43M     /lib
4.0K    /lib64
16K     /lost+found
4.0K    /media
4.0K    /mnt
4.0K    /opt
0       /proc
23G     /root
1.2M    /run
5.7M    /sbin
4.0K    /srv
0       /sys
52K     /tmp
5.7G    /usr
926M    /var
30G     total

Пишет что 23G в root. Проверяем

# du -sch /root/*
90M     /root/1
90M     total
из хоста
# df -k
Filesystem             1K-blocks       Used Available Use% Mounted on
/dev/ploop11307p1       30830500   30495960         0 100% /vz/root/243
# du -cms /* | sort -rn
29739   total
22996   /root
5742    /usr
926     /var
43      /lib
16      /etc
11      /bin
6       /sbin
2       /run
1       /tmp
1       /srv
1       /opt
1       /mnt
1       /media
1       /lost+found
1       /lib64
1       /home
1       /dev
1       /boot
0       /sys
0       /proc
# du -cms /root/* | sort -rn
90      total
90      /root/1
Компилил вчера go в виртуалке. Не дождался, лег спать, а сутра такое. )) и go недокомпилился, ругалось на нехватку места на диске
В норме обычно занято не более 22-25%.
Виртуалку ребутал
почему /root занял, если компилил в /usr/local/src
«vacuum» для ploop диска нужен?

Vlad-76
()

Как измерять системные показатели в реальном времени?

 , ,

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

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

Например, диспетчер задач в винде тоже не все показатели обновляет в реальном времени, на моей памяти только wireshark в реальном времени показывает данные. Ещё в разных измерительных программах для отслеживания железа на винде есть такая штука как «частота опроса».

Reptile
()

Как в системе CentOS 6.9 обновить компилятор gcc?

 ,

Хотел обновить софт, а его разработчики переехали на новое окружение разработки, в т.ч. на новый компилятор и их софт со старым компилятором стал не совместим
https://bird.network.cz/pipermail/bird-users/2019-August/013642.html

Система установлена полностью из репов
в подключенных репах видно вот такой компилятор
mingw64-gcc-c++.x86_64 4.9.2-1.el6 epel
это эквивалент установленного gcc-4.4.7-18.el6.x86_64 ?
Как выйти из ситуации чтобы малой кровью решить задачу компиляции софта новым компилятором.
В системе есть еще модули, которые собирались нормально со старым компилятором и ломать это не нужно.

ядро в системе 4.12.0-1.el6.elrepo.x86_64

Vlad-76
()

Советы про разработке среднего приложения

 , ,

Допустим у меня был опыт когда нужно было разработать небольшой плагин.

Проблема возникла тогда, когда заказчик, начала просить, добавить то, добавить это, потом, в какой-то момент начинаешь понимать, что уследить за всем, становиться достаточно сложно. Так как работа приложения имеет административную часть, которая начала переплетаться с пользовательской в каких-то моментах.

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

nixbrain
()