• Anton Blanchard's avatar
    powerpc: Avoid taking a data miss on every userspace instruction miss · a7a9dcd8
    Anton Blanchard authored
    Early on in do_page_fault() we call store_updates_sp(), regardless of
    the type of exception. For an instruction miss this doesn't make
    sense, because we only use this information to detect if a data miss
    is the result of a stack expansion instruction or not.
    
    Worse still, it results in a data miss within every userspace
    instruction miss handler, because we try and load the very instruction
    we are about to install a pte for!
    
    A simple exec microbenchmark runs 6% faster on POWER8 with this fix:
    
     #include <stdlib.h>
     #include <stdio.h>
     #include <unistd.h>
    
    int main(int argc, char *argv[])
    {
    	unsigned long left = atol(argv[1]);
    	char leftstr[16];
    
    	if (left-- == 0)
    		return 0;
    
    	sprintf(leftstr, "%ld", left);
    	execlp(argv[0], argv[0], leftstr, NULL);
    	perror("exec failed\n");
    
    	return 0;
    }
    
    Pass the number of iterations on the command line (eg 10000) and time
    how long it takes to execute.
    Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    a7a9dcd8
fault.c 16.1 KB