Aplicativo C++. com mmap mata o kernel? (pânico do kernel com mmap)

Aplicativo C++. com mmap mata o kernel? (pânico do kernel com mmap)

Em meu programa C++, onde ocorre uso intensivo de disco, E/S de rede e até mesmo computação de CPU, estou usando a região mapeada de memória como uma matriz.

Com dados muito pequenos, funciona bem. No entanto, quando executei o programa com dados muito grandes, meu aplicativo travou. (Eu entendo perfeitamente que o tamanho da região mmap não deve ser uma preocupação porque o sistema operacional lidará com toda a E/S e buffer)

Não quero culpar o Linux por isso, mas gostaria de saber se há algum caso em que o 'mmap' se torna instável e pode fazer o sistema operacional travar?

Quando o sistema operacional trava, na tela posso ver a mensagem de kernel panic relacionada a algum blá, blá 'write_back' ... (adicionarei a mensagem aqui assim que reproduzir o problema)

// O programa usa operações de rede MPI na região mapeada de memória (Intel MPI com RDMA da Infiniband habilitado) onde o RDMA possivelmente ignora o kernel do sistema operacional e grava diretamente alguns dados na memória.

Investiguei a pilha de chamadas e encontrei alguns códigos do kernel: (http://lxr.free-electrons.com/source/fs/ext4/inode.c#L2313)

Acho que os erros vêm da armadilha 'BUG_ON' em #L2386 BUG_ON(PageWriteback(page)); a versão do kernel é 3.19.0 (https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.tar.xz)

insira a descrição da imagem aqui

Responder1

Você não podecausaum kernel panic através do uso indevido de qualquer chamada de sistema, mmapinclusive. A interface syscall não fornece ao chamador os recursos para corromper as estruturas de dados do kernel.

Eu procuraria um problema de hardware e prestaria muita atenção a quaisquer pistas nos logs do sistema, por exemplo /var/log/kernel.log. Como experiência, tentaria mapear o arquivo do mesmo tamanho em um sistema de arquivos diferente, porque o disco é o componente com maior probabilidade de falhar.

Isso épossívelvocê agradou um bug do kernel. Uma busca rápida porEscreva de voltaepânicoaparece [esse bug antigo].1 Se você estiver executando um kernel muito antigo, claro, provavelmente é hora de atualizar.

Responder2

Pela descrição em cooments, trata-se de uma falha no kernel (pânico). Definitivamente deverianuncaacontecer.

Que distribuição é essa? Qual versão do kernel? Arquitetura?

Primeiro atualize tudo. Se sua distribuição for End of Life, atualize. Então tente novamente.

Se persistir, você deverá ser capaz de tornar isso reproduzível com um pequeno programa C, que faz o mesmo mmap()que o seu programa C++, e repetir nessa memória uma dança semelhante à do C++ (talvez apenas tentando acessar "mais adiante" " basta). Reúna tudo e relate através do canal de relatórios de bugs da sua distribuição.

informação relacionada