저는 가상 머신의 다중 프로세서 기록 재생 기능을 연구하고 있습니다. 가상 CPU가 가상 머신에서 수행한 비결정적 메모리 액세스 로그가 있습니다.
그것의 대부분은 커널 공간 메모리, 즉 0Xc0000000 이상을 가리킵니다.
예를 들어, 다음은 가상 머신에서 SPLASH 벤치마크를 실행한 후 가장 자주 액세스되는 10개의 커널 메모리 주소 목록입니다.
0xfffb5000
0xc1779db0
0xc18b6910
0xc1771a44
0xc1771a40
0xc1779e00
0xc18b67e0
0xc18b693c
0xc18b67f0
0xfffa1000
이 메모리 주소에 정확히 무엇이 있는지 알아낼 수 있는 방법이 있는지 궁금합니다. 커널 스택, vsyscall 페이지, 스케줄러의 준비 목록 등
이 문제를 해결할 수 있는 방법을 생각해 낼 수 있습니다 . 레코드 다시 로드 속도를 높이기 위한 오버헤드 Put...
커널 코드에서 위치를 보기 위한 시작 프롬프트
감사해요
답변1
실제 머신에서는 /boot/System.map*(배포판에서 해당 파일을 뭐라고 부르든)을 살펴보겠습니다.
내 생각에는 KVM 가상 머신 내에서도 마찬가지라고 생각됩니다.
답변2
KVM-QEMU는 디버깅을 지원합니다. 가상 머신에 연결하여 gdb
그 안에서 무슨 일이 일어나고 있는지 확인할 수 있습니다(물론 디버깅 기호를 올바르게 설정해야 합니다).
답변3
음, 일부 주소는 seqlocks에서 사용하는 증분기와 같은 커널의 정적 데이터를 가리킵니다.
커널은 objdump
주소의 절반 정도를 표시하지만 스택과 힙에 저장된 주소의 경우 objdump는 쓸모가 없습니다.
cat /proc/kallsysm
이를 포함하는 모듈에서 내보낸 모든 변수/함수를 표시합니다.
이 위치에 무엇이 저장되어 있는지 우리는 모르는 것 같습니다...