LSI 3Ware tw_cli e tdm2 segfault com kernels Debian Linux após 3.8

2

Eu já notifiquei o suporte do LSI duas vezes, mas até agora eles não conseguiram reproduzir o problema. Eu queria postar aqui para ter alguns pensamentos imparciais sobre isso e ver se alguém já viu um problema semelhante.

Gerenciamos vários servidores que fornecem serviços de Internet com IO de disco muito pesado. Todos executam testes Debian (Sid) -amd64 e usam placas RAID 3ware da série 85xx-96xx. Com as atualizações do kernel do Debian para 3.9.x-amd64, começamos a obter um segfault com o tw_cli. Testamos tdm2 e também segfaults.

Para reproduzir o problema: (Você não precisa de uma placa RAID no seu sistema para fazer isso) 1. Nova instalação do teste Debian (Sid). O ISO é link 2. Instale o tw_cli e tente executá-lo.

Nós rodamos tw_cli como root com strace abaixo de 3.2 e 3.9.6 / 3.9.8-amd64 e o segfault está acontecendo logo após o tw_cli chamar o uname, como você pode ver abaixo.

Boa corrida:

execve("/usr/local/sbin/tw_cli", ["tw_cli", "/c0", "show", "all"], ["TERM=xterm", "SHELL=/bin/bash", "SSH_CLIENT=71.207.183.174 60609 "..., "SSH_TTY=/dev/pts/0", "USER=root", "MAIL=/var/mail/root", "PATH=/usr/local/sbin:/usr/local/"..., "PWD=/root", "LANG=C", "PS1=\h:\w\$ ", "SHLVL=1", "HOME=/root", "LOGNAME=root", "SSH_CONNECTION=71.207.183.174 60"..., "_=/usr/bin/strace"]) = 0
uname({sysname="Linux", nodename="yorick.ironicdesign.com", release="3.2.0-4-amd64", version="#1 SMP Debian 3.2.46-1", machine="x86_64"}) = 0
brk(0)                                  = 0x2664000
brk(0x2685000)                          = 0x2685000
uname({sysname="Linux", nodename="yorick.ironicdesign.com", release="3.2.0-4-amd64", version="#1 SMP Debian 3.2.46-1", machine="x86_64"}) = 0
open("/proc/devices", O_RDONLY)         = 3
...

Execução incorreta:

execve("/usr/local/sbin/tw_cli", ["tw_cli", "/c0", "show", "all"], ["SHELL=/bin/bash", "TERM=screen", "SSH_CLIENT=98.26.9.112 58271 22", "SSH_TTY=/dev/pts/0", "USER=root", "SSH_AUTH_SOCK=/tmp/ssh-595iwzIik"..., "TERMCAP=SC|screen|VT 100/ANSI X3"..., "PATH=/usr/local/sbin:/usr/local/"..., "MAIL=/var/mail/root", "STY=17473.mdorman", "PWD=/root", "LANG=C", "PS1=\h:\w\$ ", "HOME=/root", "SHLVL=2", "LOGNAME=root", "WINDOW=0", "SSH_CONNECTION=98.26.9.112 58271"..., "_=/usr/bin/strace"]) = 0
uname({sysname="Linux", nodename="yorick.ironicdesign.com", release="3.10-1-amd64", version="#1 SMP Debian 3.10.1-1 (2013-07-16)", machine="x86_64"}) = 0
brk(0)                                  = 0x26ef000
brk(0x2710000)                          = 0x2710000
uname({sysname="Linux", nodename="yorick.ironicdesign.com", release="3.10-1-amd64", version="#1 SMP Debian 3.10.1-1 (2013-07-16)", machine="x86_64"}) = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---

Na boa execução acima, a próxima chamada após o uname é abrir / proc / devices que existem e não devem ser um problema. Algo mais que achamos que é notável e você pode vê-lo na má execução acima, uname no kernel 3.9 / 3.10 adiciona uma data à string.

Achamos que essas duas execuções de strace podem indicar que o tw_cli está falhando porque está obtendo uma resposta inesperada da chamada uname. O suporte do LSI diz:

"3dm2 e tw_cli funcionam bem, mesmo com os últimos kernels do Ubuntu 3.10.xe o Ubuntu geralmente extrai kernels instáveis do Debian e os usa para seus lançamentos."

FWIW, não sei ao certo o que o suporte do LSI está falando. Acabamos de testar com uma nova e atualizada instalação do Ubuntu 1304 (Raring Ringtail) e uname -a mostra "Linux mac-workstation 3.8.0-26-genérico # 38-Ubuntu SMP seg Jun 17 21:43:33 UTC 2013 x86_64 x86_64 x86_64 GNU / Linux ". Então o Ubuntu 1304 está usando o kernel 3.8, não 3.10. E tw_cli & tdm2 ambos funcionam bem.

Então, qualquer pensamento útil? No momento, nossas opções parecem ser: - fixe a versão do kernel em 3.2 e espere que o problema seja corrigido em breve - Pare de monitorar nossos RAIDs (não é realmente uma opção) - compilar kernels personalizados para todos os nossos servidores, porque aparentemente o kernel do Debian Testing tem esse problema - mude para o Ubuntu para todos os nossos servidores (não é viável) - mudar nossos cartões RAID para alguém como o Areca (também não é viável para servidores existentes, mas está sendo considerado para a próxima geração de servidores)

