• Context switch per second (Linux) 1.3млн это много или мало?

    jcmvbkbc
    @jcmvbkbc
    И да, context switch — это достаточно тяжелая операция…Первое, что приходит в голову — излишнее число прерываний от сетевой карты.

    edo1h, смена контекста и прерывания связаны друг с другом в единственном случае -- когда драйвер устройства вызывающего прерывание хочет обрабатывать его в отдельном потоке. Для сетевых карт это скорее исключение чем правило. В остальных случаях прямой связи нет, можно получить миллион прерываний и ни одного переключения контекста.
    Написано
  • Context switch per second (Linux) 1.3млн это много или мало?

    jcmvbkbc
    @jcmvbkbc
    Если запрос до него вообще не дошел

    asmelnik, то узкое место в сети. Я не вижу, как ещё он может не дойти. Но ты говоришь, что с сетью есть запас.
    Написано
  • Context switch per second (Linux) 1.3млн это много или мало?

    jcmvbkbc
    @jcmvbkbc
    откуда берется этот "потолок"

    я ничего не знаю про nginx, но логика подсказывает, что если есть отказы в обслуживании, то каким-то образом он сам должен решить, что вот конкретно этому клиенту нужно отказать. Может это среднее время обработки запроса, может это cpu load average, может это связано с невозможностью открыть новый файл или запустить новый процесс, может что-то ещё. Я бы смотрел в это место сначала.
    Написано
  • Context switch per second (Linux) 1.3млн это много или мало?

    jcmvbkbc
    @jcmvbkbc
    что мешает ему подрасти еще немножко :)

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

    jcmvbkbc
    @jcmvbkbc
    своп может размещаться в т.ч. по сети (nfs например

    может, но конкретно с NFS делать этого не стоит -- проблем огребёшь больше чем решишь.
    Написано
  • Почему невозможно получить доступ к каталогу?

    jcmvbkbc
    @jcmvbkbc
    MuffinLover, с твоими изменениями mountpoint больше не используется кодом вообще, а то что раньше было mountpoint стало basedir. Т.е. basedir для твоего кода -- это mountpoint для libfuse.
    Написано
  • Почему невозможно получить доступ к каталогу?

    jcmvbkbc
    @jcmvbkbc
    MuffinLover, репа с кодом была на коммите 991f6b833bba33d6e2d60f2bed3d56e9a77e85d1 когда ты задавал вопрос, там нет никакого basedir. Если ты решил добавить basedir, нужно это сделать так, чтобы он не указывал в то же место, что и mountpoint.
    Написано
  • Почему невозможно получить доступ к каталогу?

    jcmvbkbc
    @jcmvbkbc
    Сделай замену типа того:
    -static const char *mountpoint = NULL;
    +static char mountpoint[PATH_MAX];
    …
    -mountpoint = argv[1];
    +strcpy(mountpoint, argv[1]);
    +strcat(mountpoint, "1");

    создай два каталога, mntpoint и mntpoint1, и будет тебе счастье без рекурсии.
    Написано
  • Почему невозможно получить доступ к каталогу?

    jcmvbkbc
    @jcmvbkbc
    MuffinLover, ну я же написал, бесконечная рекурсия. Как ты думаешь она может выражаться?
    Написано
  • Как заставить digispark вводить alt-коды?

    jcmvbkbc
    @jcmvbkbc
    Ridalit, если ты внимательно посмотришь в приведённый по твоей ссылке пример:
    DigiKeyboard.sendKeyStroke(KEY_N, MOD_CONTROL_LEFT|MOD_SHIFT_LEFT);

    то увидишь, что это клавиши-модификаторы могут быть объединены через побитовое или, а не клавиши основного набора. Это имеет смысл, потому что модификаторы определены как непересекающиеся биты, в отличие от основных.
    Написано
  • Как заставить digispark вводить alt-коды?

    jcmvbkbc
    @jcmvbkbc
    функция digikeyboard.sendKeyStroke в которую я передаю (MOF_ALT_LEFT, 94 | 95) не выводит символ

    94 | 95 == 95, чего ты ожидал?
    Написано
  • Возможно ли как-то использовать обычную функцию заместо макро-функции?

    jcmvbkbc
    @jcmvbkbc
    Я смотрел дефайны этих портов, там просто хекс-значение, без какого либо каста к volatile ссылке, видимо это делается непосредственно компилятором

    djEban, Нет, не делается. Здесь нет никакой магии, всё должно быть написано явно. Ты не привёл полный компилируемый код и опции компилятора, поэтому я напишу его сам и возьму опции на своё усмотрение. Смотри, что получается после препроцессора и после компилятора если взять atmega88p в качестве таргета. А если в опции добавить -dM то можно увидеть как определен PORTB:
    #define PORTB _SFR_IO8(0x05)
    …
    #define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + __SFR_OFFSET)
    …
    #define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr))
    Написано
  • В чем возникает проблема при работе с драйвером порта - UART4?

    jcmvbkbc
    @jcmvbkbc
    Вызов serial8250_em485_stop_tx из serial8250_console_write не проверял.

    Проверь пожалуйста? Моя теория: добавление dev_err приводит к вызову этой функции, которая должна и так вызываться из обработчика прерывания, но почему-то не вызывается, возможно из-за гонки между прерыванием и окончанием TX DMA.

    Отключили опцию CONFIG_SERIAL_8250_CONSOLE (я так понял она отключает DMA

    Rarebeast666, я не вижу прямой связи этой опции с DMA. Правда и прямого указания использовать/не использовать DMA я не вижу. Мне кажется, проще всего отключить DMA в коде, например здесь заменить up->dma = &data->data.dma; на up->dma = NULL;.
    Написано
  • В чем возникает проблема при работе с драйвером порта - UART4?

    jcmvbkbc
    @jcmvbkbc
    не проще ли использовать отдельный пин, который включать перед передачей и выключать сразу после окончания передачи.

    Так именно это же и происходит в драйвере.
    Написано
  • Как в С++ проверить double на целочисленность?

    jcmvbkbc
    @jcmvbkbc
    пожалуйста.


    3xa1t3d а, так ты думаешь, что (4 - 2.1) / 0.1 -- это целое число? Увы, нет. Давай я тебе немного помогу:

    #include <cmath>
    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    int isInteger(double value)
    {
    
      cout << value << "///" << round(value) << endl;
    
      return !(value == trunc(value));
    }
    
    int stepSize_check(double step, double startNum, double endNum) 
    {
      double mod;
    
      mod = (endNum - startNum) / step;
    
      cout << "mod: " << std::setprecision(20) << mod << endl;
    
      if (isInteger(mod))
        return (1);
      return (0);
    }
    
    int main()
    {
    
      double a = 2.1;
      double b = 4;
      double h = 0.1;
    
      cout << "result: " << endl << stepSize_check(h, a, b) << endl;
    
      return (0);
    }


    result: 
    mod: 18.999999999999996447
    18.999999999999996447///19
    1


    В этом конкретном случае проблема в том, что ни 2.1, ни 0.1 непредставимы конечными дробями в двоичной системе.
    Написано
  • Как в С++ проверить double на целочисленность?

    jcmvbkbc
    @jcmvbkbc
    Этот шаг должен удовлетворять условию, что: ((startingPoint - endPoint) / step) = целочисленный. При startingPoint < endPoint.

    3xa1t3d, слушай, ты хотел функцию с единственным параметром, делающую конкретное действие. В моём ответе именно эта функция. Приведи конкретный пример, когда эта функция возвращает не то, что обещает. Очевидно, что такой пример у тебя есть, раз ты говоришь, что "не сработало".
    Написано
  • Как в С++ проверить double на целочисленность?

    jcmvbkbc
    @jcmvbkbc
    сравнив trunc(2.4) и int num = 2 мы получим истину?

    3xa1t3d, да. Приведённый код, однако, сравнивает trunc(2.4) с double num.
    Написано
  • Как склеить байты правильно?

    jcmvbkbc
    @jcmvbkbc
    число стало меньше, но не правильное все равно

    Евгений Петряев, оператор [] в QByteArray возвращает char. Я бы сказал, что это конкретный фейл в определении интерфейса этого класса. Приводи результат сразу к unsigned char, иначе после знакового расширения получишь гарантированно отрицательный результат (c).
    Написано
  • Не работает код, что делать?

    jcmvbkbc
    @jcmvbkbc
    т.е. я bx умножаю на cols

    результат остался в ax.

    как в итоге перевести сумму в строку?

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

    jcmvbkbc
    @jcmvbkbc
    mul имеет только один операнд, и как в данном случае умножить bx на cols я недопонимаю

    Может, например, посмотреть, что конкретно mul делает и воспользоваться этим знанием? Типа того:
    mov ax, si
    mul cols
    mov bx, ax
    Написано