The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Избавление ядра Linux от кода, меняющего поведение для процессов, начинающихся на символ X, opennews (??), 09-Ноя-22, (0) [смотреть все] –1

Сообщения [Сортировка по времени | RSS]


10. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +5 +/
Сообщение от Шарп (ok), 09-Ноя-22, 13:43 
>current->comm[0] == 'X'

Вот это да. А если другой процесс тоже имеет имя, начинающиеся на X, но не Xorg? Вот это говнокостыль. Как он вообще прошёл ревью. Там же сам Линус аппрувит.

Буду начальнику показывать, если начнёт упрекать меня в говнокоде.

Ответить | Правка | Наверх | Cообщить модератору

13. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +7 +/
Сообщение от Аноним (-), 09-Ноя-22, 13:52 
>Как он вообще прошёл ревью. Там же сам Линус аппрувит.

У него макбук сломался.

Ответить | Правка | Наверх | Cообщить модератору

15. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +3 +/
Сообщение от Варенье (?), 09-Ноя-22, 13:55 
> Вот это да. А если другой процесс тоже имеет имя, начинающиеся на X, но не Xorg?

Звучит как недоработка. Нужна вторая проверка, которая будет при запуске процесса, с именем на X, но не Xorg, ронять ядро.
Должен остаться только один!

Ответить | Правка | К родителю #10 | Наверх | Cообщить модератору

117. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +1 +/
Сообщение от Аноним (117), 10-Ноя-22, 03:17 
Так нормальный процесс может быть и Xorg и X (который symlink на Xorg). У меня вот нет никаких Xorg в ps видно только /usr/bin/X
Ответить | Правка | Наверх | Cообщить модератору

17. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +4 +/
Сообщение от Аноним (24), 09-Ноя-22, 14:07 
А много у тебя процессов, начинающихся с X, которые нарямую дергают атомарные ioctl управления видеорежимами?
Ответить | Правка | К родителю #10 | Наверх | Cообщить модератору

90. "Избавление ядра Linux от кода, меняющего поведение для проце..."  –1 +/
Сообщение от Аноним (90), 09-Ноя-22, 23:06 
Тоже думал почему не сравнивают имя целиком, а только первую букву. А потом понял Это же C. И там нету нормального сравнения строк типа current->comm == "Xorg". Этому костылеписателю пришлось бы писать && current->comm[1] == 'o' && current->comm[2] == 'r' && ...
Ответить | Правка | К родителю #10 | Наверх | Cообщить модератору

102. "Избавление ядра Linux от кода, меняющего поведение для проце..."  –1 +/
Сообщение от Аноним (102), 09-Ноя-22, 23:56 
А что, нет ядерной реализации strncmp() ?
Ответить | Правка | Наверх | Cообщить модератору

114. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от pavlinux (ok), 10-Ноя-22, 02:46 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...
Ответить | Правка | Наверх | Cообщить модератору

113. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +2 +/
Сообщение от pavlinux (ok), 10-Ноя-22, 02:44 
> А потом понял Это же C. И там нету нормального сравнения строк типа current->comm == "Xorg".

Oткрою секрет, где есть "нормальное" сравнение строк, оно работает вот так:


int strcmp(const char *cs, const char *ct)
{
    unsigned char c1, c2;

    while (1) {
        c1 = *cs++;
        c2 = *ct++;
        if (c1 != c2)
            return c1 < c2 ? -1 : 1;
        if (!c1)
            break;
    }
    return 0;
}

И ТАК ВО ВСЕХ ЯЗЫКАХ НА ПЛАНЕТЕ!!!  Быстрее не придумали.

Исключение -  ассемблерные версии с побайтной загрузкой сравниваемых строк или
целыми словами при наличии SSE4.2 https://www.strchr.com/strcmp_and_strlen_using_sse_4.2

Ответить | Правка | К родителю #90 | Наверх | Cообщить модератору

126. "Избавление ядра Linux от кода, меняющего поведение для проце..."  –2 +/
Сообщение от mumu (ok), 10-Ноя-22, 09:51 
Я правильно понял, что linux kernel не использует simd, даже если у меня свежий дистр и проц?
Даже если я гинтушник и всё собираю с AVX2, ядро всё-равно будет побайтово сравнивать строки, как деды завещали? о_О
Ответить | Правка | Наверх | Cообщить модератору

134. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +1 +/
Сообщение от InuYasha (??), 10-Ноя-22, 11:35 
Покажите SIMD для ускорения строк. Я заинтересовался.
Ответить | Правка | Наверх | Cообщить модератору

146. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +1 +/
Сообщение от pavlinux (ok), 10-Ноя-22, 12:45 
> Покажите SIMD для ускорения строк. Я заинтересовался.

