• Как правильно использовать memcpy внутри __device__ функции CUDA kernel?

    @Decker Автор вопроса
    При этом можно удивиться, если вставить for (i=0; i<16; i++) tmp[i] = tmp[i]; перед memcpy(t, tmp, 16);, т.е. использовать вот такое тело функции:

    __device__ void unpacklo32(unsigned char *t, const unsigned char *a, const unsigned char *b) 
    {
        int i;
        unsigned char tmp[16];
    
        memcpy(tmp, a, 4);
        memcpy(tmp + 4, b, 4);
        memcpy(tmp + 8, a + 4, 4);
        memcpy(tmp + 12, b + 4, 4);
        for (i=0; i<16; i++) tmp[i] = tmp[i]; 
        memcpy(t, tmp, 16);
    }


    То результат получается корректным:

    T: 00000000000000000000000000000000
    A: a0a1a2a3a4a5a6a7a8a9aaabacadaeaf
    B: b0b1b2b3b4b5b6b7b8b9babbbcbdbebf
    T: a0a1a2a3b0b1b2b3a4a5a6a7b4b5b6b7
    A: a0a1a2a3a4a5a6a7a8a9aaabacadaeaf
    B: b0b1b2b3b4b5b6b7b8b9babbbcbdbebf


    Вопрос "по-че-му" остается в силе ...
  • Как получить stdout уже запущенного процесса?

    @Decker Автор вопроса
    Простой пример, пишем программу выводящую в stdout аргумент с инкрементом:
    #include <stdio.h>
    #include <stdbool.h>
    #include <unistd.h>
    
    void main()
    {
    
    int i = 0;
    while (true) {
    	printf("%d\n",i);
    	i++;
    	sleep(1);
    }
    
    }

    Собираем, запускаем, в консоли в которой она запущена все выводится. Теперь мы хотим прочитать то что она выводит в stdout из другой консоли:
    tail -f /proc/$(pidof test)/fd/1 - почему-то молчит.
  • Как получить stdout уже запущенного процесса?

    @Decker Автор вопроса
    Да вот сам удивляюсь ... вывод в /proc/$(pidof process)/fd/1 работает. Т.е. например открываем две консоли локально, в одной запускаем process &, в другой делаем echo "Test" > /proc/$(pidof process)/fd/1. В результате видим строчку "Test" в первой консоли. А вот tail -f /proc/$(pidof process)/fd/1 во второй консоли ничего не выводит, т.е. почему-то я не вижу того что отображает в stdout сам process.
  • Как правильно установить Ubuntu на RAID1 в SuperServer 1028R-WTRT?

    @Decker Автор вопроса
    Борис Сёмов, а есть ли вообще смысл в разделе swap, если у сервера 96 Gb RAM? Какой размер целесообразно задать swap'у? Раньше встречались рекомендации, что, мол, swap должен быть как двойной объем RAM, однако, там же были пометки, что в случае большого количества RAM наличие swap может даже повредить. Сам установщик Ubuntu создает по-умолчанию swap в 1 Gb.

    И последний вопрос, есть ли существенная разница между swap'ом в отдельном разделе и вынесением swap'а просто в файл?

    p.s. Заранее спасибо за ответы и комментарии.
  • Как правильно установить Ubuntu на RAID1 в SuperServer 1028R-WTRT?

    @Decker Автор вопроса
    Спасибо. То что лучше использовать софтовый RAID через mdamd - я уже понял и склоняюсь именно к этому варианту. А какие-нибудь рекомендации по разметке диска будут? Приведенная в решении 2 разметка рассматривается как предпочтительная? Меня в ней "смущает" то что фактически на RAID'е находится только ext4 (/) а ESP и swap "отдельно", каждый на своем диске. При этом по факту, естественно используется только одна из копий. Попытка сделать один раздел linux-raid на каждом из дисков и уже в этом RAID'е все три раздела - ESP, ext4 (/) и swap приводит либо к невозможности установить grub, либо к проблемам с загрузкой (в зависимости от того используется ли UEFI или Legacy BIOS).

    В варианте с UEFI на RAID ставятся все три раздела, но потом оттуда ничего не грузится, видимо потому что EFI ничего не знает про linux-raid разделы и ищет ESP раздел (внутри linux-raid он его естественно прочитать не может), а в варианте с Legacy BIOS - grub не устанавливается с ошибкой приведенной на скриншоте из поста.

    p.s. Вообщем если бы кто-то дал рекомендации по разметке, применительно к софтовому RAID'у и SuperMicro'овской платформе - было бы просто замечательно. В любом случае всем спасибо за комментарии и участие.
  • Telegram бот на PHP. Как сохранять состояние ответа пользователя?

    @Decker Автор вопроса
    Сергей Соколов, спасибо за ответ. Сейчас как раз читаю про Inline Keyboard и уже попробовал набросать простенький пример (правда анализировать callback_data еще не пробовал, но общий смысл я уловил, что после того как пользователь нажимает inline кнопку от сервера приходит CallbackQuery с полем data). Но это все хорошо в кейсах с выбором только какого-то определенного параметра.

    То что я хочу реализовать, скорее напоминает обычную web-форму с param1, param2, param3 и кнопкой Submit. В случае если нам нужно просто обработать введенные данные и вывести результат пользователю - хранить где-либо нам их не обязательно, достаточно того чтобы они попали в скрипт обработчик. Проблема с ботом Telegram заключается в том, что как раз "единого submit'а" то и нет, т.е. данные в любом случае придут в трех разных сообщениях и нам действительно как-то нужно сохранять state на сервера обработчика.

    С memcached к сожалению никогда не работал, о redis весьма посредственное представление (т.е. знаю что такое есть и для чего оно, но на практике никогда использовал его). К тому же задача осложняется еще и тем, что речь в данном случае идет о дешевом shared-хостинге, на котором не то что redis'ы, а даже лишние модули к PHP не подключить.

    Какой на ваш взгляд в данной ситуации будет метод хранения state'ов? Может их в json запихивать и в текстовые файлы через file_put_contents класть или кто-нибудь посоветует более "гуманный" способ?
  • Проблема в настройках роутера?

    @Decker
    AndrewSokorenko: какое значение DefaultTTL вы устанавливали на вашем ПК?
  • Mikrotik. L2TP. Возможно ли увеличить производительность?

    @Decker Автор вопроса
    Выражаясь подобными терминами он тоже "прокачивает и не пыхтит" )) В данном случае он используется в конфигурации с балансировкой нагрузки совместно с другим провайдером для агрегации двух каналов по 100 Mbit для "торрентокачалки". Однако ~200 Mbit выжать из него не получается, т.к. L2TP + большой pps в торрентах дают нагрузку на CPU. Ну а по-поводу правил - оптимизировать там нечего, здесь и так необходимый минимум.

    p.s. Спасибо за ответ.
  • Как реализовать обход блокировки по DNS на уровне роутера?

    @Decker
    Да, и еще ... повторюсь, у Билайна блокировка реализована не на уровне DNS, поэтому использование альтернативных DNS серверов где бы то ни было ничего не даст.
  • Mikrotik. L2TP. Возможно ли увеличить производительность?

    @Decker Автор вопроса
    Decker: Естественно что 600 MHz CPU не справляется с подобной нагрузкой, но все же интересно, насколько fastpath для L2TP способен ее снизить.
  • Mikrotik. L2TP. Возможно ли увеличить производительность?

    @Decker Автор вопроса
    Спасибо за ответ. Но интересует именно тест максимальной загрузки канала с L2TP и включенным / работающим fastpath - насколько будет загружен CPU. Тут просто более сложная схема, пытаюсь настроить балансировку нагрузки между двумя каналами (PPPoE, L2TP, т.е. два 100 Mbit'ных канала от разных провайдеров) ... цель - получить максимальную пропускную способность для скачивания торрентов, ну и конечно понять для себя какие-то моменты в настройке. В принципе все уже работает, траффик делится между каналами, но максимальная пропускная способность в итоге получается порядка 130 Mbit вместо 200, т.к. L2TP "сжирает" 100% процессорного времени. Сегодня попробую поставить еще одну железку для поднятия L2TP перед Mikrotik'ом, т.е. чтобы Miktrotik получал один канал через IPoE, а другой через PPPoE - посмотрю как будет в этом случае.
  • Mikrotik. Балансировка нагрузки. PPPoE + L2TP, как настроить?

    @Decker Автор вопроса
    Maxlinus. Remote Address каждый раз разный, т.е. указать его в PPP -> Profiles не получится. Так или иначе мне удалось настроить желаемое (чуть позже приведу здесь конфигурацию в качестве ответа себе же). Однако утилизировать канал на 100% все равно не получилось. При использовании ECMP получается что ~50 Mbit идет через L2TP от Билайн и ~70 Mbit через PPPoE от Ростелекома. При этом все упирается в нагрузку на CPU Mikrotik'а, использование L2TP само по себе загружает CPU при максимальной нагрузке на канал под 100%. В итоге, при имеющемся оборудовании и двух каналах по 100 Mbit удается выжать максимум 130 Mbit на Download в торрентах.

    В связи с чем вопрос ... если говорить о Mikrotik'ах - есть ли какие-то модели с бОльшим запасом по процессорной мощности, например, чтобы загрузить на 100% два L2TP соединения по 100 Mbit?
  • Как корректно настроить SIP (Mango Office) + MikroTik + 4G LTE USB (MTS) ?

    @Decker
    Подтверждаю. По результатам тестов - ZTE MF823, ZTE MF823D, Мегафон М100-3, которые по-умолчанию идут с HiLink прошивкой, некорректно работают с SIP ALG. Возможно это касается и некоторых других ZTE'шных модемов. Выход - использование Huawei'евского модема или любого другого девайса со Stick прошивкой, т.е. чтобы Mikrotik сам поднимал соединение, как ppp-out.
  • PHP. Умножение 6-ти float, переместительный закон умножения не работает?

    @Decker Автор вопроса
    Правильный результат, который можно получить и в стандартном калькуляторе (calc.exe) в Windows - 67275470345782378680. Все верно.
  • PHP. Умножение 6-ти float, переместительный закон умножения не работает?

    @Decker Автор вопроса
    Интерес не в получении правильного результата, а в получении результата 67275470345782386688 с использованием другого языка программирования. Т.е. смысл вопроса - понять, как PHP считает в этом случае (к слову, первое выражение на Java считается точно так же). Про bcmath, естественно, в курсе. В любом случае спасибо за ответ, но интересно именно "как получить первый результат" и порядок, как считает PHP ...
  • PHP. Умножение 6-ти float, переместительный закон умножения не работает?

    @Decker Автор вопроса
    Вопрос задан в связи с тем, что мне необходимо повторить первый результат на другом ЯП ... к примеру, в Java он повторяем, т.е. при первом порядке получается именно 67275470345782386688, а вот в Delphi такая же запись выражения дает 67275470345782378496.
  • Отправка почтового сообщения на PHP в отдельном "потоке". Методы реализации?

    @Decker Автор вопроса
    Я просто "в поисках истины" ... пытаюсь понять как можно сделать лучше и проще. Вариант с очередью сообщений мне кажется, может и ошибочно, несколько навороченным для данной задачи. Если в send_message(...) помещать задание на отправку email в какую-нибудь таблицу БД, то понадобится дополнительный скрипт рассылки заданий, работающий, например, по cron'у ... а мне бы хотелось реализацию на основе одного скрипта. Т.е., например, есть у нас скрипт main.php, который запускается в определенных случаях и возвращает результат, хочется чтобы он выполнялся за определенное фиксированное время, плюс, именно из него инициировалась отправка сообщения. Не через 5 минут после его выполнения, не по расписанию, а практически сразу. Не знаю, понятно ли я объяснил ... Вообщем в итоге пока я пришел к выводу что надо посмотреть как это реализовано в популярных CMS ... например, та же отсылка email при регистрации пользователя и сделать аналогично. На выходных надо будет найти время и глянуть ...
  • Отправка почтового сообщения на PHP в отдельном "потоке". Методы реализации?

    @Decker Автор вопроса
    sunrails, предложенный вами вариант безусловно интересен. Но нужна также реализации системы очередей и т.п. Для реализации множества различных задач использование очереди, наверное, оптимально. Каждой задаче соответствует свой обработчик и т.п. Но у нас задача планируется всего одна, а именно отправка почты. Понятно, что можно перейти от общего к частному, например, рассмотреть случай помещения в очередь нескольких экземпляров задания отправки почты и т.п. Но может быть есть более конкретные решения, без реализации "абстракций" вроде очереди сообщений и т.п.?

    p.s. За ответ безусловно спасибо, интересно.
  • Как настроить Mikrotik + OpenWRT в MetaRouter + TOR?

    @Decker Автор вопроса
    Как выяснилось в TL-MR3020 всего 4 Mb Flash, т.е. установив туда OpenWRT места под дополнительные пакеты не остается совсем (т.е. Tor не устанавливается, т.к. не хватает места под lib'ы). Можно расширить память за счет использования USB Flash, в интернете есть инструкции, как примонтиовать флешку к RootFS, но чем дальше, тем данное решение получается "чересчур кастомным". Изначально была идея сгородить все это на Metarouter'е, теперь вот TL-MR3020 появился ... Вообщем если соберусь с силами и временем на реализацию, то отпишусь. Если не соберусь и в качестве ответа здесь ничего не появится - значит я банально передумал ;)
  • Как настроить Mikrotik + OpenWRT в MetaRouter + TOR?

    @Decker Автор вопроса
    Сейчас ради эксперимента взял TP-LINK TL-MR3020, попробую залить на него OpenWRT, запитать его от тика, через USB и попробовать уже все то же самое не в MetaRouter, а в нем. По результатам наверное отпишусь, ну и, если получится, статья по настройке тоже будет.