Qualcomm Hexagon "Comet Board"란 무엇입니까?

Qualcomm Hexagon "Comet Board"란 무엇입니까?

Linux 메인라인 커널에는 Qualcomm Hexagon DSP 아키텍처에 대한 지원이 포함되어 있습니다 arch/hexagon. 나열된 관리자는 MAINTAINERS다음과 같습니다.

QUALCOMM HEXAGON ARCHITECTURE
M:      Richard Kuo <[email protected]>
L:      [email protected]
S:      Supported
F:      arch/hexagon/

파일 arch/hexagon/configs/comet_defconfig에는구성 정의에 따르면 "Comet Board"라는 보드가 있습니다 arch/hexagon/Kconfig.

이 혜성 보드는 무엇입니까? 누가 그랬나요?

답변1

Rob Landley(Qualcomm&quic에서 "Linux를 설치하는 데 반년을 보냈습니다")는 이 마더보드에 대해 몇 가지 메모를 했습니다. 불특정 Snapdragon과 256MB 또는 RAM, 일부 네트워킹, 로컬 스토리지가 없는 사내 Qualcomm 마더보드입니다. 이 칩은 Nexus One에 있는 칩과 동일할 가능성이 높습니다.QSD8250(Snapdragon S1), 65nm에서 만들어진 600MHz의 일부 QDSP6, 아마도 qdsp6 V2일 것입니다.

https://landley.net/notes-2012.html#24-02-2012

사람들이 계속 이메일로 퀄컴 헥사곤에 대해 물어보았고, 나는 계속 긴 설명을 쓰다가 글쓰기를 중단했다. 다음은 후손을 위해 제가 최근에 쓴 이메일입니다. 1년 반이 지났고, 우리가 해왔던 기초 작업이 완료되었고 이제 이야기가 나올 수 있게 되었습니다.

이 작업에 대한 나의 계약은 2010년 10월에 만료되었으므로 다음은 1년 전의 막연한 기억입니다.

그들은 생산을 위해 제3자에게 아웃소싱하는 끔찍한 독점 제품인 내부 시뮬레이터를 가지고 있습니다. 제 기억이 맞다면 Qualcomm의 변호사들은 그들이 제대로 작동하는지 확인하기 위해 많은 노력을 기울였습니다.아니요소스 코드를 얻으세요. "독점 코드가 분명히 더 낫습니다."가 많기 때문입니다. 나는 이것이 그들에게 큰 타격을 줄 것으로 예상합니다. 왜냐하면 이 바보는 Linux 포팅에 쓸모가 없기 때문입니다.

대부분 우리는 실제 하드웨어를 사용합니다. 우리는 스냅드래곤 SOC와 약 256M의 메모리를 갖춘 "혜성" 보드라는 것을 가지고 있으며, 이 보드에서 부팅하고 코드를 실행할 수 있습니다. (로컬 저장소가 없어서 결국 비지박스에 nbd-client를 구현하여 일부를 얻었습니다.)

qemu에 육각형 지원을 추가하려는 시도가 있었지만 실패했습니다(Scott 누군가가 했습니다...). 불행히도 그것을 시도한 사람은 TCG를 이해하지 못했고(대부분 관리자였던 것 같습니다) 아무데도 가지 못했습니다. :( ...

Linux의 경우 100mhz에서 실행되는 6-way SMP 칩이지만 사이클당 최대 4개의 명령을 예약할 수 있으므로 300mhz에 가까운 성능으로 돌아갈 수 있습니다.

Snapdragon 시스템온칩(Nexus One과 같은 장치에서 볼 수 있음)에는 실제로 4개의 프로세서가 포함되어 있습니다.

1) ARMv7 "Scorpion" 프로세서 Qualcomm은 ARM으로부터 라이센스를 받은 다음 최적화했습니다(Raleigh 캠퍼스에서는 Qualcomm의 내부 정책인 자신들의 영역을 보호했습니다).

2) Qualcomm이 내부적으로 개발한 QDSP6 "Scorpion" 프로세서(오스틴). Android에서는 "멀티미디어 보조 프로세서"로 사용되지만 실제로는 많은 수의 벡터 명령을 갖춘 강력한 4방향 VLIW 범용 프로세서입니다. ...

