Fast System Call

Internal structure and you change requests/suggestions
  • Отлично! Попробывал скомпилять и запучтить плоское ядро как обычно, всё зависло, попробую как ты сказал
    Есть идея по поводу вызова для 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
    Скомпилял как ты говорил, ядро вообе не завелось дальше меню загрузки.
  • 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.
  • Последняя ревизия в qemu и vmware виснет (черный экран после выбора параметров в qemu, в vmware - вылет). Делал все, как ты говорил: чистый 0.6.5.0, удалил драйверы и vrr_m
  • Heavyiron

    Qemu какой версии?
  • 090
  • Ядро ещё очень сырое. Дело в ОЗУ. 128Мб виснет 192Мб работает. Во всех эмуляторах.
  • Ну да, со 192 мб загрузилось :)
  • У меня (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
  • Ghost

    Это sysenter или syscall ? И на какой частотe? У меня 2600МГц
  • Баг с памятью исправил. Минимум надо 20Мб
  • Добавил в тест поддержку 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.
  • Ghost
    Я думал что SYSCALL быстрее чем SYSENTER. С Пнями всё просто. Привет от двадцатиступенчатого конвеера. С Прескотами должно быть ещё хуже. Команда наверное плохо распаралеливается а если ещё конвеер сбрасывается... У Р6 и Core должны быть лучше результаты по числу тактов.

    P.S.
    Я тестил в таком же окружении KFAR + Board
  • У меня система с обновленным flat_kernel загрузилась, но когда запустил тест, ушла на перезагрузку. Это было на реальном железе. То же произошло и в vmware. В qemu тест прошел для sysenter а дальше, судя по всему, тестовая прога вылетела, т. к. больше ничего не происходило и загрузка проца упала до 0.
  • Heavyiron

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

    15F1 C8EC SYSENTER
    44F6 8B90 Interrupt

    в среднем быстрее в 3.1 раза
  • Who is online

    Users browsing this forum: No registered users and 2 guests