Выше нарисовал. SSE - это Streaming SIMD Extension, внезапно

Ответить | Правка | Наверх | Cообщить модератору

143. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от pavlinux (ok), 10-Ноя-22, 12:33 
> Я правильно понял, что linux kernel не использует simd, даже если у меня свежий дистр и проц?

Для всего кода ядра именно так.

> Даже если я гинтушник и всё собираю с AVX2,

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

> ядро всё-равно будет побайтово сравнивать строки, как деды завещали? о_О

Но SIMD юзать можно!

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...

FPU нельзя.

Ответить | Правка | К родителю #126 | Наверх | Cообщить модератору

158. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от n00by (ok), 10-Ноя-22, 14:03 
> Даже если я гинтушник и всё собираю с AVX2, ядро всё-равно будет
> побайтово сравнивать строки, как деды завещали? о_О

Смотрите ссылку, что дал pavlinux выше.

kernel_fpu_begin();
...
kernel_fpu_end();

Вот это существенно дольше, чем сравнивать короткие строки. Оправданно в видеодрайвере, где большие объёмы.

Ответить | Правка | К родителю #126 | Наверх | Cообщить модератору

129. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от n00by (ok), 10-Ноя-22, 10:50 
Ну 4 то байта можно привести к двойному слову (одевает каску, убегает от Свидетелей UB).
Ответить | Правка | К родителю #113 | Наверх | Cообщить модератору

131. "Избавление ядра Linux от кода, меняющего поведение для проце..."  –2 +/
Сообщение от Аноним (-), 10-Ноя-22, 11:01 
Стоп-стоп, речь шла про НОРМАЛЬНОЕ сравнение строк.

Где первый шаг - это сравнить s1.len==s2.len и на этом все может закончиться за O(1).

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

Ответить | Правка | К родителю #113 | Наверх | Cообщить модератору

145. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +2 +/
Сообщение от pavlinux (ok), 10-Ноя-22, 12:40 
> Стоп-стоп, речь шла про НОРМАЛЬНОЕ сравнение строк.
> Где первый шаг - это сравнить s1.len==s2.len
> s1.len==s2.len

== это всего лишь оператор языка, компилятор "правильного языка" проверит
что аргументы строковые и вызовет strcmp() :)


> и на этом все может закончиться за O(1).

А как ты представляешь сравнение строк менее, чем за O(n) ?

O(1) будет с твоей точке зрения, для проца это регистровый CMP.
Так что, сложность превращается в O(n/x), где х толщина регистра, x >= 1
  


Ответить | Правка | Наверх | Cообщить модератору

148. "Избавление ядра Linux от кода, меняющего поведение для проце..."  –2 +/
Сообщение от n00by (ok), 10-Ноя-22, 13:03 
Если известна длина строки, может быть O(1).
Ответить | Правка | Наверх | Cообщить модератору

149. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от pavlinux (ok), 10-Ноя-22, 13:07 
> Если известна длина строки, может быть O(1).
> ---- Так что, сложность превращается в O(n/x), где х толщина регистра, x >= 1

Какой там AVX сейчас самый толстый? 256 бит? ... Ну вот, строку из 32 байт можно за раз.


Но олдскульные оптимизаторы считают такты проца.

cmp - 40 тактов,
jnz - 10

А какой-нибудь VPCMPUQ - 2500 тактов... и нахрен он нужен для сравнения "127.0.0.1" с "192.168.0.1"

Ответить | Правка | Наверх | Cообщить модератору

151. "Избавление ядра Linux от кода, меняющего поведение для проце..."  –1 +/
Сообщение от n00by (ok), 10-Ноя-22, 13:14 
Если длины различаются, содержимое не надо сравнивать.
Ответить | Правка | Наверх | Cообщить модератору

153. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от pavlinux (ok), 10-Ноя-22, 13:17 
> Если длины различаются, содержимое не надо сравнивать.

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

И опять таки, ты не узнаешь размеры содержимого,
пока побайтово не проверишь strlen(), причем два раза. :D


Вот и думай, что выгоднее

char *A = 127.0.0.1";
char *B = "192.168.0.1";

if ( strlen(A) == strlen(B))
    strcmp(A, B);


иль просто загнать сразу в strcmp(A, B) и отошьёт при неравенстве.  


Ответить | Правка | Наверх | Cообщить модератору

154. "Избавление ядра Linux от кода, меняющего поведение для проце..."  –2 +/
Сообщение от n00by (ok), 10-Ноя-22, 13:20 
>> Если длины различаются, содержимое не надо сравнивать.
> Это уже алгоритмическая задача, а не вычислительная.