Linux 포트의 경우 Hexagon이 시작된 후 나머지 3개의 프로세서를 종료했습니다. 저는 Nexus One에서 Android 앱으로 실행하여 육각형에서 Linux를 부팅할 수 있는 부트로더를 정말로 원하지만(uboot 및 kernel+initramfs blob을 메모리에 복사하고 ARMv5를 부팅하여 프로세서를 부팅하여 해당 uboot를 실행하고 ARM을 중지합니다) 나는 Richard Kuo나 다른 누구에게도 글을 쓰도록 할 수 없었습니다. (적어도 직렬 콘솔을 제공하기 위한 USB-직렬 어댑터가 없으면 작동하지 않습니다. 이는 간단한 문제가 아닙니다. 모든 Snapdragon 주변 장치 드라이버는 Android 트리에 있지만 Arch/arm 아래에 있습니다. Linutronix 사람들이 집중하는 가장 큰 일은 Hexagon이 사용할 수 있도록 공통 아키텍처로 가져오는 것입니다.

MMU에 대한 참고 사항: 이 칩에는 실제로 아직 MMU가 없습니다. 대신 소프트웨어에 의해 로드된 변환 참조 버퍼 슬롯 세트가 있습니다. 이들은 MMU 역할을 하는 바이너리 blob을 만들고 u-boot의 스냅드래곤 포트(armv5 부팅 프로세서에서 실행되는 것으로 생각됨)가 이 blob을 로드하고 페이지 오류 인터럽트에 연결하므로 소프트웨어 mmu( Linux 포트가 의존하는 포트).

기존 Snapdragon 칩(음, QDSP6v2라고 생각합니다)의 Hexagon 변형의 주요 문제점은 TLB 슬롯이 충분하지 않다는 것입니다. gcc 컴파일 등을 위해 전체 6방향 SMP를 실행하면 캐시에 심각한 영향을 미치고 속도가 느려집니다. 내 테스트에서 성능의 "최적 지점"은 -j3 또는 -j4 정도였습니다. 나는 우리가 이것을 QDSP6v3에 대해 고칠 만큼 충분히 빨리 포착하지 못했다고 생각합니다. (비록 이것이 레벨 4 500mhz 변형이기 때문에 어쨌든 TLB에 스트레스를 덜 주므로 최적의 지점에 어느 정도 있습니다)하다가지다). 하지만 QDSP6v4(제가 떠날 당시 개발 중이던)에는 더 많은 TLB 슬롯이 추가되어 Linux에서 성능이 크게 향상될 것입니다.

2013년부터 공개 minivm 하이퍼바이저 -http://permalink.gmane.org/gmane.linux.ports.hexagon/553v2 및 v3에만 사용 가능:https://www.codeaurora.org/projects/all-active-projects/hexagon-minivm"이 구현은 Hexagon 아키텍처 v2 및 v3에서만 실행됩니다."

Minivm 소스 코드는 다음과 같습니다.https://source.codeaurora.org/quic/hmvm/hexagonMVM/tree/minivm.S

#define TLB_ENTRIES 64
 * V2/V3 User/Supervisor Strategy:
 * MSB of ASID is used for User/Supervisor.

QDSP6v2(600MHz/6개 스레드)에 대한 매개변수도 Linux 소스 코드에 하드코딩되어 있습니다. http://elixir.free-electrons.com/linux/v4.12.3/source/arch/hexagon/kernel/setup.c#L56

/*
 * These will eventually be pulled in via either some hypervisor
 * or devicetree description.  Hardwiring for now.
 */
pcycle_freq_mhz = 600;
thread_freq_mhz = 100;
sleep_clk_freq = 32000;

...
 * This is just really brutal and shouldn't be used anyways,
 * especially on V2.  Left here just in case.

일부 시뮬레이터도 지원합니다(Hexagon-Sim인지 확실하지 않음).

/*
 * Simulator has a few differences from the hardware.
 * For now, check uninitialized-but-mapped memory
 * prior to invoking setup_arch_memory().
 */
if (*(int *)((unsigned long)_end + 8) == 0x1f1f1f1f)
    on_simulator = 1;

Linux 코드는 2009-2010년경에 작성되었습니다.http://elixir.free-electrons.com/linux/v4.12.3/source/arch/hexagon/lib/memcpy.S

 * History
 *
 *   DJH  5/15/09 Initial version 1.0
 *   DJH  6/ 1/09 Version 1.1 modified ABI to inlcude R16-R19
 *   DJH  7/12/09 Version 1.2 optimized codesize down to 760 was 840
 *   DJH 10/14/09 Version 1.3 added special loop for aligned case, was
..
 *   DJH  4/23/10 version 1.6

관련 정보