Работающее ядро ​​Linux + конфигурация gem5 для загрузки FS в SMP x86 - PullRequest
3 голосов
/ 18 июня 2019

Я пытаюсь запустить имитацию gem5 FullSystem (FS) для ядра Linux 2.6.22.9 (так как бинарный файл был предоставлен gem5), а также с настраиваемым ядром Linux 3.4.112 на TimingSimpleCPU. Хотя оба они работают на одноядерной моделируемой машине x86 FS, они не загружаются на многоядерной моделируемой машине.

Я заблудился от того, как даже начать отладку. Я попытался подключиться к удаленному порту GDB, предоставленному Gem5 TimingSimpleCPU для каждого процессора на портах 7000, 7001 и так далее. Я вижу, что при двухъядерной загрузке после точки ядро ​​0 застревает при вызове schedule (), а ядро ​​1 всегда остается в состоянии idle () и никогда ничего не планирует (), пока ядро ​​0 также не застрянет в вызове schedule () .

Как правильно отладить gem5 и его совместимость с ядром Linux для многоядерной полной загрузки системы на архитектуре TimingSimpleCPU X86? Я думаю, что могут быть проблемы, связанные с поддержкой спин-блокировки или APIC.

1 Ответ

3 голосов
/ 18 июня 2019

X86 2-ядро Linux ядро ​​5.1, TimingSimpleCPU, gem5 08c79a194d1a3430801c04f37d13216cc9ec1da3 случайно работал на этой настройке: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/6aa2f783a8a18589ae66e85f781f86b08abb3397#gem5-buildroot-setup-getting-started Загрузка завершается, и cat /proc/cpuinfo сообщает 2 процессора.

Команда окончательного запуска была:

./run --cpus 2 --emulator gem5 -- --cpu-type TimingSimpleCPU

В этом репозитории указано все, включая сборку gem5, ядро ​​Linux и способ их запуска.

Затем, простым щелчком переключателя, работает то же самое.на aarch64, если вам интересно:

./run --arch aarch64 --cpus 2 --emulator gem5 -- --cpu-type TimingSimpleCPU

Затем я добавил опции --caches --l2cache в соответствии с комментарием OP, и теперь я воспроизвожу ошибку, к которой у меня нет решения:

./run --cpus 2 --emulator gem5 -- --cpu-type TimingSimpleCPU --caches --l2cache

Зависание загрузки, последнее сообщение терминала:

pci 0000:00:04.0: legacy IDE quirk: reg 0x1c: [io  0x0376]

и чуть выше мы можем увидеть подозрительное сообщение:

[Firmware Bug]: CPU1: APIC id mismatch. Firmware: 1 APIC: 0

Загрузка ARM с дополнительнымОднако параметры работали:

./run --arch aarch64 --cpus 2 --emulator gem5 -- --cpu-type TimingSimpleCPU --caches --l2cache

Однако позже я попытался использовать дополнительные параметры кэширования:

/run --arch aarch64 --emulator gem5 --cpu 2 --run-id 2 -- --cpu-type=HPI --caches --l2cache --l1d_size=64kB --l1i_size=64kB --l2_size=256kB

, но также произошел сбой, как объяснено в: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/99180e6616331b7385b09147f11f67962f9facc4#gem5-arm-multicore-hpi-boot-fails ...

Как отладить такие проблемы, чтобы все заработалочрезвычайно сложная проблема, требующая достаточного понимания ядра Linux + X86 ISA + gem5, где достаточно неопределенного.Этот процесс обучения тесно переплетается с включением только правильных опций журнала / фокусировкой на правой части кода.Эта установка просто сработала из "удачи".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...