=================== acompanhamento =========================== =

Acabei de receber a seguinte resposta do suporte do LSI / 3ware. Receio que a minha resposta a eles não tenha sido muito boa, embora acredite que resumiu a situação com precisão.

O LSI / 3ware disse: Nós somos capazes de reproduzir o problema com o kernel instável do Debian 3.9-1-amd64, mas a engenharia não libera o software para kernels não estáveis ou liberados. Se possível, aguarde até que o Debian libere oficialmente o kernel. O 3dm2 e o tw_cli devem funcionar com o lançamento oficial do Ubuntu 13.04, incluindo os kernels atualizados 3.8.x a 3.10.

Minha resposta:

Então o resultado final é:

  • Você não fará uma nova instalação do Debian Testing, que reproduzirá o problema. Eu até lhe dei o link para o ISO de Teste "Oficial" que tem o problema.

Em vez disso, você primeiro compila um kernel personalizado que de alguma forma evita o problema. Então você pula OVER Testing para Unstable para reproduzir o problema. Exceto "engenharia não libera software para kernels não estáveis ou não liberados" ... então mais uma vez você evita ter que tomar qualquer ação.

  • Então você tem a coragem de sugerir que não estamos usando o lançamento oficial do Debian (nós somos) OU que podemos simplesmente desligar nossos serviços em execução em todos os nossos servidores e trocar para uma nova distribuição ???

A boa notícia para nós é que estamos na comunidade Debian e vamos deixar todos saberem como isso foi tratado pelo LSI. Isso vai enviar um sinal strong ao resto da comunidade Linux sobre a viabilidade a longo prazo de seus produtos.

Obrigado

============= minha conclusão =============

Sim, nós usamos o lançamento oficial do Debian Testing em produção e alguns acham que não é sábio.

No entanto, debater isso não resolve o problema, e eventualmente o kernel do Testing entra no Stable. E o tempo para qualquer fabricante consertar seu software proprietário que é essencial para o uso de seu produto é com a distribuição do Teste ... ANTES de chegar ao Estável.

Então, enquanto esperamos que o LSI / 3ware decida carregar o Debian Testing oficial e consertar seu software, nós provavelmente colocaremos o kernel em 3.2. Também podemos encontrar tempo para compilar um kernel 3.10 que não produza uma data com uname -r para ver se essa é realmente a causa. Se for, podemos conseguir que isso seja alterado na chamada uname do kernel.

    
por Andy Dorman 24.07.2013 / 15:39

4 respostas

5

Eu tive o mesmo problema aqui no Debian Testing com o Kernel 3.12.XXX. Para mim o comando setarch (ou linux64) funcionou:

web3:~# setarch x86_64 --uname-2.6 tw_cli /c0/u0 show all

ou

web3:~# linux64 --uname-2.6 tw_cli /c0/u0 show all
    
por 27.01.2014 / 15:17
3

O problema não é a data, é que tw_cli está procurando por XYZ (-R-arch) na versão e está apenas obtendo XY (-R-arch) - 3.2.0-4-amd64 vs 3.10-2 -amd64. Quando o release é definido como 3.10.0-2-amd64, ele é executado corretamente. Eles podem estar fazendo um sscanf () com formatos limitados e pouca ou nenhuma verificação de erros.

jam:~# uname -r
3.10-2-amd64
jam:~# tw_cli /c0 show firmware
Segmentation fault
jam:~# echo 3.10.0-2-amd64 > /sys/module/utsname/parameters/release
jam:~# uname -r
3.10.0-2-amd64
jam:~# tw_cli /c0 show firmware
/c0 Firmware Version = FE9X 4.10.00.027

Se o binário era dinâmico, você poderia ver sobre uma substituição uname () com LD_PRELOAD, mas é estático. Não há código-fonte, por isso nossas opções são limitadas:

  • O LSI / 3ware corrige o tw_cli, esperamos remover todo o absurdo do uname ()
  • Faça o Debian usar o X.Y.Z-R-arch no release
  • Alguém bom com a montagem vem com um patch binário ou algo semelhante
  • Executar um kernel personalizado
  • Executar um kernel antigo
  • Ditch 3ware

Eu gosto do meu 9650, mas isso é uma porcaria.

    
por 31.08.2013 / 03:53
0

Você não deve executar o teste Debian a menos que você queira testá-lo. Especialmente não em um servidor. Eu diria que tente reproduzi-lo no Debian estável.

Além disso, os cartões LSI 3ware vêm com uma excelente interface de administração baseada na web que permite configurá-lo para enviar alertas. Nesse caso, você não precisa usar o tw_cli em um script para enviar esses alertas por e-mail e, assim, evitar o problema que você está tendo.

Na verdade, pense nisso, se tdm2 segfaults, então a interface administrativa também não está funcionando ...

    
por 24.07.2013 / 20:55
0

Tenha o mesmo problema no teste Debian com o kernel 3.10 (incluindo o tw_cli segfault). Precisa mencionar, o teste Debian é muito mais estável que outras distros chamadas 'stable releases';) No entanto, parece que existe um problema relacionado à versão do kernel mais do que testar a distro. Voltou para o 3.2 e funciona bem, também esperando pela atualização do software LSI, mas temos 3ware 9500 series, então não há grandes esperanças para isso.

    
por 23.08.2013 / 10:09