Em uma máquina física, eu daria uma olhada em /boot/System.map* (qualquer que seja esse arquivo chamado em sua distribuição).
Meu palpite é que o mesmo acontece em uma VM KVM.
Eu estou trabalhando no recurso de replay de gravação de múltiplos processadores de uma máquina virtual.
Eu tenho um log de acesso à memória não-determinística feito na máquina virtual por CPUs virtuais.
Uma proporção muito alta delas aponta para a memória do espaço do kernel, ou seja, acima de 0Xc0000000.
Por exemplo, aqui está uma lista de 10 endereços de memória do kernel mais acessados após a execução do benchmark SPLASH na máquina Virtual
0xfffb5000
0xc1779db0
0xc18b6910
0xc1771a44
0xc1771a40
0xc1779e00
0xc18b67e0
0xc18b693c
0xc18b67f0
0xfffa1000
Eu quero saber se existe alguma maneira de encontrar o que exatamente está nesse endereço de memória ... é a pilha do kernel, a página vsyscall, a lista pronta do agendador ...
Para que eu possa pensar em alguma maneira de resolver essa sobrecarga para acelerar o replay ...
Dicas para onde procurar no código do kernel são bem-vindas
Obrigado
Em uma máquina física, eu daria uma olhada em /boot/System.map* (qualquer que seja esse arquivo chamado em sua distribuição).
Meu palpite é que o mesmo acontece em uma VM KVM.
O KVM-QEMU suporta depuração - você pode se conectar à máquina virtual com gdb
e ver o que está acontecendo lá (você precisará configurar os símbolos de depuração corretamente, é claro).
Bem,
parte do endereço aponta para dados estáticos nos incrementadores do kernel Ex usados pelo seqlocks.
Um objdump
do kernel revela cerca de metade desses endereços, mas para aqueles que são armazenados na pilha e o heap objdump não tem nenhum uso ...
cat /proc/kallsysm
revela todas as variáveis / funções que foram exportadas pelo módulo que as contém.
Eu não acho que podemos saber o que foi armazenado nesses locais ....
Tags kernel kvm linux virtual-memory