* [Qemu-devel] Speed up hack
[not found] <200405170918.i4H9I4OR001702@treas.simtreas.ru>
@ 2004-05-17 16:22 ` Vladimir N. Oleynik
2004-05-17 21:12 ` Fabrice Bellard
0 siblings, 1 reply; 2+ messages in thread
From: Vladimir N. Oleynik @ 2004-05-17 16:22 UTC (permalink / raw)
To: qemu-devel
Hi.
I generate little speed up hack:
1) new TICKS_BEFORE_POLL constant from make cpu loop before
call poll().
2) call DMA_run() if sb16 or floppy present
3) also, for extreme overclocker: if change MAX_FD from 2 to 1,
you can make very little speed up also ;-)
--- vl.c~ 2004-05-17 20:15:26.000000000 +0400
+++ vl.c 2004-05-17 19:52:44.000000000 +0400
@@ -1634,6 +1634,8 @@
}
}
+#define TICKS_BEFORE_POLL 100
+
int main_loop(void)
{
#ifndef _WIN32
@@ -1641,6 +1643,7 @@
IOHandlerRecord *ioh, *ioh_next;
uint8_t buf[4096];
int n, max_size;
+ int tick_before_poll=TICKS_BEFORE_POLL;
#endif
int ret, timeout;
CPUState *env = global_env;
@@ -1670,6 +1673,11 @@
Sleep(timeout);
#else
+ if(tick_before_poll!=0 && timeout==0) {
+ tick_before_poll--;
+ goto ltick_before_poll;
+ }
+ tick_before_poll=TICKS_BEFORE_POLL;
/* poll any events */
/* XXX: separate device handlers from system ones */
pf = ufds;
@@ -1741,6 +1749,7 @@
}
#endif
+ ltick_before_poll:
#endif
if (vm_running) {
@@ -1750,10 +1759,18 @@
if (audio_enabled) {
/* XXX: add explicit timer */
SB16_run();
- }
+ DMA_run();
+ } else {
+ int i;
- /* run dma transfers, if any */
- DMA_run();
+ /* run dma transfers, if any */
+ for(i = 0; i < MAX_FD; i++) {
+ if(fd_table[i]) {
+ DMA_run();
+ break;
+ }
+ }
+ }
}
/* real time timers */
--w
vodz
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [Qemu-devel] Speed up hack
2004-05-17 16:22 ` [Qemu-devel] Speed up hack Vladimir N. Oleynik
@ 2004-05-17 21:12 ` Fabrice Bellard
0 siblings, 0 replies; 2+ messages in thread
From: Fabrice Bellard @ 2004-05-17 21:12 UTC (permalink / raw)
To: qemu-devel
Can you estimate the speed gains ? I am especially interested by the
poll() overhead. For the rest, optimizing DMA_run() would be simpler and
more efficient.
Fabrice.
Vladimir N. Oleynik wrote:
> Hi.
>
> I generate little speed up hack:
>
> 1) new TICKS_BEFORE_POLL constant from make cpu loop before
> call poll().
> 2) call DMA_run() if sb16 or floppy present
> 3) also, for extreme overclocker: if change MAX_FD from 2 to 1,
> you can make very little speed up also ;-)
>
>
> --- vl.c~ 2004-05-17 20:15:26.000000000 +0400
> +++ vl.c 2004-05-17 19:52:44.000000000 +0400
> @@ -1634,6 +1634,8 @@
> }
> }
>
> +#define TICKS_BEFORE_POLL 100
> +
> int main_loop(void)
> {
> #ifndef _WIN32
> @@ -1641,6 +1643,7 @@
> IOHandlerRecord *ioh, *ioh_next;
> uint8_t buf[4096];
> int n, max_size;
> + int tick_before_poll=TICKS_BEFORE_POLL;
> #endif
> int ret, timeout;
> CPUState *env = global_env;
> @@ -1670,6 +1673,11 @@
> Sleep(timeout);
> #else
>
> + if(tick_before_poll!=0 && timeout==0) {
> + tick_before_poll--;
> + goto ltick_before_poll;
> + }
> + tick_before_poll=TICKS_BEFORE_POLL;
> /* poll any events */
> /* XXX: separate device handlers from system ones */
> pf = ufds;
> @@ -1741,6 +1749,7 @@
> }
> #endif
>
> + ltick_before_poll:
> #endif
>
> if (vm_running) {
> @@ -1750,10 +1759,18 @@
> if (audio_enabled) {
> /* XXX: add explicit timer */
> SB16_run();
> - }
> + DMA_run();
> + } else {
> + int i;
>
> - /* run dma transfers, if any */
> - DMA_run();
> + /* run dma transfers, if any */
> + for(i = 0; i < MAX_FD; i++) {
> + if(fd_table[i]) {
> + DMA_run();
> + break;
> + }
> + }
> + }
> }
>
> /* real time timers */
>
>
> --w
> vodz
>
>
> _______________________________________________
> Qemu-devel mailing list
> Qemu-devel@nongnu.org
> http://mail.nongnu.org/mailman/listinfo/qemu-devel
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2004-05-17 21:11 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <200405170918.i4H9I4OR001702@treas.simtreas.ru>
2004-05-17 16:22 ` [Qemu-devel] Speed up hack Vladimir N. Oleynik
2004-05-17 21:12 ` Fabrice Bellard
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).