ruby: opcode inválido

4

Há um aplicativo bastante complexo que é executado em duas VMs (no Xen). Ambas as VMs executam o CentOS 6.2 com os mesmos pacotes e configurações para cada aplicativo em execução (menos a rede que é diferente). O SELinux está desativado em ambos.

Na máquina A, a aplicação é construída perfeitamente. Na máquina B, ao executar alguns testes, obtemos:

ruby[2010] trap invalid opcode ip:7ff9d2944c30 sp:7fff9797e0f8 error:0 in ld-2.12.so[7ff9d2930000+20000]

Cavando um pouco mais para descobrir onde as máquinas são diferentes, a máquina A tem:

model name : Six-Core AMD Opteron(tm) Processor 2423 HE

e máquina B:

model name : AMD Opteron(TM) Processor 6272

Eu tentei inicializar a máquina B com cpuid_mask_cpu=fam_10_rev_c no grub, mas também não ajudou.

Portanto, qualquer conselho sobre como lidar com isso ou sobre como abordar o provedor de hospedagem para executar essa VM em outra máquina física será muito apreciado.

    
por adamo 06.07.2012 / 21:53

1 resposta

2

Aparentemente, há um problema com a libc em máquinas Xen com suporte a AVX que pode causar esse erro. Por favor, veja esta ficha de problema do Chef , outra aplicação ruby, e um problema relacionado ao volk . Finalmente, o este tópico do ArchLinux ajudou-me a entender melhor o assunto.

Eis que o processador AMD Opteron (TM) 6272 suporta o AVX enquanto o 2423 NÃO .

Então ... você pode ser solicitado a mudar para outro processador, ou você pode recompilar a libc com --disable-multi-arch, o que fará com que ela ignore o AVX. Eu acho que você também poderia dizer ao Xen para ignorar o suporte ao AVX, mas não consigo encontrar como - talvez alguém mais inteligente do que eu possa lhe dizer.

    
por 31.07.2012 / 20:31