• Christophe Leroy's avatar
    powerpc/vdso: Switch VDSO to generic C implementation. · ab037dd8
    Christophe Leroy authored
    With the C VDSO, the performance is slightly lower, but it is worth
    it as it will ease maintenance and evolution, and also brings clocks
    that are not supported with the ASM VDSO.
    
    On an 8xx at 132 MHz, vdsotest with the ASM VDSO:
      gettimeofday:    		  vdso:  828 nsec/call
      clock-getres-realtime-coarse:   vdso:  391 nsec/call
      clock-gettime-realtime-coarse:  vdso:  614 nsec/call
      clock-getres-realtime:    	  vdso:  460 nsec/call
      clock-gettime-realtime:    	  vdso:  876 nsec/call
      clock-getres-monotonic-coarse:  vdso:  399 nsec/call
      clock-gettime-monotonic-coarse: vdso:  691 nsec/call
      clock-getres-monotonic:    	  vdso:  460 nsec/call
      clock-gettime-monotonic:    	  vdso: 1026 nsec/call
    
    On an 8xx at 132 MHz, vdsotest with the C VDSO:
      gettimeofday:    		  vdso:  955 nsec/call
      clock-getres-realtime-coarse:   vdso:  545 nsec/call
      clock-gettime-realtime-coarse:  vdso:  592 nsec/call
      clock-getres-realtime:          vdso:  545 nsec/call
      clock-gettime-realtime:    	  vdso:  941 nsec/call
      clock-getres-monotonic-coarse:  vdso:  545 nsec/call
      clock-gettime-monotonic-coarse: vdso:  591 nsec/call
      clock-getres-monotonic:         vdso:  545 nsec/call
      clock-gettime-monotonic:        vdso:  940 nsec/call
    
    It is even better for gettime with monotonic clocks.
    
    Unsupported clocks with ASM VDSO:
      clock-gettime-boottime:         vdso: 3851 nsec/call
      clock-gettime-tai:      	  vdso: 3852 nsec/call
      clock-gettime-monotonic-raw:    vdso: 3396 nsec/call
    
    Same clocks with C VDSO:
      clock-gettime-tai:              vdso:  941 nsec/call
      clock-gettime-monotonic-raw:    vdso: 1001 nsec/call
      clock-gettime-monotonic-coarse: vdso:  591 nsec/call
    
    On an 8321E at 333 MHz, vdsotest with the ASM VDSO:
      gettimeofday:     		  vdso: 220 nsec/call
      clock-getres-realtime-coarse:   vdso: 102 nsec/call
      clock-gettime-realtime-coarse:  vdso: 178 nsec/call
      clock-getres-realtime:          vdso: 129 nsec/call
      clock-gettime-realtime:    	  vdso: 235 nsec/call
      clock-getres-monotonic-coarse:  vdso: 105 nsec/call
      clock-gettime-monotonic-coarse: vdso: 208 nsec/call
      clock-getres-monotonic:         vdso: 129 nsec/call
      clock-gettime-monotonic:        vdso: 274 nsec/call
    
    On an 8321E at 333 MHz, vdsotest with the C VDSO:
      gettimeofday:    		  vdso: 272 nsec/call
      clock-getres-realtime-coarse:   vdso: 160 nsec/call
      clock-gettime-realtime-coarse:  vdso: 184 nsec/call
      clock-getres-realtime:          vdso: 166 nsec/call
      clock-gettime-realtime:         vdso: 281 nsec/call
      clock-getres-monotonic-coarse:  vdso: 160 nsec/call
      clock-gettime-monotonic-coarse: vdso: 184 nsec/call
      clock-getres-monotonic:         vdso: 169 nsec/call
      clock-gettime-monotonic:        vdso: 275 nsec/call
    
    On a Power9 Nimbus DD2.2 at 3.8GHz, with the ASM VDSO:
      clock-gettime-monotonic:    	  vdso:  35 nsec/call
      clock-getres-monotonic:    	  vdso:  16 nsec/call
      clock-gettime-monotonic-coarse: vdso:  18 nsec/call
      clock-getres-monotonic-coarse:  vdso: 522 nsec/call
      clock-gettime-monotonic-raw:    vdso: 598 nsec/call
      clock-getres-monotonic-raw:     vdso: 520 nsec/call
      clock-gettime-realtime:    	  vdso:  34 nsec/call
      clock-getres-realtime:    	  vdso:  16 nsec/call
      clock-gettime-realtime-coarse:  vdso:  18 nsec/call
      clock-getres-realtime-coarse:   vdso: 517 nsec/call
      getcpu:    			  vdso:   8 nsec/call
      gettimeofday:    		  vdso:  25 nsec/call
    
    And with the C VDSO:
      clock-gettime-monotonic:    	  vdso:  37 nsec/call
      clock-getres-monotonic:    	  vdso:  20 nsec/call
      clock-gettime-monotonic-coarse: vdso:  21 nsec/call
      clock-getres-monotonic-coarse:  vdso:  19 nsec/call
      clock-gettime-monotonic-raw:    vdso:  38 nsec/call
      clock-getres-monotonic-raw:     vdso:  20 nsec/call
      clock-gettime-realtime:    	  vdso:  37 nsec/call
      clock-getres-realtime:    	  vdso:  20 nsec/call
      clock-gettime-realtime-coarse:  vdso:  20 nsec/call
      clock-getres-realtime-coarse:   vdso:  19 nsec/call
      getcpu:    			  vdso:   8 nsec/call
      gettimeofday:    		  vdso:  28 nsec/call
    Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20201126131006.2431205-8-mpe@ellerman.id.au
    ab037dd8
gettimeofday.S 1.32 KB