ruby: неверный код операции
Есть довольно сложное приложение, которое работает на двух виртуальных машинах (на Xen). Обе виртуальные машины работают с CentOS 6.2 с одинаковыми пакетами и конфигурацией для каждого работающего приложения (за исключением разных сетей). SELinux отключен на обоих.
На машине А приложение отлично строится. На машине B при выполнении некоторых тестов мы получаем:
ruby [2010] недействительный код операции ip:7ff9d2944c30 sp:7fff9797e0f8 ошибка:0 в ld-2.12.so[7ff9d2930000+20000]
Копая немного больше, чтобы узнать, где машины различаются, машина A имеет:
Название модели: Шестиядерный процессор AMD Opteron(tm) 2423 HE
и машина B:
Название модели: AMD Opteron(TM) Процессор 6272
Я попытался загрузить машину B с cpuid_mask_cpu=fam_10_rev_c
в grub но это тоже не помогло.
Поэтому любые советы относительно того, как с этим справиться или как обратиться к хостинг-провайдеру, чтобы запустить эту виртуальную машину на другом физическом компьютере, будут с благодарностью.
1 ответ
Очевидно, существует проблема с libc на машинах Xen с поддержкой AVX, которая может вызвать эту ошибку. Пожалуйста, ознакомьтесь с этим уведомлением от Chef, другим приложением ruby и связанной с ним проблемой для volk. Наконец, этот поток ArchLinux помог мне понять проблему дальше.
И вот, процессор AMD Opteron ™ 6272 поддерживает AVX, а 2423 HE - нет.
Итак... вас могут попросить перейти на другой процессор, или вы можете перекомпилировать libc с --disable-multi-arch, что заставит его игнорировать AVX. Я мог бы подумать, что вы могли бы также сказать Xen игнорировать поддержку AVX, но я не могу найти, как - может быть, кто-то умнее меня может сказать вам.