– Видите, Ватсон – перед вами типичный пример программиста.
– Почему Вы так решили, Холмс?
– Ну во-первых он очень долго думал над простым вопросом, во-вторых он ответил _АБСОЛЮТНО_ правильно, и в-третьих – нам от его ответа нет никакой пользы.

> И опять таки, ты не узнаешь размеры содержимого,
> пока побайтово не проверишь strlen(), причем два раза. :D

Я узнаю. У меня есть ядрёная std::string.

Ответить | Правка | Наверх | Cообщить модератору

155. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от pavlinux (ok), 10-Ноя-22, 13:24 
> Я узнаю. У меня есть ядрёная std::string.

:)))

FORK(TO_BEER);
GOTO BEGIN   https://www.opennet.ru/openforum/vsluhforumID3/128887.html#113


Ответить | Правка | Наверх | Cообщить модератору

156. "Избавление ядра Linux от кода, меняющего поведение для проце..."  –3 +/
Сообщение от n00by (ok), 10-Ноя-22, 13:59 
>> Я узнаю. У меня есть ядрёная std::string.
> :)))
> FORK(TO_BEER);
> GOTO BEGIN   https://www.opennet.ru/openforum/vsluhforumID3/128887.html#113

Вообще-то стандарту там аналог strncmp(), а не требования вызывать Си библиотеку. operator!=() и operator==() возможно оптимизировать для различающихся длин.

Ответить | Правка | Наверх | Cообщить модератору

157. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от Аноним (-), 10-Ноя-22, 14:01 
> ты не узнаешь размеры содержимого, пока побайтово не проверишь strlen()

Это верно только для поинтера на кусок null-terminated памяти.

Если бы строки были нормальные - которые знают свой размер - програмер бы спокойно вызвал сравнение с "X", понимая, что под капотом оно проверит и длину, и сравнит первый и единственный символ, и не пожрет производительность.

А не лепил бы такой баг, когда любой процесс начинающийся с Х удовлетворит условию...

Ответить | Правка | К родителю #153 | Наверх | Cообщить модератору

237. "Избавление ядра Linux от кода, меняющего поведение для проце..."  –1 +/
Сообщение от Аноним (-), 11-Ноя-22, 14:55 
Если тебе нефиг делать, можешь сделать struct, вот именно таким и пользоваться им наздоровье. Однако всякие системные вызовы операционки не в курсе этого счастья и при взаимодействии с ос ты познаешь все прелести конверсии.
Ответить | Правка | Наверх | Cообщить модератору

236. "Избавление ядра Linux от кода, меняющего поведение для проце..."  –1 +/
Сообщение от Аноним (-), 11-Ноя-22, 14:54 
> char *A = 127.0.0.1";
> char *B = "192.168.0.1";
> if ( strlen(A) == strlen(B))
>     strcmp(A, B);

Совершенно неиллюстративный пример - оптимизатор может это все свернуть до одной вгрузки константы если повезет. Или даже нихрена, если это никак дальше не используется. Ну и сколько тактов вгрузка константы в регистр займет?

Ответить | Правка | К родителю #153 | Наверх | Cообщить модератору

284. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от pavlinux (ok), 12-Ноя-22, 20:12 
>> char *A = "127.0.0.1";
>> char *B = "192.168.0.1";
>> if ( strlen(A) == strlen(B))
>>     strcmp(A, B);
> Совершенно неиллюстративный пример

Вместо "127.0.0.1" и  "192.168.0.1" должный быть строки неизвестной длины.
Но вы этот пример них.. не поняли, про динамич. размеры бесполезно.  

Ответить | Правка | Наверх | Cообщить модератору

262. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от Аноним (262), 12-Ноя-22, 08:38 
Эта информация, без сомнения, ценна, но речь про нормальные строки, где strlen не нужен для вычисления размера. Например, про такие строки: https://github.com/gcc-mirror/gcc/blob/master/libstdc%2...
Ответить | Правка | К родителю #153 | Наверх | Cообщить модератору

285. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от pavlinux (ok), 12-Ноя-22, 20:13 
> Эта информация, без сомнения, ценна, но речь про нормальные строки, где strlen
> не нужен для вычисления размера. Например, про такие строки: https://github.com/gcc-mirror/gcc/blob/master/libstdc%2...

Причём тут С++ ??? ... ну ладно,  __lhs.size() == __rhs.size()  кто и как вычисляют?

...

template<typename _CharT, typename _Traits, typename _Alloc>
    _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
    inline bool
    operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
           const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    _GLIBCXX_NOEXCEPT
    {
      return __lhs.size() == __rhs.size()
           && !_Traits::compare(__lhs.data(), __rhs.data(), __lhs.size());
    }


Это пздц, это в мусор, хлама на 100500 лишних тактов.

Ответить | Правка | Наверх | Cообщить модератору

184. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от Аноним (184), 10-Ноя-22, 22:50 
> Если длины различаются, содержимое не надо сравнивать.

Смотря для чего ты функцию делаешь. Если вдруг потребуется отсортировать массив строк по возрастанию/убыванию, то твоя "длина" даст неподходящие для большинства случаев результаты...

Для себя конечно можешь всё что угодно изобретать, но вот поведение strcmp определено стандартом чётко и там различают результаты >, == и < как раз по содержимому строк. Так что приходится сравнивать отдельные символы строки (если нужна реализация, соответствующая стандарту).

Ответить | Правка | К родителю #151 | Наверх | Cообщить модератору

200. Скрыто модератором  +/
Сообщение от n00by (ok), 11-Ноя-22, 08:29 
Ответить | Правка | Наверх | Cообщить модератору

172. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от Lex20email (ok), 10-Ноя-22, 15:07 
Фига у вас такты, никаких мегагерц не хватит
Ответить | Правка | К родителю #149 | Наверх | Cообщить модератору

231. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от pavlinux (ok), 11-Ноя-22, 14:12 
> Фига у вас такты, никаких мегагерц не хватит

А чо, SIMD очень прожорливые.

Ответить | Правка | Наверх | Cообщить модератору

241. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от Аноним (241), 11-Ноя-22, 15:12 
Ну так они чтобы зарядить большой кус и сжевать все оптом. Ты еще массив GPU попробуй быстро в разные стороны подергать и подивись результату.
Ответить | Правка | Наверх | Cообщить модератору

286. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от pavlinux (ok), 12-Ноя-22, 21:20 
> Ну так они чтобы зарядить большой кус и сжевать все оптом.

Ну вон живой пример... сравнение айпишников. в макс длине "111.222.333.444\0" 16 символов.
Даже пусть 1 лям коннектов/сек. strnsmp() или в SIMD пихать?

...

Если функционал позволяет... возможно собрать в матрицу 16x16 иль даже 16x32,
умножить на хитрожопую матрицу (траспонированую, эмиртову, ... забыл уже ),
кароч на выходе будет диагональная матрица с только "0" и "1",  ...

Опять же нужно считать, что быстрее трах с матричной алгеброй или 16 раз stcmp()      
  

Ответить | Правка | Наверх | Cообщить модератору

289. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от n00by (ok), 13-Ноя-22, 09:10 
>> Ну так они чтобы зарядить большой кус и сжевать все оптом.
> Ну вон живой пример... сравнение айпишников. в макс длине "111.222.333.444\0" 16 символов.

Действительно в текстовом виде сравниваются? Где?

Ответить | Правка | Наверх | Cообщить модератору

290. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от pavlinux (ok), 14-Ноя-22, 00:03 
> Где?

Где используется strcmp()? Везде.


Ответить | Правка | Наверх | Cообщить модератору

291. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от n00by (ok), 14-Ноя-22, 07:37 
>> Где?
> Где используется strcmp()?

Зачем ты вырезал слово «АЙПИШНИКИ»? Лично ты их хранишь в текстовом виде и так сравниваешь?

> Везде.

Зачем ты врёшь? По _стандарту_ плюсов strcmp() не используется для сравнения строк. Да и в Си во многих случаях длина строки заранее известна (в частности, ограничена размером буфера). Ты для ядра только конфиги правил, я верно понимаю твои прошлые понты про коммиты?

Ответить | Правка | К родителю #290 | Наверх | Cообщить модератору

190. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от Аноним (5), 11-Ноя-22, 06:01 
Все знают что строки это синтаксический сахар, а длину нужно вычислить только перебором всех символов за O(n) и никак иначе
Ответить | Правка | К родителю #131 | Наверх | Cообщить модератору

99. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от Michael Shigorinemail (ok), 09-Ноя-22, 23:51 
Грамотный начальник даст пинка придурку, который пытается оправдываться косяками других.  Впрочем, такого ещё заслужить надо.
Ответить | Правка | К родителю #10 | Наверх | Cообщить модератору

103. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от Аноним (102), 09-Ноя-22, 23:58 
У тебя имеется опыт? ;)
Ответить | Правка | Наверх | Cообщить модератору

111. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +1 +/
Сообщение от Аноним (111), 10-Ноя-22, 02:06 
Иными словами, нет в alt linux грамотных начальников.
Ответить | Правка | К родителю #99 | Наверх | Cообщить модератору

193. "Избавление ядра Linux от кода, меняющего поведение для проце..."  +/
Сообщение от Аноним (-), 11-Ноя-22, 06:25 
Он не заслужил: хороший начальник глупыми людьми управлять не станет, особенно когда они еще и свое мнение пихают везде.
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру