Diferentes distribuições Linux produzindo código gerado por máquina diferente [fechado]

1

Eu tenho uma questão muito interessante e frustrante. A empresa em que trabalho usa um aplicativo para fazer simulação e verificação para engenharia elétrica. Este aplicativo produz saída com base em uma semente aleatória. Uma vez que você tenha a semente aleatória para uma dada simulação, você pode alimentar aquela semente aleatória de volta no aplicativo e obter resultados idênticos. Infelizmente, estamos enfrentando problemas nos quais diferentes distribuições do Linux estão produzindo resultados diferentes, considerando a mesma semente aleatória. Isso é problemático porque os engenheiros que utilizam essas ferramentas confiam na capacidade de reproduzir resultados exatos sempre. Eu devo mencionar que estamos usando exatamente a mesma versão do aplicativo em diferentes distribuições - na verdade, é montado por NFS, então é exatamente o mesmo ponto de instalação que é testado toda vez.

Neste ponto, estou testando com os seguintes sistemas operacionais:

CentOS 5
CentOS 6
SLES 11
openSuSE 11.4
openSuSE 12.1
openSuSE 12.2

Os resultados de alto nível que estou vendo são que o CentOS 5 e o SLES 11 produzem resultados idênticos, e o CentOS 6 e o openSuSE 11.4 / 12.1 / 12.2 produzem resultados idênticos. O CentOS 5 e o SLES 11 são as distribuições listadas como suportadas pelo fabricante do software, então, neste ponto, estamos analisando o resultado que essas duas distribuições produzem como a "correta". Eu não fui capaz de encontrar um conjunto consistente de semelhanças ou diferenças neste momento que me diz o que está acontecendo. Por exemplo, aqui estão as versões do kernel em uso nos diferentes sistemas:

CentOS 5 - 2.6.18
CentOS 6 - 2.6.32
SLES 11 - 3.0.51
openSuSE 11.4 - 2.6.37.6
openSuSE 12.1 - 3.1.10
openSuSE 12.2 - 3.4.11

Então, sem entrar em detalhes sobre quais correções podem ser aplicadas a quais versões de kernel nessas distribuições, eu já posso dizer que não é uma grande mudança entre 2.6 e 3.0, por exemplo, porque o SLES 11 e o CentOS 5 produzem resultados consistentes, ainda que tenham diferentes versões principais do kernel. Eu também olhei para a glibc e descobri que o openSuSE 11.4 e o SLES 11 tem versões muito próximas dos pacotes glibc (2.11.3).

Minha pergunta é a seguinte: onde os próximos lugares devem procurar para rastrear esse problema? Eu comecei a obter saída strace e tentando comparar isso, mas isso é muito demorado e de pouco valor quando a saída strace é muito diferente, mesmo entre distribuições que produzem saída idêntica. Não posso ir muito bem ao fabricante do aplicativo, pois as plataformas com as quais estou tendo problemas estão listadas como não suportadas, portanto, elas apenas me avisam para se perder. Alguma dica de onde ir daqui para rastrear o problema?

    
por Nick 08.02.2013 / 01:22

1 resposta

1

A última vez que me deparei com esse problema em particular, acabou sendo uma diferença se os dois sistemas operacionais estavam sendo executados no modo de 32 bits ou no modo de 64 bits. (A sugestão do @ kormoc é útil, pois gdb foi como eu o isolei) Como você não validou que essa condição era a mesma entre os servidores, eu recomendaria que você iniciasse sua pesquisa lá.

Se a arquitetura for diferente, você pode confirmar isso como a origem do problema, configurando um dos seus sistemas operacionais problemáticos com uma arquitetura correspondente e verificando se os resultados convergem mais uma vez. Isso deve fornecer aos desenvolvedores informações suficientes para trabalhar na implementação de sementes independentes da plataforma.

    
por 08.02.2013 / 01:32