swatt@ittvax.UUCP (Alan S. Watt) (12/30/83)
Does anyone have any information about the execution times on a VAX780 that might explain the following: A large program was changed in one function, and ran about 15% slower after the change. The function changed was never called in the test runs. The effect of the change was to make the changed function 8 bytes smaller. I created a third version by putting 8 'asm("nop");' statements at the end of the function, which made all external symbols have the same address as the earlier version. The result ran at the same speed as the first version. These tests were repeated enough times to wash out any normal variations in the UNIX timing mechanism. The difference of 15% was observed for tests running ~12 user CPU seconds and ~8 user CPU minutes. This was run on a reasonably quiet 4.1bsd system with 4Meg memory, and no abnormal paging load at the time of the tests. Both versions were complied and linked with -g (sdb symbols) and -p (profiling) options. The program in question is a Petrinet analysis program with essentially random data reference behavior during most of the execution. It uses a modified malloc() function which avoids the abominable paging behavior of the standard one. I remember hearing of strange crashes which occurred when instruction fetches crossed page boundaries under some special circumstances. The only theory I have is that adding those extra bytes displaced the remainder of the program such that significantly fewer instructions crossed between pages. - Alan S. Watt { decvax, duke, purdue, allgra, research }!ittvax!swatt decvax!ittvax!swatt@Berkeley (ARPA)