2016-09-20 3 views
2

Linux/aarch64 (Cortex-a57)에서 정렬되지 않은 메모리 액세스를 기록하려면 어떻게해야합니까? . 즉, (정렬되지 않은 액세스의 CPU에서 인터럽트를 제기 정렬되지 않은 메모리를 중단하도록 선택Linux/aarch64에서 정렬되지 않은 액세스 로깅 및 디버그

  1. 그건 그렇지 않은 경우에 CPU에 의해 지원 될 것입니다 액세스 :

    나는이 여기에 포함 된 다른 두 가지가 이해 리눅스 (A SIGBUS/부드러운 모방 정렬되지 않은 액세스를/그 로그 화재) 이러한 인터럽트를 처리하는 방법을 선택하는 성능 비용)

내 문제는, 나는 CPU의 제어 레지스터를 관리하는 방법을 모르는 것입니다 ...에서 내 프로그램 (또는 도 내 사용자 공간 응용 프로그램에서이 실제로 실행되어야 함), 둘째, 리눅스에서 정렬되지 않은 액세스를 관리하기위한 /proc/cpu/alignment 인터페이스가 사라진 것 같습니다 (4.4.0 커널을 사용하고 있습니다). 아래 링크를 참조하십시오. 커널에서 정렬되지 않은 액세스를 관리

: https://www.kernel.org/doc/Documentation/arm/mem_alignment (가능성이 오래된)

관련 : Does AArch64 support unaligned access?

답변

1

당신은이 작업을 수행 할 수 없습니다. 리눅스에서는 그렇지 않습니다.

EL0에 대한 정렬 오류는 SCTLR_EL1.A 비트의 영향을 받지만 EL1에도 영향을줍니다. 따라서 사용자 인터페이스에서 직접 권한있는 시스템 제어 레지스터를 만질 수있는 해킹 커널 모듈을 작성한 경우에도 다음 네트워크 패킷이 도착하자마자 커널이 패닉 상태에 빠질 수 있습니다. arm64 커널 포트 에 AArch64에서 제공하는 정렬되지 않은 액세스 기능을 사용합니다. ARM 포트의 /proc/cpu/alignment 처리기가 없습니다. 정렬되지 않은 액세스를 전혀 지원하지 않는 ARMv6 이전 CPU의 레거시 (적어도 사용 가능한 모든 방식으로)가 없기 때문입니다.

당신 할 수는 있지만, 프로그램이 트리거 정렬되지 않은 액세스 관련 이벤트를 계산, 코어 텍스 A57의 microarchitectural PMU events 0x68, 0x69 또는 0x6a의 일부 또는 전부를 모니터링 할 수 perf tools를 사용합니다. 얼라인먼트 오류의 둔기 도구가있을 수 있으므로 개별 액세스를 트랩하거나 디버그 할 수는 없지만 이벤트가 프로그램에 귀속되기 때문에 더 유용 할 것입니다.

+0

그래서 커널이 자신과 사용자 영역에 대해 서로 다른 정렬 오류 처리를 설정할 수 없습니까? 언급했듯이 프로파일 링은 여기로가는 길입니다. 나는 더 엄격한 메모리 검사가 필요한 경우에 대비해 궁금해했다. –

관련 문제