From e4593909a8a21c4a9d5766bf6a0770bcf6ee6911 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 28 Apr 2014 20:20:44 +0100 Subject: [PATCH] [pcbios] Do not switch to real mode to check for timer interrupt The currticks() function is called at least once per TCP packet, and so is performance-critical. Switching to real mode just to allow the timer interrupt to fire is expensive when running inside a virtual machine, and imposes a significant performance cost. Fix by enabling interrupts without switching to real mode. This results in an approximately 100% increase in download speed when running under KVM. Signed-off-by: Michael Brown --- src/arch/i386/interface/pcbios/bios_timer.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/arch/i386/interface/pcbios/bios_timer.c b/src/arch/i386/interface/pcbios/bios_timer.c index 3cb8756f..65bbf9e0 100644 --- a/src/arch/i386/interface/pcbios/bios_timer.c +++ b/src/arch/i386/interface/pcbios/bios_timer.c @@ -44,10 +44,10 @@ static unsigned long bios_currticks ( void ) { uint8_t midnight; /* Re-enable interrupts so that the timer interrupt can occur */ - __asm__ __volatile__ ( REAL_CODE ( "sti\n\t" - "nop\n\t" - "nop\n\t" - "cli\n\t" ) : : ); + __asm__ __volatile__ ( "sti\n\t" + "nop\n\t" + "nop\n\t" + "cli\n\t" ); get_real ( ticks, BDA_SEG, 0x006c ); get_real ( midnight, BDA_SEG, 0x0070 );