LINUX.ORG.RU
ФорумTalks

Райзен не поддерживает опкоды Вишеры

 , ,


0

1

Гадство. Бинарники, скомпилированные с оптимизацией под AMD FX не работают на топовом Ryzen. Хотя казалось бы…

P.S. Инструкции по решению этой проблемы написали ещё в 2018-м. Просто я с этим до сих пор не сталкивался.

★★★★★

Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

Обычно более новые процессоры совместимы со всеми предшественниками. Или это какая-нибудь редкоиспользуемая экзотика вроде «3DNow!»

question4 ★★★★★
() автор топика

Программа, пытающаяся выполнить неподдерживаемую инструкцию процессора, должна получить сигнал SIGILL (Illegal instruction). Ты именно это наблюдаешь, или что-то другое?

iliyap ★★★★★
()

Для того чтобы запускалось везде придумана жаба и прочая скриптота. А так у интуля тоже в 11-м поколении avx512, в 12-м и далее нету. Где-то там под кустом грустит tsx, который то есть, то нету. Поэтому вы оставьте эти думки про то что что работало на старой модели, то работает и на новой модели

cobold ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

grub собран с оптимизацией под какие-то специфические simd?
наверное, ульта-быстрый
подозреваю, не в этом дело

madcore ★★★★★
()
Ответ на: комментарий от madcore

grub собран с оптимизацией под какие-то специфические simd?

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

@question4, как и на чём оно падает? А то тут гадания на гуще у нас.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Очевидно, что источник SIGILL - аппаратное исключение, и если grub писали не сапожники, их код должен корректно обрабатывать данное исключение.

seiken ★★★★★
()
Ответ на: комментарий от question4

Обычно более новые процессоры совместимы со всеми предшественниками.

Скажи это еще раз про Intel MPX, ну пожалуйста!

no-dashi-v2 ★★★★
()
Ответ на: комментарий от seiken

Угу.

Припоминаю, как я по малолетству писал программу на 8088 процессоре под i486 и долго не мог понять, почему она ведёт себя несколько «не так», как описано в ТЗ.

sparkie ★★★★★
()

А чего ты хотел? Вон новые Qualcomm snapdragon после 8 gen2 оказывается не поддерживают предыдущие инструкции armV7 и armV6. Вот и трындец, старые приложения андроида не запустить на них, даже если пересобрать apk принудительно

karton1 ★★★★★
()
Ответ на: комментарий от madcore

Криптомодули могли быть собраны с SIMD.

Ecl
()
Ответ на: комментарий от sparkie

Припоминаю, как я по малолетству писал программу на 8088 процессоре под i486 и долго не мог понять, почему она ведёт себя несколько «не так», как описано в ТЗ.

это как?

madcore ★★★★★
()

А когда это декларировалось?

Как минимум, софт использующий FMA4 не должен работать на Ryzen.

FMA4 is supported in AMD processors starting with the Bulldozer architecture. Support for FMA4 has been removed since Zen 1.

Они начали с FMA4, потом какое-то время поддерживали оба, FMA4 и FMA3, но потом отказались от первого.

FMA3 is supported in AMD processors starting with the Piledriver architecture.

OSBuster ★★
()
Последнее исправление: OSBuster (всего исправлений: 1)
Ответ на: комментарий от madcore

В двух словах, я там на асме (TASM 5) наваял графическую заставку и при запуске программы она должна была задерживаться на экране на n-ное количество времени, но в реальности программа стартовала сразу, без задержки. Пока понял, в чём дело, чуть не родил. 😁

sparkie ★★★★★
()
Ответ на: комментарий от iliyap

Программа, пытающаяся выполнить неподдерживаемую инструкцию процессора, должна получить сигнал SIGILL (Illegal instruction). Ты именно это наблюдаешь, или что-то другое?

Да.

question4 ★★★★★
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

У него судя по словам на этапе GRUB всё падает. Ядра ещё нет.

GRUB не хотел грузиться, причём без видимых симптомов. Проблема выяснилась, когда я загрузился с флешки и попытался чрутнуться.

question4 ★★★★★
() автор топика
Ответ на: комментарий от cobold

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

Чтобы запустить скрипт, нужно запустить бинарник интерпретатора. А до того ld.so. А до того ядро. А до того загрузчик. И они все используют недопустимые на новом процессоре инструкции.

question4 ★★★★★
() автор топика
Ответ на: комментарий от madcore

grub собран с оптимизацией под какие-то специфические simd?

Выходит, что недопустимые инструкции — не SIMD, а что-то гораздо более ходкое. Как новые команды Pentium Pro, которые не работали на Pentium MMX.

question4 ★★★★★
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

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

Без видимых симптомов. Или я их не успеваю разглядеть. Смог разглядеть только когда на chroot получил «Illegal instruction» и полез в dmesg, где увидел illegal instruction в /bin/bash.

question4 ★★★★★
() автор топика
Ответ на: комментарий от karton1

А чего ты хотел? Вон новые Qualcomm snapdragon после 8 gen2 оказывается не поддерживают предыдущие инструкции armV7 и armV6. Вот и трындец, старые приложения андроида не запустить на них, даже если пересобрать apk принудительно

ARM делается кучей фирм путём компонования готовых блоков, которые нужны далеко не всем. За гибкость платят несовместимостью. Там это — норма. Как и для RISC-V. От x86 привык ожидать обратной совместимости хотя бы в линейках одного производителя.

question4 ★★★★★
() автор топика
Ответ на: комментарий от OSBuster

FMA4 is supported in AMD processors starting with the Bulldozer architecture. Support for FMA4 has been removed since Zen 1.

FMA (Fused Multiply-Add, умножение-сложение с однократным округлением) — набор опциональных 128- и 256-битных SIMD-инструкций для архитектур x86 и x86-64, предназначенный для выполнения операции умножения-сложения над числами в формате с плавающей запятой.

Спасибо за информацию, но зачем такая функциональность в bash и ld?

question4 ★★★★★
() автор топика
Ответ на: комментарий от IPR

Про MPX уже сказали. А до того были Pentium 4.

question4 ★★★★★
() автор топика
Ответ на: комментарий от no-dashi-v2

TSX, тоже сложная судьба у него

https://en.wikipedia.org/wiki/Intel_TSX пишет, что это расширение, призванное повысить безопасность, помогает взламывать ядра всех ОС :)

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Спасибо за информацию, но зачем такая функциональность в bash и ld?

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

Это было в качестве примера.

Ещё для примера - Интел вырезал поддержку AVX-512 из десктопных процессоров в 12 поколении Core и младше.

Т.е. бинарники собранные на 11 поколении и использующие этот набор инструкций не запустятся на ныне существующих последующих.

Какую-то сквозную и непременную совместимость от старшего к младшему никто никогда и не декларировал.

OSBuster ★★
()
Последнее исправление: OSBuster (всего исправлений: 3)
Ответ на: комментарий от question4

Смог разглядеть только когда на chroot получил «Illegal instruction» и полез в dmesg, где увидел illegal instruction в /bin/bash.

Хм, а тебе будет не трудно показать строчку из dmesg так мы узнаем какую инструкцию не смог переварить райзен. Может это вообще баг ядра, недоложили опкодов

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от OSBuster

Т.е. бинарники собранные на 11 поколении

Гентупроблемы?

firkax ★★★★★
()
Ответ на: комментарий от question4

GRUB — наверное, статически. Остальные — в основном, нет.

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

anc ★★★★★
()
Ответ на: комментарий от question4

Что поколения процов и набор поддерживаемых фич это перпендикулярные понятия.

ya-betmen ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Хм, а тебе будет не трудно показать строчку из dmesg так мы узнаем какую инструкцию не смог переварить райзен. Может это вообще баг ядра, недоложили опкодов

В dmesg кончилось место, поэтому ту самую ошибку в bash уже затёрло. Кое-что сохранилось в консоли, вот выдержки:

[1327807.652039] traps: bash[32719] trap invalid opcode ip:7f6b166a0849 sp:7ffce7d3e580 error:0 in ld-linux-x86-64.so.2[14849,7f6b1668d000+26000]
[1327905.633487] traps: bash[406] trap invalid opcode ip:7f7d29eb8849 sp:7ffccf04dcd0 error:0 in ld-linux-x86-64.so.2[14849,7f7d29ea5000+26000]
[1328036.957107] traps: bash[567] trap invalid opcode ip:7f331b273849 sp:7ffd8b7b6f20 error:0 in ld-linux-x86-64.so.2[14849,7f331b260000+26000]
[1328088.308779] traps: bash[704] trap invalid opcode ip:7fed63336849 sp:7ffe14c1f4c0 error:0 in ld-linux-x86-64.so.2[14849,7fed63323000+26000]
[1328092.676522] traps: bash[710] trap invalid opcode ip:7f675f7a6849 sp:7fff30c2dd50 error:0 in ld-linux-x86-64.so.2[14849,7f675f793000+26000]
[1328185.660330] traps: bash[946] trap invalid opcode ip:7f6636b00849 sp:7fff5495a9d0 error:0 in ld-linux-x86-64.so.2[14849,7f6636aed000+26000]
[1328622.079399] traps: bash[1292] trap invalid opcode ip:55dd4e336132 sp:7ffc4f501990 error:0 in bash[55132,55dd4e2e8000+96000]
[1329065.716748] traps: gcc[1534] trap invalid opcode ip:48376e sp:7ffe84893188 error:0 in x86_64-pc-linux-gnu-gcc[8376e,403000+a6000]
[1338531.904920] traps: eix[3356] trap invalid opcode ip:7f206b6eb913 sp:7ffd6081e3f8 error:0 in libgcc_s.so.1[4913,7f206b6eb000+23000]
[1338537.913160] traps: emerge[3357] trap invalid opcode ip:7fe2bf2dd0f7 sp:7ffe6abd8010 error:0 in _ssl.cpython-313-x86_64-linux-gnu.so[a0f7,7fe2bf2da000+f000]
[1339175.060339] traps: vim[4374] trap invalid opcode ip:557bb4711c1d sp:7ffca4966340 error:0 in vim[104c1d,557bb4613000+285000]
[1341053.065323] traps: bash[7096] trap invalid opcode ip:7f9ac9461913 sp:7ffed4f11578 error:0 in libgcc_s.so.1[4913,7f9ac9461000+23000]
[1341648.651520] traps: update-desktop-[11097] trap invalid opcode ip:7f3f1d1edb45 sp:7ffdf79a7250 error:0 in libglib-2.0.so.0.8200.5[21b45,7f3f1d1e9000+9a000]
[1341649.229969] traps: gtk-update-icon[11111] trap invalid opcode ip:7f2e0bfa05e8 sp:7ffc4b1e3800 error:0 in libgobject-2.0.so.0.8200.5[315e8,7f2e0bf7b000+35000]
[1342026.794052] traps: x86_64-pc-linux[19881] trap invalid opcode ip:48376e sp:7fff83438298 error:0 in x86_64-pc-linux-gnu-gcc[8376e,403000+a6000]
question4 ★★★★★
() автор топика
Ответ на: комментарий от anc

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

Чуть выше — выдержки из dmesg. В чруте проблемы и с исполнимыми файлами, и с библиотеками.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

А чёта я ступил, тут только ip в виде указателя на инстркцию и sp указатель на стек. Это надо по ним данные получать, а потом уже декодировать. Блин… я знаю как через внешний модуль трапсы раскручивать, но тут не вариант… Блин блинский, а как сказать ядру мол ты опкод то инструкции мол выкакай =)? Под gdb хоста может как запустить баш чрутааа, даже не знаю. В любом случае за телодвижения спасибо. Пора в люльку, но было бы интересно докопаться до сути, вот прям чтобы конкретно узнать. Хмммъъъ

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

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

А чёта я ступил, тут только ip в виде указателя на инстркцию и sp указатель на стек.

А в самом конце — не опкод? Я в этом совсем не разбираюсь.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

В квадратных скобках? Я тут сам не знаю. Надо вникнуть, я тоже не разбираюсь. Но это и не важно, настал вот момент когда можно разобраться, всё заранее знать не обязательно. Но, сначала поспим, а потом отпишусь тут, чёита такое =)


Ну или кто-то напишет

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от OSBuster

Ещё для примера - Интел вырезал поддержку AVX-512 из десктопных процессоров в 12 поколении Core и младше.

Т.е. бинарники собранные на 11 поколении и использующие этот набор инструкций не запустятся на ныне существующих последующих.

Это не так. Чтобы «не запустятся», должно сойтись немало звезд, а главное – пользователь должен залезть своими ручками и прописать -mavx512* в CFLAGS, т.к. AVX512 по умолчанию отключен в компиляторах.

Расширения к ISA могут быть удалены в будущих процессорах. Проекты, которые действительно занимаются оптимизацией, обычно собирают несколько версий функций под разные наборы инструкций, и выбирают нужную в рантайме в зависимости от того, что поддерживает CPU, поэтому «не запустятся» их не касается.

Ситуация с FMA3, FMA4 и XOP, из-за которых, предположительно, страдает @question4, полностью аналогичная, винить здесь можно только того, кто собирал софт – нормальные люди не собирают GRUB с -march=native и подобным.

собранные на 11 поколении

Архитектура сборочной машины здесь не имеет значения. Только целевая архитектура.

Siborgium ★★★★★
()
Ответ на: комментарий от question4

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

vtVitus ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)