Page 2 of 10

Posted: Tue Mar 06, 2007 10:35 pm
by Serge
Первый "плоский" тест

186С 3084 fast call
44FD 7A70 interrupt

быстрее в 2.8 раза

Ядро на SVN branches/flat_kernel. Для правильных тестов надо в const.inc установить new_app_base в 0.

vrr надо отключить а драйверы лучше удалить.

Posted: Tue Mar 06, 2007 11:16 pm
by Ghost
Отлично! Попробывал скомпилять и запучтить плоское ядро как обычно, всё зависло, попробую как ты сказал
Есть идея по поводу вызова для sysenter (писал на бумаге т.ч. может не работать):

Code: Select all

; Application
push	ebp
mov	ebp, esp
push	$ + 7
sysenter
pop	edx
pop	ecx

; Kernel
;-------
; config CPL0 stack (как раньше)
;-------
push	ebp			; save app esp + 4
mov	ebp, [ebp]		; ebp - original ebp
;-------

;-------
xchg	ecx, [ss:esp]		; в вершин стека - app ecx, ecx - app esp + 4
sub	ecx, 4
xchg	edx, [ecx]
push	edx
mov	edx, [ss:esp - 4]		; Вот эти коэффициенты надо уточнить
mov	[ecx + 4], edx		;
pop	edx
sysexit
P.S. Serge
Скомпилял как ты говорил, ядро вообе не завелось дальше меню загрузки.

Posted: Wed Mar 07, 2007 8:39 am
by Serge
Ghost

> ; Bit 15–0 During the SYSCALL instruction, this field is copied into the CS register
> ; and the contents of this field, plus 8, are copied into the SS register.
> ; mov edx, (os_code + 16) * 65536 + os_code
> mov edx, 0x1B0013
os_code = 8
исправил на mov edx, 0x1B0008

Не знаю проверяется селектор или нет. Интелу по-барабану. Выдает gpf только на sysenter. АМДшные доки хранят молчании но
указывают что у селекторов должен быть rpl=0 для syscall и rpl=3 sysret

Попробуй скопировать на чистый 0.6.5.0 без драйверов и vrr_m

Я загружал только с дискеты, загрузку с диска не проверял.
Ещё грузил в Bochs, Quemu и VirtualPC.

Posted: Wed Mar 07, 2007 8:46 am
by Heavyiron
Последняя ревизия в qemu и vmware виснет (черный экран после выбора параметров в qemu, в vmware - вылет). Делал все, как ты говорил: чистый 0.6.5.0, удалил драйверы и vrr_m

Posted: Wed Mar 07, 2007 9:01 am
by Serge
Heavyiron

Qemu какой версии?

Posted: Wed Mar 07, 2007 10:13 am
by Heavyiron
090

Posted: Wed Mar 07, 2007 10:45 am
by Serge
Ядро ещё очень сырое. Дело в ОЗУ. 128Мб виснет 192Мб работает. Во всех эмуляторах.

Posted: Wed Mar 07, 2007 11:19 am
by Heavyiron
Ну да, со 192 мб загрузилось :)

Posted: Wed Mar 07, 2007 2:54 pm
by Ghost
У меня (AMD K7 Thoroughbred) результаты оказались скромней

08AF B0BB fast call
0E06 5333 interrupt

быстрее в 1.6 раза, но сами вызовы быстрее чем у Serge`а почти в пять раз.

P.S.
Подробно о SYSCALL/SYSRET здесь : http://www.amd.com/us-en/assets/content ... /21086.pdf

Posted: Wed Mar 07, 2007 3:12 pm
by Serge
Ghost

Это sysenter или syscall ? И на какой частотe? У меня 2600МГц

Posted: Wed Mar 07, 2007 3:52 pm
by Serge
Баг с памятью исправил. Минимум надо 20Мб

Posted: Wed Mar 07, 2007 5:22 pm
by Ghost
Добавил в тест поддержку SYSCALL, всё на svn. Результаты такие:

08CC A0D6 fast call (SYSENTER) - то что считалось в старом тесте
0A32 4364 fast call (SYSCALL) - только для AMD
0E09 2508 interrupt

Видно, что при sysenter прирост 1.6 при syscall 1.4.
Частота 2200 (рейтинг, реально 1800Mhz), но от частоты тест не зависит, он выдаёт количество тактов. Но сюда входят и такты от других процессов, и если например запустить какую нибудь демку паралельно с тестом цифры окажутся гораздо больше. Я запускал тест после обычного запуска дистриба (панель, иконки, заставка, etc) + доска отладки + kfar.

Posted: Wed Mar 07, 2007 6:05 pm
by Serge
Ghost
Я думал что SYSCALL быстрее чем SYSENTER. С Пнями всё просто. Привет от двадцатиступенчатого конвеера. С Прескотами должно быть ещё хуже. Команда наверное плохо распаралеливается а если ещё конвеер сбрасывается... У Р6 и Core должны быть лучше результаты по числу тактов.

P.S.
Я тестил в таком же окружении KFAR + Board

Posted: Thu Mar 08, 2007 4:14 am
by Heavyiron
У меня система с обновленным flat_kernel загрузилась, но когда запустил тест, ушла на перезагрузку. Это было на реальном железе. То же произошло и в vmware. В qemu тест прошел для sysenter а дальше, судя по всему, тестовая прога вылетела, т. к. больше ничего не происходило и загрузка проца упала до 0.

Posted: Thu Mar 08, 2007 2:34 pm
by Serge
Heavyiron

Если запускал тест с SVN мог виснуть syscall. У меня этой команды нет и тесты нормально прошли и на железе и в эмуляторе. После небольшой оптимизации стало лучше

15F1 C8EC SYSENTER
44F6 8B90 Interrupt

в среднем быстрее в 3.1 раза