Changeset 72673 in vbox
- Timestamp:
- Jun 24, 2018 1:35:05 PM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 123186
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/NEMR3Native-win.cpp
r72672 r72673 3021 3021 * The VM was configured to automatically logon. A startup script was installed 3022 3022 * to perform the automatic shuting down and powering off the VM (thru 3023 * vts_shutdown.exe -f -p). The test time run time is caculated from the 3024 * monotonic VBox.log timestamps, starting with the state change to 'RUNNING' 3025 * and stopping at 'POWERING_OFF'. 3023 * vts_shutdown.exe -f -p). An offline snapshot of the VM was taken an restored 3024 * before each test run. The test time run time is calculated from the monotonic 3025 * VBox.log timestamps, starting with the state change to 'RUNNING' and stopping 3026 * at 'POWERING_OFF'. 3026 3027 * 3027 3028 * The host OS and VirtualBox build is the same as for the bootsector2-test1 … … 3056 3057 * once a basic performance level is reached. 3057 3058 * 3058 */ 3059 3059 * 3060 * @subsubsection subsection_iem_win_benchmarks_deb9_nat Debian 9 NAT performance 3061 * 3062 * This benchmark is about network performance over NAT from a 64-bit Debian 9 3063 * VM with a single CPU. For network performance measurements, we use our own 3064 * NetPerf tool (ValidationKit/utils/network/NetPerf.cpp) to measure latency 3065 * and throughput. 3066 * 3067 * The setups, builds and configurations are as in the previous benchmarks 3068 * (release r123172 on 1950X running 64-bit W10/17134). Please note that the 3069 * exit optimizations hasn't yet been in tuned with NetPerf in mind. 3070 * 3071 * The NAT network setup was selected here since it's the default one and the 3072 * slowest one. There is quite a bit of IPC with worker threads and packet 3073 * processing involved. 3074 * 3075 * Latency test is first up. This is a classic back and forth between the two 3076 * NetPerf instances, where the key measurement is the roundrip latency. The 3077 * values here are the lowest result over 3-6 runs. 3078 * 3079 * Against host system: 3080 * - 152 258 ns/roundtrip - 100% - regular VirtualBox SVM 3081 * - 271 059 ns/roundtrip - 178% - Hypercalls + VID.SYS in ring-0 with exit optimizations. 3082 * - 280 149 ns/roundtrip - 184% - Hypercalls + VID.SYS in ring-0 3083 * - 317 735 ns/roundtrip - 209% - Win HV API with exit optimizations. 3084 * - 342 440 ns/roundtrip - 225% - Win HV API 3085 * 3086 * Against a remote Windows 10 system over a 10Gbps link: 3087 * - 243 969 ns/roundtrip - 100% - regular VirtualBox SVM 3088 * - 384 427 ns/roundtrip - 158% - Win HV API with exit optimizations. 3089 * - 402 411 ns/roundtrip - 165% - Hypercalls + VID.SYS in ring-0 3090 * - 406 313 ns/roundtrip - 167% - Win HV API 3091 * - 413 160 ns/roundtrip - 169% - Hypercalls + VID.SYS in ring-0 with exit optimizations. 3092 * 3093 * What we see here is: 3094 * 3095 * - Consistent and signficant latency increase using Hyper-V compared 3096 * to directly harnessing AMD-V ourselves. 3097 * 3098 * - When talking to the host, it's clear that the hypercalls + VID.SYS 3099 * in ring-0 method pays off. 3100 * 3101 * - When talking to a different host, the numbers are closer and it 3102 * is not longer clear which Hyper-V execution method is better. 3103 * 3104 * 3105 * Throughput benchmarks are performed by one side pushing data full throttle 3106 * for 10 seconds (minus a 1 second at each end of the test), then reversing 3107 * the roles and measuring it in the other direction. The tests ran 3-5 times 3108 * and below are the highest and lowest results in each direction. 3109 * 3110 * Receiving from host system: 3111 * - Regular VirtualBox SVM: 3112 * Max: 96 907 549 bytes/s - 100% 3113 * Min: 86 912 095 bytes/s - 100% 3114 * - Hypercalls + VID.SYS in ring-0: 3115 * Max: 84 036 544 bytes/s - 87% 3116 * Min: 64 978 112 bytes/s - 75% 3117 * - Hypercalls + VID.SYS in ring-0 with exit optimizations: 3118 * Max: 77 760 699 bytes/s - 80% 3119 * Min: 72 677 171 bytes/s - 84% 3120 * - Win HV API with exit optimizations: 3121 * Max: 64 465 905 bytes/s - 67% 3122 * Min: 62 286 369 bytes/s - 72% 3123 * - Win HV API: 3124 * Max: 62 466 631 bytes/s - 64% 3125 * Min: 61 362 782 bytes/s - 70% 3126 * 3127 * Sending to the host system: 3128 * - Regular VirtualBox SVM: 3129 * Max: 87 728 652 bytes/s - 100% 3130 * Min: 86 923 198 bytes/s - 100% 3131 * - Hypercalls + VID.SYS in ring-0: 3132 * Max: 84 280 749 bytes/s - 96% 3133 * Min: 78 369 842 bytes/s - 90% 3134 * - Hypercalls + VID.SYS in ring-0 with exit optimizations: 3135 * Max: 84 119 932 bytes/s - 96% 3136 * Min: 77 396 811 bytes/s - 89% 3137 * - Win HV API: 3138 * Max: 81 714 377 bytes/s - 93% 3139 * Min: 78 697 419 bytes/s - 91% 3140 * - Win HV API with exit optimizations: 3141 * Max: 80 502 488 bytes/s - 91% 3142 * Min: 71 164 978 bytes/s - 82% 3143 * 3144 * Receiving from a remote Windows 10 system over a 10Gbps link: 3145 * - Hypercalls + VID.SYS in ring-0: 3146 * Max: 115 346 922 bytes/s - 136% 3147 * Min: 112 912 035 bytes/s - 137% 3148 * - Regular VirtualBox SVM: 3149 * Max: 84 517 504 bytes/s - 100% 3150 * Min: 82 597 049 bytes/s - 100% 3151 * - Hypercalls + VID.SYS in ring-0 with exit optimizations: 3152 * Max: 77 736 251 bytes/s - 92% 3153 * Min: 73 813 784 bytes/s - 89% 3154 * - Win HV API with exit optimizations: 3155 * Max: 63 035 587 bytes/s - 75% 3156 * Min: 57 538 380 bytes/s - 70% 3157 * - Win HV API: 3158 * Max: 62 279 185 bytes/s - 74% 3159 * Min: 56 813 866 bytes/s - 69% 3160 * 3161 * Sending to a remote Windows 10 system over a 10Gbps link: 3162 * - Win HV API with exit optimizations: 3163 * Max: 116 502 357 bytes/s - 103% 3164 * Min: 49 046 550 bytes/s - 59% 3165 * - Regular VirtualBox SVM: 3166 * Max: 113 030 991 bytes/s - 100% 3167 * Min: 83 059 511 bytes/s - 100% 3168 * - Hypercalls + VID.SYS in ring-0: 3169 * Max: 106 435 031 bytes/s - 94% 3170 * Min: 47 253 510 bytes/s - 57% 3171 * - Hypercalls + VID.SYS in ring-0 with exit optimizations: 3172 * Max: 94 842 287 bytes/s - 84% 3173 * Min: 68 362 172 bytes/s - 82% 3174 * - Win HV API: 3175 * Max: 65 165 225 bytes/s - 58% 3176 * Min: 47 246 573 bytes/s - 57% 3177 * 3178 * What we see here is: 3179 * 3180 * - Again consistent numbers when talking to the host. Showing that the 3181 * ring-0 approach is preferable to the ring-3 one. 3182 * 3183 * - Again when talking to a remote host, things get more difficult to 3184 * make sense of. The spread is larger and direct AMD-V gets beaten by 3185 * a different the Hyper-V approaches in each direction. 3186 * 3187 * - However, if we treat the first entry (remote host) as weird spikes, the 3188 * other entries are consistently worse compared to direct AMD-V. For the 3189 * send case we get really bad results for WinHV. 3190 * 3191 */ 3192
Note:
See TracChangeset
for help on using the changeset viewer.