Re[5]: Надёжная Debian 12
От: mike_rs Россия  
Дата: 16.10.24 07:53
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Если использовать int по назначению (например, в качестве счетчика цикла), то обычно вообще все равно, 16 он бит или 32.


даа, теперь понятно откуда тонны уязвимостей integer overflow с последующим корраптом памяти...
Re[4]: Надёжная Debian 12
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.10.24 08:05
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>Я слышал, в старые времена железо тормозило на неродной разрядности. Например, задефайнив INT на 16 бит и используя его повсюду, можно было совершенно бесплатно получить просадку производительности на 86 времён, примерно, 9x.


Это во все времена так. Железо умеет работать только с конкретной разрядностью. Всё что другое корректируется компилятором, т.е. софтварно. Вот вам и просадка.
Re[5]: Надёжная Debian 12
От: Alekzander  
Дата: 16.10.24 08:18
Оценка:
Здравствуйте, Pauel, Вы писали:

A>>Я слышал, в старые времена железо тормозило на неродной разрядности. Например, задефайнив INT на 16 бит и используя его повсюду, можно было совершенно бесплатно получить просадку производительности на 86 времён, примерно, 9x.


P> Это во все времена так. Железо умеет работать только с конкретной разрядностью. Всё что другое корректируется компилятором, т.е. софтварно. Вот вам и просадка.


И что, ты хочешь сказать, что современные 64-битные процы не пилятся специально так, чтобы не было просадок на тоннах 32-битного софта?
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Re[6]: Надёжная Debian 12
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.10.24 09:43
Оценка:
Здравствуйте, mike_rs, Вы писали:

Pzz>>Если использовать int по назначению (например, в качестве счетчика цикла), то обычно вообще все равно, 16 он бит или 32.


_>даа, теперь понятно откуда тонны уязвимостей integer overflow с последующим корраптом памяти...


Ну, Си не для всех...
Re[7]: Надёжная Debian 12
От: mike_rs Россия  
Дата: 16.10.24 10:35
Оценка:
Здравствуйте, Pzz, Вы писали:

_>>даа, теперь понятно откуда тонны уязвимостей integer overflow с последующим корраптом памяти...

Pzz>Ну, Си не для всех...

краудстрайк тоже так думал
Re[3]: Надёжная Debian 12
От: Stanislaw K СССР  
Дата: 16.10.24 12:00
Оценка:
Здравствуйте, B0FEE664, Вы писали:


BFE>У многих файлов и каталогов дата поменялась на 2040... и именно это приводит к проблемам. Если поменять даты каталогов /etc и /dev на текущие, то кое-что начинает работать.


Хм, интересно. похоже это бага драйвера fs. Какая там fs?

И зачем вообще системе смотреть на даты файлов? это атрибут user level.
Все проблемы от жадности и глупости
Re: Надёжная Debian 12
От: velkin Удмуртия https://kisa.biz
Дата: 16.10.24 12:25
Оценка: 3 (1)
Здравствуйте, B0FEE664, Вы писали:

BFE>Надёжная Debian 12


Я начал использовать Debian с 6 версии, с переходом на 7 версию на полный цикл. Больше всего мне нравилась 9 версия. А 12 версия на мой взгляд неудачная.

И в Debian есть выведенное мною правило, что начинать использовать выпуск нужно тогда, когда выпустили следующую версию.

Например, выпускают установочный образ 13 версии, тогда идём и скачиваем последний установочный образ 12 версии.

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

В целом же Debian это рабочий инструмент. Цель его дать пользователям операционку для последующей настройки.

Для таких случаев и существует профессия администратора. Если сам не хочешь настраивать можешь заплатить. А если настраиваешь сам, то сам и становишься админом.
Re[6]: Надёжная Debian 12
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.10.24 14:26
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>И что, ты хочешь сказать, что современные 64-битные процы не пилятся специально так, чтобы не было просадок на тоннах 32-битного софта?


