david/ipxe
Archived
1
0

[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 <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2014-04-28 20:20:44 +01:00
parent aaf276ccd4
commit e4593909a8

View File

@ -44,10 +44,10 @@ static unsigned long bios_currticks ( void ) {
uint8_t midnight; uint8_t midnight;
/* Re-enable interrupts so that the timer interrupt can occur */ /* Re-enable interrupts so that the timer interrupt can occur */
__asm__ __volatile__ ( REAL_CODE ( "sti\n\t" __asm__ __volatile__ ( "sti\n\t"
"nop\n\t" "nop\n\t"
"nop\n\t" "nop\n\t"
"cli\n\t" ) : : ); "cli\n\t" );
get_real ( ticks, BDA_SEG, 0x006c ); get_real ( ticks, BDA_SEG, 0x006c );
get_real ( midnight, BDA_SEG, 0x0070 ); get_real ( midnight, BDA_SEG, 0x0070 );