diff mbox

Speedup 'tb_find_slow' by using the same heuristic as during memory page lookup

Message ID alpine.DEB.2.00.1012021432510.24917@bulbul
State New
Headers show

Commit Message

Kirill Batuzov Dec. 2, 2010, 1:12 p.m. UTC
Move the last found TB to the head of the list so it will be found more quickly next time it will be looked for.

Signed-off-by: Kirill Batuzov <batuzovk@ispras.ru>
Signed-off-by: Pavel Yushchenko <pau@ispras.ru>
---

This patch appeared during investigation of performance issues with
S5PC110 emulation for Samsung. It increses OS startup speed significantly.

Changes from previous version, submitted with RFT tag:
 - 'likely' was added to if condition,
 - comment was added.

Comments

Blue Swirl Dec. 4, 2010, 8:11 p.m. UTC | #1
On Thu, Dec 2, 2010 at 1:12 PM, Kirill Batuzov <batuzovk@ispras.ru> wrote:
> Move the last found TB to the head of the list so it will be found more quickly next time it will be looked for.
>
> Signed-off-by: Kirill Batuzov <batuzovk@ispras.ru>
> Signed-off-by: Pavel Yushchenko <pau@ispras.ru>
> ---
>
> This patch appeared during investigation of performance issues with
> S5PC110 emulation for Samsung. It increses OS startup speed significantly.

The patch looks reasonable, but I didn't see any visible difference in
my tests. Could you report your numbers?
Kirill Batuzov Dec. 5, 2010, 7:14 a.m. UTC | #2
On 04.12.2010 23:11, Blue Swirl wrote:
> On Thu, Dec 2, 2010 at 1:12 PM, Kirill Batuzov<batuzovk@ispras.ru>  wrote:
>> Move the last found TB to the head of the list so it will be found more quickly next time it will be looked for.
>>
>> Signed-off-by: Kirill Batuzov<batuzovk@ispras.ru>
>> Signed-off-by: Pavel Yushchenko<pau@ispras.ru>
>> ---
>>
>> This patch appeared during investigation of performance issues with
>> S5PC110 emulation for Samsung. It increses OS startup speed significantly.
>
> The patch looks reasonable, but I didn't see any visible difference in
> my tests. Could you report your numbers?

The exact numbers depend on complexity of guest system.
  - For basic Debian system (no X-server) on versatilepb we observed 25% 
decrease of boot time.
  - For to-be released Samsung LIMO platform on S5PC110 board we 
observed 2x (for older version) and 3x (for newer version) decrease of 
boot time.
  - Small CPU-intensive benchmarks are not affected because they are 
completely handled by 'tb_find_fast'.

We also noticed better response time for heavyweight GUI applications, 
but I do not know how to measure it accurately.

----
   Kirill.
Blue Swirl Dec. 5, 2010, 8:22 a.m. UTC | #3
On Sun, Dec 5, 2010 at 7:14 AM, Kirill Batuzov <batuzovk@ispras.ru> wrote:
> On 04.12.2010 23:11, Blue Swirl wrote:
>>
>> On Thu, Dec 2, 2010 at 1:12 PM, Kirill Batuzov<batuzovk@ispras.ru>  wrote:
>>>
>>> Move the last found TB to the head of the list so it will be found more
>>> quickly next time it will be looked for.
>>>
>>> Signed-off-by: Kirill Batuzov<batuzovk@ispras.ru>
>>> Signed-off-by: Pavel Yushchenko<pau@ispras.ru>
>>> ---
>>>
>>> This patch appeared during investigation of performance issues with
>>> S5PC110 emulation for Samsung. It increses OS startup speed
>>> significantly.
>>
>> The patch looks reasonable, but I didn't see any visible difference in
>> my tests. Could you report your numbers?
>
> The exact numbers depend on complexity of guest system.
>  - For basic Debian system (no X-server) on versatilepb we observed 25%
> decrease of boot time.
>  - For to-be released Samsung LIMO platform on S5PC110 board we observed 2x
> (for older version) and 3x (for newer version) decrease of boot time.
>  - Small CPU-intensive benchmarks are not affected because they are
> completely handled by 'tb_find_fast'.
>
> We also noticed better response time for heavyweight GUI applications, but I
> do not know how to measure it accurately.

OK. Thanks, applied.
diff mbox

Patch

diff --git a/cpu-exec.c b/cpu-exec.c
index dbdfdcc..39e5eea 100644
--- a/cpu-exec.c
+++ b/cpu-exec.c
@@ -167,6 +167,12 @@  static TranslationBlock *tb_find_slow(target_ulong pc,
     tb = tb_gen_code(env, pc, cs_base, flags, 0);
 
  found:
+    /* Move the last found TB to the head of the list */
+    if (likely(*ptb1)) {
+        *ptb1 = tb->phys_hash_next;
+        tb->phys_hash_next = tb_phys_hash[h];
+        tb_phys_hash[h] = tb;
+    }
     /* we add the TB in the virtual pc hash table */
     env->tb_jmp_cache[tb_jmp_cache_hash_func(pc)] = tb;
     return tb;