VirtualBox

Ignore:
Timestamp:
Dec 31, 2014 3:33:55 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
97394
Message:

Test I/O and MMIO performance when we need to go to ring-3 to service the request.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bootsector2-test1-template.mac

    r53195 r53625  
    55
    66;
    7 ; Copyright (C) 2007-2014 Oracle Corporation
     7; Copyright (C) 2007-2015 Oracle Corporation
    88;
    99; This file is part of VirtualBox Open Source Edition (OSE), as
     
    166166%ifndef HaveIoPortPrologue
    167167%define HaveIoPortPrologue
    168 %macro IoPortPrologue 0
     168%macro IoPortPrologue 2
    169169        push    xBP
    170170        mov     xBP, xSP
     
    179179
    180180        ; Do the test.
    181         mov     dx, VMMDEV_TESTING_IOPORT_NOP
    182         mov     ecx, TEST_INSTRUCTION_COUNT_IO / 5
     181        mov     dx, %2
     182        mov     ecx, (%1) / 5
    183183%endmacro
    184184%endif
     
    189189%ifndef HaveIoPortEpilogue
    190190%define HaveIoPortEpilogue
    191 %macro IoPortEpilogue 0
     191%macro IoPortEpilogue 1
    192192        ; Calc the elapsed time and report the result.
    193193        mov     xAX, xSP
     
    195195
    196196        mov     xCX, .s_szTestName
    197         mov     edx, TEST_INSTRUCTION_COUNT_IO
     197        mov     edx, (%1)
    198198        mov     xAX, xSP
    199199        call    TMPL_NM_CMN(ReportResult)
     
    215215;
    216216BEGINPROC TMPL_NM(BenchmarkIoPortNop32In)
    217         IoPortPrologue
    218 .again:
    219         in      eax, dx
    220         in      eax, dx
    221         in      eax, dx
    222         in      eax, dx
    223         in      eax, dx
    224         dec     ecx
    225         jnz     .again
    226         IoPortEpilogue
     217        IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
     218.again:
     219        in      eax, dx
     220        in      eax, dx
     221        in      eax, dx
     222        in      eax, dx
     223        in      eax, dx
     224        dec     ecx
     225        jnz     .again
     226        IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
    227227.s_szTestName:
    228228        db TMPL_MODE_STR, ', 32-bit IN', 0
     
    236236;
    237237BEGINPROC TMPL_NM(BenchmarkIoPortNop32Out)
    238         IoPortPrologue
    239 .again:
    240         out     dx, eax
    241         out     dx, eax
    242         out     dx, eax
    243         out     dx, eax
    244         out     dx, eax
    245         dec     ecx
    246         jnz     .again
    247         IoPortEpilogue
     238        IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
     239.again:
     240        out     dx, eax
     241        out     dx, eax
     242        out     dx, eax
     243        out     dx, eax
     244        out     dx, eax
     245        dec     ecx
     246        jnz     .again
     247        IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
    248248.s_szTestName:
    249249        db TMPL_MODE_STR, ', 32-bit OUT', 0
     
    257257;
    258258BEGINPROC TMPL_NM(BenchmarkIoPortNop16In)
    259         IoPortPrologue
     259        IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
    260260.again:
    261261        in      ax, dx
     
    266266        dec     ecx
    267267        jnz     .again
    268         IoPortEpilogue
     268        IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
    269269.s_szTestName:
    270270        db TMPL_MODE_STR, ', 16-bit IN', 0
     
    278278;
    279279BEGINPROC TMPL_NM(BenchmarkIoPortNop16Out)
    280         IoPortPrologue
     280        IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
    281281.again:
    282282        out     dx, ax
     
    287287        dec     ecx
    288288        jnz     .again
    289         IoPortEpilogue
     289        IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
    290290.s_szTestName:
    291291        db TMPL_MODE_STR, ', 16-bit OUT', 0
     
    299299;
    300300BEGINPROC TMPL_NM(BenchmarkIoPortNop8In)
    301         IoPortPrologue
     301        IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
    302302.again:
    303303        in      al, dx
     
    308308        dec     ecx
    309309        jnz     .again
    310         IoPortEpilogue
     310        IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
    311311.s_szTestName:
    312312        db TMPL_MODE_STR, ', 8-bit IN', 0
     
    320320;
    321321BEGINPROC TMPL_NM(BenchmarkIoPortNop8Out)
    322         IoPortPrologue
     322        IoPortPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_IOPORT_NOP
    323323.again:
    324324        out     dx, al
     
    329329        dec     ecx
    330330        jnz     .again
    331         IoPortEpilogue
     331        IoPortEpilogue TEST_INSTRUCTION_COUNT_IO
    332332.s_szTestName:
    333333        db TMPL_MODE_STR, ', 8-bit OUT', 0
    334334ENDPROC TMPL_NM(BenchmarkIoPortNop8Out)
     335
     336
     337;;
     338; Benchmarks: IN eax, NOP_R3
     339;
     340; @uses     nothing
     341;
     342BEGINPROC TMPL_NM(BenchmarkIoPortRing3Nop32In)
     343        IoPortPrologue TEST_INSTRUCTION_COUNT_IO / 4, VMMDEV_TESTING_IOPORT_NOP_R3
     344.again:
     345        in      eax, dx
     346        in      eax, dx
     347        in      eax, dx
     348        in      eax, dx
     349        in      eax, dx
     350        dec     ecx
     351        jnz     .again
     352        IoPortEpilogue TEST_INSTRUCTION_COUNT_IO / 4
     353.s_szTestName:
     354        db TMPL_MODE_STR, ', 32-bit IN-to-ring-3', 0
     355ENDPROC TMPL_NM(BenchmarkIoPortRing3Nop32In)
     356
     357
     358;;
     359; Benchmarks: OUT NOP_R3, eax
     360;
     361; @uses     nothing
     362;
     363BEGINPROC TMPL_NM(BenchmarkIoPortRing3Nop32Out)
     364        IoPortPrologue TEST_INSTRUCTION_COUNT_IO / 4, VMMDEV_TESTING_IOPORT_NOP_R3
     365.again:
     366        out     dx, eax
     367        out     dx, eax
     368        out     dx, eax
     369        out     dx, eax
     370        out     dx, eax
     371        dec     ecx
     372        jnz     .again
     373        IoPortEpilogue TEST_INSTRUCTION_COUNT_IO / 4
     374.s_szTestName:
     375        db TMPL_MODE_STR, ', 32-bit OUT-to-ring-3', 0
     376ENDPROC TMPL_NM(BenchmarkIoPortRing3Nop32Out)
    335377
    336378
     
    360402        call    TMPL_NM(BenchmarkIoPortNop8Out)
    361403%endif
     404        call    TMPL_NM(BenchmarkIoPortRing3Nop32In)
     405        call    TMPL_NM(BenchmarkIoPortRing3Nop32Out)
    362406
    363407        call    TMPL_NM(Bs2ExitMode)
     
    377421%ifndef HaveMmioPrologue
    378422%define HaveMmioPrologue
    379 %macro MmioPrologue 0
     423%macro MmioPrologue 2
    380424        push    xBP
    381425        mov     xBP, xSP
     
    396440        mov     bx, VMMDEV_TESTING_MMIO_RM_SEL
    397441        mov     ds, bx
    398         mov     ebx, VMMDEV_TESTING_MMIO_RM_OFF(VMMDEV_TESTING_MMIO_NOP)
     442        mov     ebx, VMMDEV_TESTING_MMIO_RM_OFF(%2)
    399443 %else
    400444        mov     bx, BS2_SEL_MMIO16
    401445        mov     ds, bx
    402         mov     ebx, VMMDEV_TESTING_MMIO_NOP - BS2_SEL_MMIO16_BASE
     446        mov     ebx, %2 - BS2_SEL_MMIO16_BASE
    403447 %endif
    404448%else
    405         mov     xBX, VMMDEV_TESTING_MMIO_NOP
    406 %endif
    407         mov     ecx, TEST_INSTRUCTION_COUNT_MMIO / 5
     449        mov     xBX, %2
     450%endif
     451        mov     ecx, (%1) / 5
    408452%endmacro
    409453%endif
     
    413457%ifndef HaveMmioEpilogue
    414458%define HaveMmioEpilogue
    415 %macro MmioEpilogue 0
     459%macro MmioEpilogue 1
    416460%ifdef TMPL_16BIT
    417461        mov     ds, dx                  ; restore ds
     
    423467
    424468        mov     xCX, .s_szTestName
    425         mov     edx, TEST_INSTRUCTION_COUNT_MMIO
     469        mov     edx, (%1)
    426470        mov     xAX, xSP
    427471        call    TMPL_NM_CMN(ReportResult)
     
    444488;
    445489BEGINPROC TMPL_NM(BenchmarkMmioNop32Read)
    446         MmioPrologue
    447 .again:
    448         mov     eax, [sBX]
    449         mov     eax, [sBX]
    450         mov     eax, [sBX]
    451         mov     eax, [sBX]
    452         mov     eax, [sBX]
    453         dec     ecx
    454         jnz     .again
    455         MmioEpilogue
     490        MmioPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_MMIO_NOP
     491.again:
     492        mov     eax, [sBX]
     493        mov     eax, [sBX]
     494        mov     eax, [sBX]
     495        mov     eax, [sBX]
     496        mov     eax, [sBX]
     497        dec     ecx
     498        jnz     .again
     499        MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
    456500.s_szTestName:
    457501        db TMPL_MODE_STR, ', 32-bit read', 0
     
    460504
    461505;;
    462 ; Benchmarks: OUT NOP, eax
     506; Benchmarks: MOV [NOP], eax
    463507;
    464508; @uses     nothing
    465509;
    466510BEGINPROC TMPL_NM(BenchmarkMmioNop32Write)
    467         MmioPrologue
    468 .again:
    469         mov     [sBX], eax
    470         mov     [sBX], eax
    471         mov     [sBX], eax
    472         mov     [sBX], eax
    473         mov     [sBX], eax
    474         dec     ecx
    475         jnz     .again
    476         MmioEpilogue
     511        MmioPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_MMIO_NOP
     512.again:
     513        mov     [sBX], eax
     514        mov     [sBX], eax
     515        mov     [sBX], eax
     516        mov     [sBX], eax
     517        mov     [sBX], eax
     518        dec     ecx
     519        jnz     .again
     520        MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
    477521.s_szTestName:
    478522        db TMPL_MODE_STR, ', 32-bit write', 0
     
    486530;
    487531BEGINPROC TMPL_NM(BenchmarkMmioNop16Read)
    488         MmioPrologue
     532        MmioPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_MMIO_NOP
    489533.again:
    490534        mov     ax, [xBX]
     
    495539        dec     ecx
    496540        jnz     .again
    497         MmioEpilogue
     541        MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
    498542.s_szTestName:
    499543        db TMPL_MODE_STR, ', 16-bit read', 0
     
    502546
    503547;;
    504 ; Benchmarks: OUT NOP, ax
     548; Benchmarks: MOV [NOP], ax
    505549;
    506550; @uses     nothing
    507551;
    508552BEGINPROC TMPL_NM(BenchmarkMmioNop16Write)
    509         MmioPrologue
     553        MmioPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_MMIO_NOP
    510554.again:
    511555        mov     [xBX], ax
     
    516560        dec     ecx
    517561        jnz     .again
    518         MmioEpilogue
     562        MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
    519563.s_szTestName:
    520564        db TMPL_MODE_STR, ', 16-bit write', 0
     
    528572;
    529573BEGINPROC TMPL_NM(BenchmarkMmioNop8Read)
    530         MmioPrologue
     574        MmioPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_MMIO_NOP
    531575.again:
    532576        mov     al, [xBX]
     
    537581        dec     ecx
    538582        jnz     .again
    539         MmioEpilogue
     583        MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
    540584.s_szTestName:
    541585        db TMPL_MODE_STR, ', 8-bit read', 0
     
    544588
    545589;;
    546 ; Benchmarks: OUT NOP, al
     590; Benchmarks: MOV [NOP], al
    547591;
    548592; @uses     nothing
    549593;
    550594BEGINPROC TMPL_NM(BenchmarkMmioNop8Write)
    551         MmioPrologue
     595        MmioPrologue TEST_INSTRUCTION_COUNT_IO, VMMDEV_TESTING_MMIO_NOP
    552596.again:
    553597        mov     [xBX], al
     
    558602        dec     ecx
    559603        jnz     .again
    560         MmioEpilogue
     604        MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO
    561605.s_szTestName:
    562606        db TMPL_MODE_STR, ', 8-bit write', 0
    563607ENDPROC TMPL_NM(BenchmarkMmioNop8Write)
     608
     609
     610;;
     611; Benchmarks: MOV eax, [NOP_R3]
     612;
     613; @uses     nothing
     614;
     615BEGINPROC TMPL_NM(BenchmarkMmioRing3Nop32Read)
     616        MmioPrologue TEST_INSTRUCTION_COUNT_IO / 4, VMMDEV_TESTING_MMIO_NOP_R3
     617.again:
     618        mov     eax, [sBX]
     619        mov     eax, [sBX]
     620        mov     eax, [sBX]
     621        mov     eax, [sBX]
     622        mov     eax, [sBX]
     623        dec     ecx
     624        jnz     .again
     625        MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO / 4
     626.s_szTestName:
     627        db TMPL_MODE_STR, ', 32-bit read-to-ring-3', 0
     628ENDPROC TMPL_NM(BenchmarkMmioRing3Nop32Read)
     629
     630
     631;;
     632; Benchmarks: MOV [NOP_R3], eax
     633;
     634; @uses     nothing
     635;
     636BEGINPROC TMPL_NM(BenchmarkMmioRing3Nop32Write)
     637        MmioPrologue TEST_INSTRUCTION_COUNT_IO / 4, VMMDEV_TESTING_MMIO_NOP_R3
     638.again:
     639        mov     [sBX], eax
     640        mov     [sBX], eax
     641        mov     [sBX], eax
     642        mov     [sBX], eax
     643        mov     [sBX], eax
     644        dec     ecx
     645        jnz     .again
     646        MmioEpilogue TEST_INSTRUCTION_COUNT_MMIO / 4
     647.s_szTestName:
     648        db TMPL_MODE_STR, ', 32-bit write-to-ring-3', 0
     649ENDPROC TMPL_NM(BenchmarkMmioRing3Nop32Write)
    564650
    565651
     
    589675        call    TMPL_NM(BenchmarkMmioNop8Write)
    590676%endif
     677        call    TMPL_NM(BenchmarkMmioRing3Nop32Read)
     678        call    TMPL_NM(BenchmarkMmioRing3Nop32Write)
    591679
    592680        call    TMPL_NM(Bs2ExitMode)
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette