• Anton Blanchard's avatar
    powerpc: Use enhanced touch instructions in POWER7 copy_to_user/copy_from_user · bce4b4bd
    Anton Blanchard authored
    Version 2.06 of the POWER ISA introduced enhanced touch instructions,
    allowing us to specify a number of attributes including the length of
    a stream.
    
    This patch adds a software stream for both loads and stores in the
    POWER7 copy_tofrom_user loop. Since the setup is quite complicated
    and we have to use an eieio to ensure correct ordering of the "GO"
    command we only do this for copies above 4kB.
    
    To quantify any performance improvements we need a working set
    bigger than the caches so we operate on a 1GB file:
    
    # dd if=/dev/zero of=/tmp/foo bs=1M count=1024
    
    And we compare how fast we can read the file:
    
    # dd if=/tmp/foo of=/dev/null bs=1M
    
    before: 7.7 GB/s
    after:  9.6 GB/s
    
    A 25% improvement.
    
    The worst case for this patch will be a completely L1 cache contained
    copy of just over 4kB. We can test this with the copy_to_user
    testcase we used to tune copy_tofrom_user originally:
    
    http://ozlabs.org/~anton/junkcode/copy_to_user.c
    
    # time ./copy_to_user2 -l 4224 -i 10000000
    
    before: 6.807 s
    after:  6.946 s
    
    A 2% slowdown, which seems reasonable considering our data is unlikely
    to be completely L1 contained.
    Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    bce4b4bd
copyuser_power7.S 13 KB