Может пост более в Development, но все же OpenSource - хорошо, но иногда руки начинают опускаться, насколько все как-то нечетко, неопределенно, не работает на каждом шагу.
На этот раз с «целиком открытыми» драйверами ROCm. До некоторой степени я вообще ради ROCm апгрейд сделал. Понимаю, звучит глупо. Разумеется не только и не столько, но можно сказать толчком, который все же окончательно побудил они стали.
Ну и вот. Не работаютЪ-с. Или не они, а hashcat --benchmark. Использую для тестирования - сильно нагружают OpenCL по полной.
Ну для начала, официально Rocm до сих пор для Ubuntu 16.4 с ядром 4.10. Блин, 2020-й год уже. Для тех же AMD Ryzen и матплат под него давно желательны более новые ядра. Например, 4.19 в Debian 10 не видит датчика температуры на Ryzen 3900X, 5.4 - видит.
Но придумали какие-то kfd-модули для более новых версий ядер. То есть, чтобы не собираться rock-dkms и rocm-dkms (которые не собираются). Ну Ok. Использовал такой подход.
Запускаю hashcat --benchmark и оп-па
Hashmode: 0 - MD5
clCreateCommandQueue(): CL_OUT_OF_HOST_MEMORY
Гуглеж показал, что такие ошибки бывают. Количество памяти на хосте явно более чем достаточно. И что на форуме AMD не смогли понять, в чем дело =))) https://community.amd.com/thread/220038
Обнаружил, что однако если запустить от рута , то хотя бы начинает работать. Сравниваю выхлопы strace в обоих случаях и что-то не вижу причины. Целиком не привожу, но рядом с проблемным местом.
Успешный запуск:
futex(0x7efb87ffc9d0, FUTEX_WAIT, 4473, NULL) = 0
mmap(NULL, 278528, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7efbf00a8000
mprotect(0x7efbf00a9000, 274432, PROT_READ|PROT_WRITE) = 0
clone(child_stack=0x7efbf00eafb0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7efbf00eb9d0, tls=0x7efbf00eb700, child_tidptr=0x7efbf00eb9d0) = 4474
futex(0x5655577af608, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x5655577af528, FUTEX_WAKE_PRIVATE, 1) = 1
sched_yield() = 0
sched_yield() = 0
sched_yield() = 0
sched_yield() = 0
sched_yield() = 0
futex(0x56555769da98, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, NULL, FUTEX_BITSET_MATCH_ANY) = 0
chdir("/usr/share/hashcat/OpenCL") = 0
Сбой
futex(0x7efb9fffd9d0, FUTEX_WAIT, 4505, NULL) = 0
mmap(NULL, 278528, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7efbf00a8000
mprotect(0x7efbf00a9000, 274432, PROT_READ|PROT_WRITE) = 0
clone(child_stack=0x7efbf00eafb0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7efbf00eb9d0, tls=0x7efbf00eb700, child_tidptr=0x7efbf00eb9d0) = 4506
futex(0x5655577af118, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x5655577af038, FUTEX_WAKE_PRIVATE, 1) = 1
sched_yield() = 0
sched_yield() = 0
sched_yield() = 0
sched_yield() = 0
sched_yield() = 0
futex(0x56555769dae8, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, NULL, FUTEX_BITSET_MATCH_ANY) = 0
write(2, "\33[31m", 5[31m) = 5
write(2, "clCreateCommandQueue(): CL_OUT_O"..., 45clCreateCommandQueue(): CL_OUT_OF_HOST_MEMORY) = 45
write(2, "\33[0m", 4[0m) = 4
write(2, "\n", 1
) = 1
write(2, "\n", 1
)
Где-то на что-то чего-то прав не хватило. На что, на чего - хз. Обычно я такие ситуации ловил strace, но не в этот раз. Возможно, что с доступом к API ядерного модуля что-то не то.
От рута, однако запускается без сообщения об ошибке, даже несколько первых тестов отрабатывает успешно, но затем после нескольких успешных тестов грохается (все не привожу)
clBuildProgram(): CL_BUILD_PROGRAM_FAILURE
/usr/share/hashcat/OpenCL/comgr-0c4bcf/input/CompileSource:1016:15: warning: loop not unrolled: the optimizer was unable to perform the requested transformation; the transformation might be disabled or specified as part of an unsupported transformation ordering
__kernel void m02500_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t))
Error: Creating the executable from LLVM IRs failed.
* Device #1: Kernel /usr/share/hashcat/OpenCL/m02500-pure.cl build failed - proceeding without this device.
Кто виноват? Возможно hashcat, а не ROCm. А может и ROCm, если чего-то недореализовали в OpenCL.
На старой системе (Debian 9) с проприетарным драйвером OpenCL 1.2 работает без проблем и от юзера в том числе. Но там и hashcat версия иная.
Ну и на закуску. apt-get source firefox-esr и последующая попытка сборки происходит не удачно, валится с ошибкой. chromium однако собрался, хотя и отожрал в процессе сборки около 30Гб. Система stable, разве что deb-multimedia подключены, неужто из-за них?
И вот устаешь уже от этого постоянного чего-то не работания. И проверяния, проверяния потом. Причины же почему разработчики от AMD настолько ограничены в выборе конфигураций и это уже далеко не для альфа-беты за гранью понимания. Кстати, и в проприетарных драйверах тоже не особо разнообразие систем.