Я хочу сказать, что в любой процессор закладывается ограниченное количество кейсов для оптимизации.
Нынешние процессоры затачиваются в основном под 32 и 64 бита.
Иногда 32х битная версия быстрее, иногда 64.
Для интересу можно 16 битный код потестировать, не знаю, правда, как этого добиться.
Еще есть и 8 битные команды, вроде бы их не выбрасывали.

А вот если вы захотите 128бит — у вас снова будут просадки, как и в стародавние времена. Только поменьше, т.к. раньше в процессорах отсутствовали многие механизмы, типа буфер ветвления, кеширование итд итд
Re[7]: Надёжная Debian 12
От: Alekzander  
Дата: 16.10.24 15:00
Оценка:
Здравствуйте, Pauel, Вы писали:

P>Нынешние процессоры затачиваются в основном под 32 и 64 бита.


"Что ж ты, фраер, сдал назад?" Сначала ты пишешь:

>Это во все времена так. Железо умеет работать только с конкретной разрядностью. Всё что другое корректируется компилятором


А теперь, значит, "затачиваются" сразу "под 32 и 64 бита", да?

Об этом и речь шла. Если верна гипотеза, что когда-то плавающий инт ввели с Си в порядке оптимизации, чтобы при переносе на другие платформы автоматически (без изменения кода) получать родную разрядность и максимальную производительность, то теперь смысла в плавающем инте больше нет. А нет смысла потому, что имея такой корпус 32-битных программ создатели 64-битных процессоров вложились в оптимизацию под "неродную", 32-битную разрядность. Хотя я даже не уверен, что там к 32-битности вообще применимо понятие "неродная".
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Re[8]: Надёжная Debian 12
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.10.24 19:43
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>"Что ж ты, фраер, сдал назад?" Сначала ты пишешь:

A>А теперь, значит, "затачиваются" сразу "под 32 и 64 бита", да?

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

Цитирую себя: "А вот если вы захотите 128бит — у вас снова будут просадки, как и в стародавние времена. "

Разница между 32 и 64 небольшая, но есть. Не нравится — рассмотрите кейсы с 16 битными вычислениями, 8 битными, и даже 128 битными.
Re[9]: Надёжная Debian 12
От: Alekzander  
Дата: 17.10.24 07:12
Оценка:
Здравствуйте, Pauel, Вы писали:

P>Цитирую себя: "А вот если вы захотите 128бит — у вас снова будут просадки, как и в стародавние времена. "


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

Если, конечно, подчёркиваю, верна гипотеза о перформансных или каких-то иных плюшках автоматического приведения разрядности к родной. А другой разумной гипотезы, собственно, я не вижу.
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Re[5]: Надёжная Debian 12
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.10.24 13:32
Оценка: 6 (2)
Здравствуйте, Pzz, Вы писали:

Pzz>Если использовать int по назначению (например, в качестве счетчика цикла), то обычно вообще все равно, 16 он бит или 32.


Очень даже есть разница.

typedef int INDEX;
int xset(int *arr, INDEX pos, int val) {
  arr[pos] = val;
}


Компилируем (gcc -O -S -masm=intel):
xset:
        movsx   rsi, esi
        mov     DWORD PTR [rdi+rsi*4], edx
        ret


Ой, а откуда это movsx взялось? До адреса-то расширить надо...

То же для ARM/64:

xset:
        str     w2, [x0, w1, sxtw 2]
        ret


Тут вложенная sxtw делает то же самое.

Если взять unsigned, то для такого простого кода, да, на x86 срабатывает автозатирка старших 32 бит при 32-битных операциях (но не при 16-битных!) На ARM аналогично появляются uxtw.

А теперь ещё интереснее — делаем индекс unsigned short и делаем цикл по нему:

typedef unsigned short INDEX;
int xfill(int *arr, INDEX size) {
  INDEX i;
  for (i = 0; i < size; ++i) {
    arr[i] = i;
  }
  arr[size] = 0;
}


ARM:

xfill:
        ands    w1, w1, 65535
        beq     .L2
        mov     x2, 0
