In addition to generating hints, speculative execution will have other, less desirable performance effects. For example, since the speculating thread uses shadow code and performs copy-on-write, the speculating applications have larger memory footprints, consume memory more rapidly, and experience more page faults than the original applications. Table 6 shows that the memory footprints increase by 544 KB to 4.1 MB, the number of page reclaimes increases by 95 to 633, and the number of page faults increases by 12 to 40. In addition, the speculating applications may generate extraneous signals because speculative execution may use erroneous data in its calculations. Table 6 shows that the speculating applications generate up to 39 extraneous signals. However, many of the additional page reclaims and page faults, and all of the additional signals, will occur while the original thread is blocked on I/O, so that they would be nonobservable overhead. As described in Section 4.3, the observable overhead of these performance side-effects is captured within the less than 4% increases in runtime observed when hints were disabled.
Benchmark | Memory Footprint | Page Reclaims | Page Faults | Signals | |
---|---|---|---|---|---|
Agrep | Original | 160 KB | 39 | 4 | 0 |
SpecHint | 704 KB | 134 | 16 | 0 | |
Manual | 152 KB | 39 | 4 | 0 | |
Gnuld | Original | 10.1 MB | 1,341 | 12 | 0 |
SpecHint | 14.2 MB | 1,974 | 52 | 39 | |
Manual | 10.5 MB | 1,389 | 14 | 0 | |
XDataSlice | Original | 62.0 MB | 8,105 | 61 | 0 |
SpecHint | 62.5 MB | 8,202 | 93 | 2 | |
Manual | 62.1 MB | 8,104 | 60 | 0 |