VirtualBox

Changeset 72673 in vbox


Ignore:
Timestamp:
Jun 24, 2018 1:35:05 PM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
123186
Message:

NEM/win: Did some NAT benchmarking too. bugref:9044

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/NEMR3Native-win.cpp

    r72672 r72673  
    30213021 * The VM was configured to automatically logon.  A startup script was installed
    30223022 * 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'.
    30263027 *
    30273028 * The host OS and VirtualBox build is the same as for the bootsector2-test1
     
    30563057 * once a basic performance level is reached.
    30573058 *
    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.

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