Skip to content
Snippets Groups Projects
  • Pekka Enberg's avatar
    d4bcf559
    tests: Anonymous demand paging microbenchmark · d4bcf559
    Pekka Enberg authored
    
    This adds a simple mmap microbenchmark that can be run on both OSv and
    Linux.  The benchmark mmaps memory for various sizes and touches the
    mmap'd memory in 4K increments to fault in memory.  The benchmark also
    repeats the same tests using MAP_POPULATE for reference.
    
    OSv page faults are slightly slower than Linux on first iteration but
    faster on subsequent iterations after host operating system has faulted
    in memory for the guest.
    
    I've included full numbers on 2-core Sandy Bridge i7 for a OSv guest,
    Linux guest, and Linux host below:
    
      OSv guest
      ---------
    
      Iteration 1
    
           time (seconds)
       MiB demand populate
         1 0.004  0.000
         2 0.000  0.000
         4 0.000  0.000
         8 0.001  0.000
        16 0.003  0.000
        32 0.007  0.000
        64 0.013  0.000
       128 0.024  0.000
       256 0.052  0.001
       512 0.229  0.002
      1024 0.587  0.005
    
      Iteration 2
    
           time (seconds)
       MiB demand populate
         1 0.001  0.000
         2 0.000  0.000
         4 0.000  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.004  0.000
        64 0.010  0.000
       128 0.019  0.001
       256 0.036  0.001
       512 0.069  0.002
      1024 0.137  0.005
    
      Iteration 3
    
           time (seconds)
       MiB demand populate
         1 0.001  0.000
         2 0.000  0.000
         4 0.000  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.005  0.000
        64 0.010  0.000
       128 0.020  0.000
       256 0.039  0.001
       512 0.087  0.002
      1024 0.138  0.005
    
      Iteration 4
    
           time (seconds)
       MiB demand populate
         1 0.001  0.000
         2 0.000  0.000
         4 0.000  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.004  0.000
        64 0.012  0.000
       128 0.025  0.001
       256 0.040  0.001
       512 0.082  0.002
      1024 0.138  0.005
    
      Iteration 5
    
           time (seconds)
       MiB demand populate
         1 0.001  0.000
         2 0.000  0.000
         4 0.000  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.004  0.000
        64 0.012  0.000
       128 0.028  0.001
       256 0.040  0.001
       512 0.082  0.002
      1024 0.166  0.005
    
      Linux guest
      -----------
    
      Iteration 1
    
           time (seconds)
       MiB demand populate
         1 0.001  0.000
         2 0.001  0.000
         4 0.002  0.000
         8 0.003  0.000
        16 0.005  0.000
        32 0.008  0.000
        64 0.015  0.000
       128 0.151  0.001
       256 0.090  0.001
       512 0.266  0.003
      1024 0.401  0.006
    
      Iteration 2
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.000  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.005  0.000
        64 0.009  0.000
       128 0.019  0.001
       256 0.037  0.001
       512 0.072  0.003
      1024 0.144  0.006
    
      Iteration 3
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.001  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.005  0.000
        64 0.010  0.000
       128 0.019  0.001
       256 0.037  0.001
       512 0.072  0.003
      1024 0.143  0.006
    
      Iteration 4
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.001  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.003  0.000
        32 0.005  0.000
        64 0.010  0.000
       128 0.020  0.001
       256 0.038  0.001
       512 0.073  0.003
      1024 0.143  0.006
    
      Iteration 5
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.001  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.003  0.000
        32 0.005  0.000
        64 0.010  0.000
       128 0.020  0.001
       256 0.037  0.001
       512 0.072  0.003
      1024 0.144  0.006
    
      Linux host
      ----------
    
      Iteration 1
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.001  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.005  0.000
        64 0.009  0.000
       128 0.019  0.001
       256 0.035  0.001
       512 0.152  0.003
      1024 0.286  0.011
    
      Iteration 2
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.000  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.004  0.000
        64 0.010  0.000
       128 0.018  0.001
       256 0.035  0.001
       512 0.192  0.003
      1024 0.334  0.011
    
      Iteration 3
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.000  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.004  0.000
        64 0.010  0.000
       128 0.018  0.001
       256 0.035  0.001
       512 0.194  0.003
      1024 0.329  0.011
    
      Iteration 4
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.000  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.004  0.000
        64 0.010  0.000
       128 0.018  0.001
       256 0.036  0.001
       512 0.138  0.003
      1024 0.341  0.011
    
      Iteration 5
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.000  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.004  0.000
        64 0.010  0.000
       128 0.018  0.001
       256 0.035  0.001
       512 0.135  0.002
      1024 0.324  0.011
    
    Reviewed-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
    Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
    d4bcf559
    History
    tests: Anonymous demand paging microbenchmark
    Pekka Enberg authored
    
    This adds a simple mmap microbenchmark that can be run on both OSv and
    Linux.  The benchmark mmaps memory for various sizes and touches the
    mmap'd memory in 4K increments to fault in memory.  The benchmark also
    repeats the same tests using MAP_POPULATE for reference.
    
    OSv page faults are slightly slower than Linux on first iteration but
    faster on subsequent iterations after host operating system has faulted
    in memory for the guest.
    
    I've included full numbers on 2-core Sandy Bridge i7 for a OSv guest,
    Linux guest, and Linux host below:
    
      OSv guest
      ---------
    
      Iteration 1
    
           time (seconds)
       MiB demand populate
         1 0.004  0.000
         2 0.000  0.000
         4 0.000  0.000
         8 0.001  0.000
        16 0.003  0.000
        32 0.007  0.000
        64 0.013  0.000
       128 0.024  0.000
       256 0.052  0.001
       512 0.229  0.002
      1024 0.587  0.005
    
      Iteration 2
    
           time (seconds)
       MiB demand populate
         1 0.001  0.000
         2 0.000  0.000
         4 0.000  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.004  0.000
        64 0.010  0.000
       128 0.019  0.001
       256 0.036  0.001
       512 0.069  0.002
      1024 0.137  0.005
    
      Iteration 3
    
           time (seconds)
       MiB demand populate
         1 0.001  0.000
         2 0.000  0.000
         4 0.000  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.005  0.000
        64 0.010  0.000
       128 0.020  0.000
       256 0.039  0.001
       512 0.087  0.002
      1024 0.138  0.005
    
      Iteration 4
    
           time (seconds)
       MiB demand populate
         1 0.001  0.000
         2 0.000  0.000
         4 0.000  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.004  0.000
        64 0.012  0.000
       128 0.025  0.001
       256 0.040  0.001
       512 0.082  0.002
      1024 0.138  0.005
    
      Iteration 5
    
           time (seconds)
       MiB demand populate
         1 0.001  0.000
         2 0.000  0.000
         4 0.000  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.004  0.000
        64 0.012  0.000
       128 0.028  0.001
       256 0.040  0.001
       512 0.082  0.002
      1024 0.166  0.005
    
      Linux guest
      -----------
    
      Iteration 1
    
           time (seconds)
       MiB demand populate
         1 0.001  0.000
         2 0.001  0.000
         4 0.002  0.000
         8 0.003  0.000
        16 0.005  0.000
        32 0.008  0.000
        64 0.015  0.000
       128 0.151  0.001
       256 0.090  0.001
       512 0.266  0.003
      1024 0.401  0.006
    
      Iteration 2
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.000  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.005  0.000
        64 0.009  0.000
       128 0.019  0.001
       256 0.037  0.001
       512 0.072  0.003
      1024 0.144  0.006
    
      Iteration 3
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.001  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.005  0.000
        64 0.010  0.000
       128 0.019  0.001
       256 0.037  0.001
       512 0.072  0.003
      1024 0.143  0.006
    
      Iteration 4
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.001  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.003  0.000
        32 0.005  0.000
        64 0.010  0.000
       128 0.020  0.001
       256 0.038  0.001
       512 0.073  0.003
      1024 0.143  0.006
    
      Iteration 5
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.001  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.003  0.000
        32 0.005  0.000
        64 0.010  0.000
       128 0.020  0.001
       256 0.037  0.001
       512 0.072  0.003
      1024 0.144  0.006
    
      Linux host
      ----------
    
      Iteration 1
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.001  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.005  0.000
        64 0.009  0.000
       128 0.019  0.001
       256 0.035  0.001
       512 0.152  0.003
      1024 0.286  0.011
    
      Iteration 2
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.000  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.004  0.000
        64 0.010  0.000
       128 0.018  0.001
       256 0.035  0.001
       512 0.192  0.003
      1024 0.334  0.011
    
      Iteration 3
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.000  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.004  0.000
        64 0.010  0.000
       128 0.018  0.001
       256 0.035  0.001
       512 0.194  0.003
      1024 0.329  0.011
    
      Iteration 4
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.000  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.004  0.000
        64 0.010  0.000
       128 0.018  0.001
       256 0.036  0.001
       512 0.138  0.003
      1024 0.341  0.011
    
      Iteration 5
    
           time (seconds)
       MiB demand populate
         1 0.000  0.000
         2 0.000  0.000
         4 0.001  0.000
         8 0.001  0.000
        16 0.002  0.000
        32 0.004  0.000
        64 0.010  0.000
       128 0.018  0.001
       256 0.035  0.001
       512 0.135  0.002
      1024 0.324  0.011
    
    Reviewed-by: default avatarGlauber Costa <glommer@cloudius-systems.com>
    Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>