.L3:
        str     w2, [x0, x2, lsl 2]
        add     x2, x2, 1
        cmp     w1, w2, uxth
        bhi     .L3
.L2:
        and     x1, x1, 65535
        str     wzr, [x0, x1, lsl 2]
        ret


А зачем нам аж два and с 65535? А это нас арестовывать идут есть правило C/C++, что арифметика unsigned она modulo. В результате лишние операции в цикле.
На x86 GCC на это решил использовать 16-битные регистры, типа ax. Clang не захотел, поэтому там есть явный movzx после инкремента.

А теперь ещё и поменяем аргумент размера на size_t. GCC, x86:

xfill:
        test    rsi, rsi
        je      .L2
        mov     eax, 0
        mov     edx, 0
.L3:
        movzx   ecx, ax
        mov     DWORD PTR [rdi+rdx*4], ecx
        add     eax, 1
        movzx   edx, ax
        cmp     rdx, rsi
        jb      .L3
.L2:
        mov     DWORD PTR [rdi+rsi*4], 0
        ret


Два лишних movzx. Мы убрали гарантию, что предел влезает в те же 16 бит, и включается полная арифметика по модулю 2^16 в регистре размером на 2^64. Это полное орейро.

Эффект я наблюдал в коде проектов, в которых почему-то очень любили, что если количество, например, модулей железа для чего-то приходит в виде uint8_t, то и итерировать по ним надо через uint8_t. В результате код был переполнен всякими ubfx и uxtw.

Для архитектур типа ARM я уже вообще не вижу причин оставлять int 32-битным, кроме совместимости с неизвестно чем. Для x86 минимальный аргумент — что 32-битные команды в массе, в отличие от 64-битных, не требуют REX префикса, поэтому чуть экономнее.

Зато в рекомендации по кодированию давно надо внести — все переменные циклов, которые используются для индексации, надо делать size_t или ssize_t. Иначе повылазят эти конверсии где не нужны.
The God is real, unless declared integer.
Re[7]: Надёжная Debian 12
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.10.24 13:36
Оценка:
Здравствуйте, Pzz, Вы писали:

Ф>>А что, во время 16-битных регистров мегабайтных файлов ещё не было? Или никто последовательно не вычитывал сотни тысяч элементов структуры? Вроде когда C придумали, уже юникс был — уже должны были быть подобные задачи, тем более Масачусетском универе.

Ф>>Я не сишник, если что.

Pzz>Для этого был тип long.


И которого не хватило.
The God is real, unless declared integer.
Re[6]: Надёжная Debian 12
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.10.24 14:16
Оценка: 3 (1)
Здравствуйте, Alekzander, Вы писали:

A>>>Я слышал, в старые времена железо тормозило на неродной разрядности. Например, задефайнив INT на 16 бит и используя его повсюду, можно было совершенно бесплатно получить просадку производительности на 86 времён, примерно, 9x.


P>> Это во все времена так. Железо умеет работать только с конкретной разрядностью. Всё что другое корректируется компилятором, т.е. софтварно. Вот вам и просадка.


A>И что, ты хочешь сказать, что современные 64-битные процы не пилятся специально так, чтобы не было просадок на тоннах 32-битного софта?


С подходами _современных_ процессоров вообще должно быть пофиг, какая разрядность, пока речь идёт об операциях над полным объектом (обычно регистром).

Во всех основных архитектурах это обеспечено тем, что операция с младшей частью регистра чистит старшую часть. X86 — любая 32-битная операция зануляет старшую половину 64-битного регистра. ARM/64 — то же самое. RISC-V — знаковое расширение на старшую часть, но последствия те же. Или загрузка из памяти в регистр: у тебя есть какие-нибудь lb, lbu, lh, lhu, lw, lwu, ld (список по RISC-V) с расширением, но нет условного lhk (поменять младших 16 бит не трогая старшие). Нужно такое — делаешь особым комбинированием (как bfm в ARM/64), но нужно очень редко.

