VirtualBox

source: vbox/trunk/src/VBox/ValidationKit/bootsectors/bootsector2-test1.asm@ 86714

Last change on this file since 86714 was 85120, checked in by vboxsync, 4 years ago

ValKit/bs2-test1: IA32_FLUSH_CMD benchmark (disabled).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.6 KB
Line 
1; $Id: bootsector2-test1.asm 85120 2020-07-08 19:14:39Z vboxsync $
2;; @file
3; Bootsector that benchmarks I/O and MMIO roundtrip time.
4; VBoxManage setextradata bs-test1 VBoxInternal/Devices/VMMDev/0/Config/TestingEnabled 1
5; VBoxManage setextradata bs-test1 VBoxInternal/Devices/VMMDev/0/Config/TestingMMIO 1
6;
7
8;
9; Copyright (C) 2007-2020 Oracle Corporation
10;
11; This file is part of VirtualBox Open Source Edition (OSE), as
12; available from http://www.virtualbox.org. This file is free software;
13; you can redistribute it and/or modify it under the terms of the GNU
14; General Public License (GPL) as published by the Free Software
15; Foundation, in version 2 as it comes in the "COPYING" file of the
16; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
17; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18;
19; The contents of this file may alternatively be used under the terms
20; of the Common Development and Distribution License Version 1.0
21; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
22; VirtualBox OSE distribution, in which case the provisions of the
23; CDDL are applicable instead of those of the GPL.
24;
25; You may elect to license modified versions of this file under the
26; terms and conditions of either the GPL or the CDDL or both.
27;
28
29
30%include "iprt/asmdefs.mac"
31%include "iprt/x86.mac"
32%include "VBox/VMMDevTesting.mac"
33
34;; The number of instructions to test.
35%define TEST_INSTRUCTION_COUNT_IO 2000000
36
37;; The number of RDTSC instructions to test.
38%define TEST_INSTRUCTION_COUNT_RDTSC 4000000
39
40;; The number of RDTSC instructions to test.
41%define TEST_INSTRUCTION_COUNT_READCR4 1000000
42
43;; The number of instructions to test.
44%define TEST_INSTRUCTION_COUNT_MMIO 750000
45
46;; Define this to drop unnecessary test variations.
47%define QUICK_TEST
48
49;
50; Include and execute the init code.
51;
52 %define BS2_INIT_RM
53 %define BS2_INC_PE16
54 %define BS2_INC_PE32
55 %define BS2_INC_PP32
56 %define BS2_INC_PAE32
57 %define BS2_INC_LM64
58 %include "bootsector2-common-init-code.mac"
59
60
61;
62; The benchmark driver
63;
64BEGINPROC main
65 ;
66 ; Test prologue.
67 ;
68 mov ax, .s_szTstName
69 call TestInit_r86
70 call Bs2EnableA20_r86
71 call Bs2PanicIfVMMDevTestingIsMissing_r86
72
73%if 0
74 ;
75 ; IA32_FLUSH_CMD.
76 ;
77 mov ax, .s_szTstFlushCmd
78 call TestSub_r86
79 call BenchmarkFlushCmd_rm_pp32
80 call BenchmarkFlushCmd_rm_pae32
81 call BenchmarkFlushCmd_rm_lm64
82 call BenchmarkFlushCmd_rm_pe16
83 call BenchmarkFlushCmd_rm_pe32
84 call BenchmarkFlushCmd_rm_rm
85%endif
86
87 ;
88 ; CPUID.
89 ;
90 mov ax, .s_szTstCpuId
91 call TestSub_r86
92 call BenchmarkCpuId_rm_pp32
93 call BenchmarkCpuId_rm_pae32
94 call BenchmarkCpuId_rm_lm64
95 call BenchmarkCpuId_rm_pe16
96 call BenchmarkCpuId_rm_pe32
97 call BenchmarkCpuId_rm_rm
98
99 ;
100 ; RDTSC.
101 ;
102 mov ax, .s_szTstRdTsc
103 call TestSub_r86
104 call BenchmarkRdTsc_rm_pp32
105 call BenchmarkRdTsc_rm_pae32
106 call BenchmarkRdTsc_rm_lm64
107 call BenchmarkRdTsc_rm_pe16
108 call BenchmarkRdTsc_rm_pe32
109 call BenchmarkRdTsc_rm_rm
110
111 ;
112 ; Read CR4
113 ;
114 mov ax, .s_szTstRdCr4
115 call TestSub_r86
116 call BenchmarkRdCr4_rm_pp32
117 call BenchmarkRdCr4_rm_pae32
118 call BenchmarkRdCr4_rm_lm64
119 call BenchmarkRdCr4_rm_pe16
120 call BenchmarkRdCr4_rm_pe32
121 call BenchmarkRdCr4_rm_rm
122
123 ;
124 ; I/O port access.
125 ;
126 mov ax, .s_szTstNopIoPort
127 call TestSub_r86
128 call BenchmarkIoPortNop_rm_rm
129 call BenchmarkIoPortNop_rm_pe16
130 call BenchmarkIoPortNop_rm_pe32
131 call BenchmarkIoPortNop_rm_pp32
132 call BenchmarkIoPortNop_rm_pae32
133 call BenchmarkIoPortNop_rm_lm64
134
135 ;
136 ; MMIO access.
137 ;
138 mov ax, .s_szTstNopMmio
139 call TestSub_r86
140 call BenchmarkMmioNop_rm_pp32
141 call BenchmarkMmioNop_rm_pae32
142 call BenchmarkMmioNop_rm_lm64
143 call BenchmarkMmioNop_rm_pe16
144 call BenchmarkMmioNop_rm_pe32
145 call BenchmarkMmioNop_rm_rm
146
147 ;
148 ; We're done.
149 ;
150 call TestTerm_r86
151 call Bs2Panic
152
153.s_szTstName:
154 db 'tstIOIntr', 0
155.s_szTstCpuId:
156 db 'CPUID EAX=1', 0
157.s_szTstFlushCmd:
158 db 'IA32_FLUSH_CMD', 0
159.s_szTstRdTsc:
160 db 'RDTSC', 0
161.s_szTstRdCr4:
162 db 'Read CR4', 0
163.s_szTstNopIoPort:
164 db 'NOP I/O Port Access', 0
165.s_szTstNopMmio:
166 db 'NOP MMIO Access', 0
167ENDPROC main
168
169
170;
171; Instantiate the template code.
172;
173%include "bootsector2-template-footer.mac" ; reset the initial environemnt.
174
175%define TMPL_RM
176%include "bootsector2-test1-template.mac"
177;%define TMPL_CMN_V86
178;%include "bootsector2-test1-template.mac"
179%define TMPL_PE16
180%include "bootsector2-test1-template.mac"
181%define TMPL_PE32
182%include "bootsector2-test1-template.mac"
183;%define TMPL_PP16
184;%include "bootsector2-test1-template.mac"
185%define TMPL_PP32
186%include "bootsector2-test1-template.mac"
187;%define TMPL_PAE16
188;%include "bootsector2-test1-template.mac"
189%define TMPL_PAE32
190%include "bootsector2-test1-template.mac"
191;%define TMPL_LM16
192;%include "bootsector2-test1-template.mac"
193;%define TMPL_LM32
194;%include "bootsector2-test1-template.mac"
195%define TMPL_LM64
196%include "bootsector2-test1-template.mac"
197
198
199;
200; End sections and image.
201;
202%include "bootsector2-common-end.mac"
203
Note: See TracBrowser for help on using the repository browser.

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