WedX - журнал о программировании и компьютерных науках

Что означает время загрузки в QEMU?

Когда я загружаю Linux на qemu, в журнале загрузки есть отметка времени следующим образом:

[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.10.0 (zlp@lab302i-ES) (gcc version 4.9.3 20150626 (Red Hat 4.9.3-2) (GCC) ) #33 PREEMPT Mon Dec 2 14:39:51 CST 2019
[    0.000000] Config serial console: console=ttyS0,38400n8r
[    0.000000] bootconsole [early0] enabled
[    0.000000] CPU revision is: 00018900 (MIPS 5KE)
[    0.000000] FPU revision is: 00738900
[    0.000000] Software DMA cache coherency enabled
[    0.000000] Determined physical RAM map:
[    0.000000]  memory: 0000000000001000 @ 0000000000000000 (reserved)
[    0.000000]  memory: 00000000000ef000 @ 0000000000001000 (ROM data)
[    0.000000]  memory: 000000000071c000 @ 00000000000f0000 (reserved)
[    0.000000]  memory: 000000000f7f4000 @ 000000000080c000 (usable)
[    0.000000] Wasting 28840 bytes for tracking 515 unused pages
[    0.000000] Reserving 0MB of memory at 0MB for crashkernel
[    0.000000] Kernel command line: rd_start=0xffffffff80810000 rd_size=16642887 root=/dev/ram0 nokaslr console=ttyS0,38400n8r
[    0.000000] PID hash table entries: 1024 (order: -1, 8192 bytes)
[    0.000000] Dentry cache hash table entries: 32768 (order: 4, 262144 bytes)
[    0.000000] Inode-cache hash table entries: 16384 (order: 3, 131072 bytes)
[    0.000000] Cache parity protection disabled
[    0.000000] allocated 262128 bytes of page_cgroup
[    0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups
[    0.000000] Memory: 252272k/253904k available (4743k kernel code, 1632k reserved, 1899k data, 320k init, 0k highmem)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] Preemptible hierarchical RCU implementation.
[    0.000000] NR_IRQS:256
[    0.000000] Console: colour dummy device 80x25
[    0.000000] Calibrating delay loop... 1145.06 BogoMIPS (lpj=2236416)
[    0.074218] pid_max: default: 32768 minimum: 301
[    0.074218] Security Framework initialized
[    0.074218] AppArmor: AppArmor disabled by boot time parameter
[    0.074218] Mount-cache hash table entries: 1024
[    0.078125] Initializing cgroup subsys memory
[    0.078125] Initializing cgroup subsys devices
[    0.078125] Initializing cgroup subsys freezer
[    0.078125] Initializing cgroup subsys blkio
[    0.078125] Initializing cgroup subsys perf_event
[    0.089843] devtmpfs: initialized
[    0.093750] NET: Registered protocol family 16
...

В реальной плате отметка времени означает время загрузки. Теперь в QEMU, что это значит?

Это реальное время, затрачиваемое QEMU на запуск загрузочного кода Linux? Это точно?

Кажется, что эта отметка времени короче, чем реальная доска. Это из-за того, что у QEMU нет реальных операций ввода-вывода?

Могу ли я оценить потребление реального времени или пропорцию времени каждой части загрузки ядра реальной платы по журналу загрузки QEMU?

02.12.2019

Ответы:


1

В QEMU это означает гостевое время, воспринимаемое linux. Как оно соотносится со временем хоста, зависит от того, какое эмулированное устройство часов используется для измерения времени.

Ядро гостевой Linux обычно считывает некоторый регистр этого эмулируемого устройства часов и преобразует его в свое системное время, используя тактовую частоту, которая где-то настроена или измеряется ядром.

Эмулированные устройства с часами могут отображать часы на основе одного из типы внутренних часов QEMU, обычно QEMU_CLOCK_VIRTUAL, но не ограничиваются ими.

Когда используется QEMU_CLOCK_VIRTUAL, то, как он тикает, зависит от того, запущен ли QEMU с переключателем -icount или нет. Когда -icount не используется, QEMU_CLOCK_VIRTUAL тикает синхронно с часами хоста, когда работает гостевой ЦП. Когда используется -icount, он указывает, сколько наносекунд из QEMU_CLOCK_VIRTUAL времени занимает каждая выполняемая гостевая инструкция. QEMU_CLOCK_VIRTUAL затем отсчитывается пропорционально количеству гостевых инструкций, выполненных гостевым ЦП. Он также помечается, когда гостевой ЦП не выполняет гостевые инструкции (например, останавливается в ожидании прерывания), но я не знаю подробностей.

Это реальное время, затрачиваемое QEMU на запуск загрузочного кода Linux? Это точно?

Это имеет некоторое отношение ко времени, затраченному QEMU на запуск загрузочного кода Linux, но это не совсем так, и это зависит от конфигурации гостевого ядра, эмулируемого оборудования и способа запуска QEMU.

06.12.2019
  • Спасибо за Ваш ответ! Я прочитал ядро, и это i8254 PIT в качестве hrtimer, обеспечивающего часы для jiffies на машине malta (mips). И миги будут добавлены в PIT ISR. Тогда sche_clock основан на jiffies, а журнал времени printk основан на sche_clock. А i8254 в qemu получает часы по QEMU_CLOCK_VIRTUAL. Но если я отключу icount, время загрузки ядра в qemu будет короче, чем реальное время выполнения QEMU. Это из-за того, что PIT ISR не обрабатывается сразу? 06.12.2019
  • Часы находятся на хосте-›QEMU_CLOCK_VIRTUAL-›I8254-›jiffies-›sche_clock-›printk. Но время в принтках меньше. Почему из этого? 06.12.2019
  • Можете ли вы поделиться linux .config, который вы использовали для сборки ядра, и командной строкой qemu, которую вы использовали для его запуска? 06.12.2019
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]