QEMU потребляет много CPU для эмуляции ARM - PullRequest
0 голосов
/ 20 мая 2019

Я пишу операционную систему в учебных целях, я сосредоточен на RasPberry Pi3 в качестве целевой машины.Чтобы проверить мой код, я решил использовать QEMU для эмуляции оборудования Raspberry.Кстати, вопрос не в малине, а в эмуляции ARM в целом или каково стандартное поведение QEMU.Проблема в том, что когда я запускаю свое ядро ​​с помощью команды:

qemu-system-aarch64 -M raspi3 -monitor stdio -d in_asm -kernel kernel8.img 

, у меня есть 4 ядра моей хост-машины (x86_64 под управлением linux) при 100% использования.

Если быть более точным, мое ядро ​​вообще не ядро!Это всего лишь две строки сборки того, что будет являться загрузчиком ядра:

.section ".text.boot"

.global _start

_start:
1:      wfi
        b 1b

Так что я не думаю, что проблема в коде.Здесь дамп kernel8.elf

~> aarch64-elf-objdump -d kernel8.elf

kernel8.elf:     file format elf64-littleaarch64


Disassembly of section .text:

0000000000080000 <__start>:
   80000:       d503207f        wfi
   80004:       17ffffff        b       80000 <__start>

, также пытающийся сменить машину, такой raspi2 или versatilepb мало помогает, загрузка ЦП ниже, но все еще высока (в среднем 70%).Использование общей эмуляции ARM «-M virt» снижает нагрузку на ЦП, но при этом одно ядро ​​всегда на 100%, а другое - на 50%.

Это нормально ??Требует ли эмуляция ARM на x86 такой большой загрузки ЦП, учитывая чрезвычайную простоту кода, который я эмулирую?

...