А вот с 8 и 16 битами в x86 иначе. Они старшую часть, какого она бы ни была размера (16, 32, 64), вообще не трогают. Для 8086 это было ещё логично: работаешь с AL, не меняешь AH. Но сделав такое правило в 386, Intel сама себе подложила огромную свинью. Те задержки, о которых ты говоришь, происходят от того, что возникает "ложная зависимость" между старым и новым значением регистра, которая не даёт параллелить операции.

Особенно это грустно было на PPro. В P2 и особенно в P3 это исправили, вместе с другими проблемами — в PPro, например, Flags рассматривался целиком, и любимые Intel подходы, что некоторые команды меняют только часть condition codes, давали тут такую же неустранимую зависимость. В P2 его разделили на каждый бит CC (CF, SF, OF, ZF, AF, PF) отдельно. Наверняка это ты и вспомнил в вопросе скорости 16-битных программ "во времена 9x".

Но я думаю, что с последними поколениями, когда 16-битный код в нормальном софте используется только для загрузки до момента перехода в защищённый режим с загруженным ядром, эту подпорку начинают убирать обратно. Хочешь легаси — не вопрос, но будет тормозить на тех же false dependency.
The God is real, unless declared integer.
Re[5]: Надёжная Debian 12
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.10.24 14:18
Оценка:
Здравствуйте, Pauel, Вы писали:

P>Здравствуйте, Alekzander, Вы писали:


A>>Я слышал, в старые времена железо тормозило на неродной разрядности. Например, задефайнив INT на 16 бит и используя его повсюду, можно было совершенно бесплатно получить просадку производительности на 86 времён, примерно, 9x.


P> Это во все времена так. Железо умеет работать только с конкретной разрядностью. Всё что другое корректируется компилятором, т.е. софтварно. Вот вам и просадка.


X86 таки тут особый случай. Поддержка 8- и 16-битных операций в легаси-стиле. Я в соседнем комментарии расписал подробнее.

(Честно говоря, не только он, конечно. SystemZ отличается тем же. Но там такие пользователи, что их это в большинстве случаев не волнует.)
The God is real, unless declared integer.
Re[10]: Надёжная Debian 12
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.10.24 14:21
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>Я думаю, при переносе восьмибитных программ на практике ты всегда влезал в память, если тупо заменял главный int на 16-битный.


Насколько я понял твою хитро завёрнутую мысль, то таки нет.

Самая ходовая среди таких платформ — 6502 — имела с этим серьёзные проблемы. Позволить себе 16-битный int было чудовищно дорого.
The God is real, unless declared integer.
Re[3]: Надёжная Debian 12
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.10.24 14:24
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>По ssh не зайти, девайса в сети нет (хотя ip на нём фиксированный)

[...]

BFE>Через последовательный порт видно , что загрузка с ошибками, но проходит.

BFE>putty подвисает после каждого нажатия enter, так что каждая команда требует переподключения.
BFE>Обратно дату на текущую не изменить: команда завершается с ошибкой.
BFE>У многих файлов и каталогов дата поменялась на 2040... и именно это приводит к проблемам. Если поменять даты каталогов /etc и /dev на текущие, то кое-что начинает работать.
BFE>Я не стал дальше разбираться, а просто переставил систему с флешки.

BFE>>>А почему? А потому, что опытные программисты знают как там оно на самом деле устроено и кастят time_t к int.

Pzz>>А там в хардварии сколько битов-то?
BFE>ARM 64 бита.

Крайне странно. На 64 битах уже давно time_t 64-битный насквозь.

Присоединяюсь к вопросу, не виноват ли какой-нибудь код за пределами Linux (аббревиатура BSP, которую тут упомянули, в этом числе).
The God is real, unless declared integer.
Re[6]: Надёжная Debian 12
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.10.24 16:04
Оценка: 3 (1)
Здравствуйте, Alekzander, Вы писали:
A>И что, ты хочешь сказать, что современные 64-битные процы не пилятся специально так, чтобы не было просадок на тоннах 32-битного софта?
тынц
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Надёжная Debian 12
От: B0FEE664  
Дата: 18.10.24 18:55
Оценка:
Здравствуйте, netch80, Вы писали:

