Тайм-аут в тестах при запуске pintos

Я только начинаю работать с проектами pintos, работая на своем домашнем компьютере с системой Ubuntu 14.04 x64.

Я могу скомпилировать проект из каталога src/threads/, и начальный тест pintos run alarm-multiple работает нормально (обратите внимание, что по умолчанию он запускает qemu):

zay@ubuntu:~/Documents/pintos/src/threads/build$ pintos run alarm-multiple
Prototype mismatch: sub main::SIGVTALRM () vs none at /home/zay/Documents/pintos/src/utils/pintos line 935.
Constant subroutine SIGVTALRM redefined at /home/zay/Documents/pintos/src/utils/pintos line 927.
qemu-system-x86_64 -drive cache=writeback,file=/tmp/YS3E7FICwo.dsk -m 4 -net none -serial stdio
PiLo hda1
Loading..........
Kernel command line: run alarm-multiple
Pintos booting with 4,088 kB RAM...
382 pages available in kernel pool.
382 pages available in user pool.
Calibrating timer...  286,310,400 loops/s.
Boot complete.
Executing 'alarm-multiple':
(alarm-multiple) begin
(alarm-multiple) Creating 5 threads to sleep 7 times each.
(alarm-multiple) Thread 0 sleeps 10 ticks each time,
(alarm-multiple) thread 1 sleeps 20 ticks each time, and so on.
(alarm-multiple) If successful, product of iteration count and
(alarm-multiple) sleep duration will appear in nondescending order.
(alarm-multiple) thread 0: duration=10, iteration=1, product=10
(alarm-multiple) thread 0: duration=10, iteration=2, product=20

Однако, когда я запускаю make check под src/threads/build, все тесты получают ошибку тайм-аута:

zay@ubuntu:~/Documents/pintos/src/threads/build$ make check
pintos -v -k -T 60 --qemu  -- -q  run alarm-multiple < /dev/null 2> tests/threads/alarm-multiple.errors > tests/threads/alarm-multiple.output
perl -I../.. ../../tests/threads/alarm-multiple.ck tests/threads/alarm-multiple tests/threads/alarm-multiple.result
FAIL tests/threads/alarm-multiple
run: TIMEOUT after 61 seconds of wall-clock time - load average: 0.20, 0.45, 0.26
pintos -v -k -T 60 --qemu  -- -q  run alarm-simultaneous < /dev/null 2> tests/threads/alarm-simultaneous.errors > tests/threads/alarm-simultaneous.output
perl -I../.. ../../tests/threads/alarm-simultaneous.ck tests/threads/alarm-simultaneous tests/threads/alarm-simultaneous.result
FAIL tests/threads/alarm-simultaneous
run: TIMEOUT after 61 seconds of wall-clock time - load average: 0.18, 0.40, 0.25
pintos -v -k -T 60 --qemu  -- -q  run alarm-priority < /dev/null 2> tests/threads/alarm-priority.errors > tests/threads/alarm-priority.output
perl -I../.. ../../tests/threads/alarm-priority.ck tests/threads/alarm-priority tests/threads/alarm-priority.result
FAIL tests/threads/alarm-priority
run: TIMEOUT after 61 seconds of wall-clock time - load average: 0.10, 0.34, 0.2

Какие изменения я должен внести, чтобы решить эту проблему?


person zay    schedule 01.10.2016    source источник


Ответы (2)


Судя по всему, QEMU больше не поддерживает последовательность отключения питания на порту 0x8900. Вот исправление, которое помогло мне (найдено в chaOs): в файле devices/shutdown.c patch shutdown_power_off следующим образом:

void
shutdown_power_off (void)
{
  // ...
  printf ("Powering off...\n");
  serial_flush ();
  outw (0xB004, 0x2000);  // <-- Add this line
  // ...
}
person bereal    schedule 24.07.2017
comment
Насколько я вижу, эта строка была включена в более новые версии; но я все еще получаю ту же ошибку, время от времени - person Daksh Shah; 07.02.2019

Если вы используете qemu для пинто. Вам нужно добавить одну строку кода в devices/shutdown.c.

Вставьте строку outw( 0x604, 0x0 | 0x2000 ); после printf (“Powering off…\n”); serial_flush ();, как показано ниже:

 /* This is a special power-off sequence supported by Bochs and
 QEMU, but not by physical hardware. */
 for (p = s; *p != '  printf ("Powering off...\n");
  serial_flush ();

//add the following line
outw( 0x604, 0x0 | 0x2000 );

Следуйте этому руководству, чтобы узнать больше.

person Nagamalla Rohith    schedule 25.04.2021
comment
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. – Из обзора - person ProfNandaa; 26.04.2021