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