N>Крайне странно. На 64 битах уже давно time_t 64-битный насквозь.

N>Присоединяюсь к вопросу, не виноват ли какой-нибудь код за пределами Linux (аббревиатура BSP, которую тут упомянули, в этом числе).

И за пределами, конечно, тоже виноват. Например, sft-plugin для Total Commander вообще не видит файлы, если их дата (причём любая из трёх) уходит за порог.

Ну и Debian от больших дат глючит.
Вот, ради эксперимента под Debian12 на WSL под Windows 10:

19:59:50 dev@Debian12:~/Temp/T3>touch --date="2040-12-11 10:09:08" test.txt
20:04:53 dev@Debian12:~/Temp/T3>ls -l
total 0
-rw-r--r-- 1 dev dev 0 Dec 11 2040 test.txt
20:04:57 dev@Debian12:~/Temp/T3>stat test.txt
File: test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 8,32 Inode: 235196 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1001/ dev) Gid: ( 1001/ dev)
Access: 2040-12-11 10:09:08.000000000 +0100
Modify: 2040-12-11 10:09:08.000000000 +0100
Change: 2024-10-18 20:04:53.994201718 +0200
Birth: 2024-10-18 20:04:53.994201718 +0200
20:05:15 dev@Debian12:~/Temp/T3>touch --date="2340-12-11 10:09:08" test2.txt
20:06:13 dev@Debian12:~/Temp/T3>ls -l
total 0
-rw-r--r-- 1 dev dev 0 Dec 11 2340 test2.txt
-rw-r--r-- 1 dev dev 0 Dec 11 2040 test.txt
20:06:17 dev@Debian12:~/Temp/T3>stat test2.txt
File: test2.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 8,32 Inode: 235251 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1001/ dev) Gid: ( 1001/ dev)
Access: 2340-12-11 10:09:08.000000000 +0100
Modify: 2340-12-11 10:09:08.000000000 +0100
Change: 2024-10-18 20:06:13.946818028 +0200
Birth: 2024-10-18 20:06:13.946818028 +0200
20:06:29 dev@Debian12:~/Temp/T3>touch --date="12340-12-11 10:09:08" test3.txt
20:06:53 dev@Debian12:~/Temp/T3>stat test3.txt
File: test3.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 8,32 Inode: 235255 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1001/ dev) Gid: ( 1001/ dev)
Access: 2446-05-11 00:38:55.000000000 +0200
Modify: 2446-05-11 00:38:55.000000000 +0200
Change: 2024-10-18 20:06:53.268100549 +0200
Birth: 2024-10-18 20:06:53.268100549 +0200
20:06:58 dev@Debian12:~/Temp/T3>ls -l
total 0
-rw-r--r-- 1 dev dev 0 Dec 11 2340 test2.txt
-rw-r--r-- 1 dev dev 0 May 11 2446 test3.txt
-rw-r--r-- 1 dev dev 0 Dec 11 2040 test.txt
20:07:24 dev@Debian12:~/Temp/T3>


Скажите мне, каким образом 11-ое декабря 12340 года превратилось в 11-ое мая 2446 года? Программисты опять живут сегодняшним днём? Не, я понимаю, Земля замедляется, но за 10300 лет год увеличится не больше чем на 3 минуты и это никак не объясняет, куда делись 9894 года и почему 10:09 превратилось в 00:38.

Винда, кстати, в колонке Date на эти файлы показывает пустое место. Ну, хоть ничего не падает...
И каждый день — без права на ошибку...
Re[5]: Надёжная Debian 12
От: Anton Batenev Россия https://github.com/abbat
Дата: 18.10.24 20:24
Оценка: 2 (1)
Здравствуйте, B0FEE664, Вы писали:

BFE> Скажите мне, каким образом 11-ое декабря 12340 года превратилось в 11-ое мая 2446 года?


Ответ здесь
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.