From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, stefanha@linux.vnet.ibm.com
Subject: [Qemu-devel] [PATCH 1.1 22/22] stream: move rate limiting to a separate header file
Date: Tue, 8 May 2012 16:52:02 +0200 [thread overview]
Message-ID: <1336488722-13120-23-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1336488722-13120-1-git-send-email-pbonzini@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
block/stream.c | 31 ++--------------------------
include/qemu/ratelimit.h | 50 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 52 insertions(+), 29 deletions(-)
create mode 100644 include/qemu/ratelimit.h
diff --git a/block/stream.c b/block/stream.c
index 7276307..a2ad376 100644
--- a/block/stream.c
+++ b/block/stream.c
@@ -13,6 +13,7 @@
#include "trace.h"
#include "block_int.h"
+#include "qemu/ratelimit.h"
enum {
/*
@@ -25,34 +26,6 @@ enum {
#define SLICE_TIME 100000000ULL /* ns */
-typedef struct {
- int64_t next_slice_time;
- uint64_t slice_quota;
- uint64_t dispatched;
-} RateLimit;
-
-static int64_t ratelimit_calculate_delay(RateLimit *limit, uint64_t n)
-{
- int64_t now = qemu_get_clock_ns(rt_clock);
-
- if (limit->next_slice_time < now) {
- limit->next_slice_time = now + SLICE_TIME;
- limit->dispatched = 0;
- }
- if (limit->dispatched == 0 || limit->dispatched + n <= limit->slice_quota) {
- limit->dispatched += n;
- return 0;
- } else {
- limit->dispatched = n;
- return limit->next_slice_time - now;
- }
-}
-
-static void ratelimit_set_speed(RateLimit *limit, uint64_t speed)
-{
- limit->slice_quota = speed / (1000000000ULL / SLICE_TIME);
-}
-
typedef struct StreamBlockJob {
BlockJob common;
RateLimit limit;
@@ -198,7 +171,7 @@ static void stream_set_speed(BlockJob *job, int64_t speed, Error **errp)
error_set(errp, QERR_INVALID_PARAMETER, "speed");
return;
}
- ratelimit_set_speed(&s->limit, speed / BDRV_SECTOR_SIZE);
+ ratelimit_set_speed(&s->limit, speed / BDRV_SECTOR_SIZE, SLICE_TIME);
}
static BlockJobType stream_job_type = {
diff --git a/include/qemu/ratelimit.h b/include/qemu/ratelimit.h
new file mode 100644
index 0000000..23baec7
--- /dev/null
+++ b/include/qemu/ratelimit.h
@@ -0,0 +1,50 @@
+/*
+ * Ratelimiting calculations
+ *
+ * Copyright IBM, Corp. 2011
+ *
+ * Authors:
+ * Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2 or later.
+ * See the COPYING.LIB file in the top-level directory.
+ *
+ */
+
+#ifndef QEMU_RATELIMIT_H
+#define QEMU_RATELIMIT_H 1
+
+#define SLICE_TIME 100000000ULL /* ns */
+
+typedef struct {
+ int64_t next_slice_time;
+ uint64_t slice_quota;
+ uint64_t slice_ns;
+ uint64_t dispatched;
+} RateLimit;
+
+static inline int64_t ratelimit_calculate_delay(RateLimit *limit, uint64_t n)
+{
+ int64_t now = qemu_get_clock_ns(rt_clock);
+
+ if (limit->next_slice_time < now) {
+ limit->next_slice_time = now + limit->slice_ns;
+ limit->dispatched = 0;
+ }
+ if (limit->dispatched == 0 || limit->dispatched + n <= limit->slice_quota) {
+ limit->dispatched += n;
+ return 0;
+ } else {
+ limit->dispatched = n;
+ return limit->next_slice_time - now;
+ }
+}
+
+static inline void ratelimit_set_speed(RateLimit *limit, uint64_t speed,
+ uint64_t slice_ns)
+{
+ limit->slice_ns = slice_ns;
+ limit->slice_quota = ((double)speed * 1000000000ULL) / slice_ns;
+}
+
+#endif
--
1.7.10.1
next prev parent reply other threads:[~2012-05-08 14:53 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-08 14:51 [Qemu-devel] [PATCH 1.1 00/22] Rebased queue of block patches Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 01/22] block: fix snapshot on QED Paolo Bonzini
2012-05-09 12:15 ` Kevin Wolf
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 02/22] block: another bdrv_append fix Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 03/22] block: do not reuse the backing file across bdrv_close/bdrv_open Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 04/22] block: fully delete bs->file when closing Paolo Bonzini
2012-05-09 12:22 ` Kevin Wolf
2012-05-09 12:59 ` Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 05/22] block: add block_job_sleep_ns Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 06/22] block: wait for job callback in block_job_cancel_sync Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 07/22] block: simplify path_is_absolute Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 08/22] block: protect path_has_protocol from filenames with colons Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 09/22] block: move field reset from bdrv_open_common to bdrv_close Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 10/22] qemu-img: make "info" backing file output correct and easier to use Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 11/22] qemu-io: correctly print non-integer values as decimals Paolo Bonzini
2012-05-09 12:46 ` Kevin Wolf
2012-05-09 12:48 ` Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 12/22] qemu-io: fix the alloc command Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 13/22] stream: fix sectors not allocated test Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 14/22] stream: add testcase for partial streaming Paolo Bonzini
2012-05-09 12:59 ` Kevin Wolf
2012-05-09 13:05 ` [Qemu-devel] [PATCH 1.1 v2 " Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 15/22] stream: pass new base image format to bdrv_change_backing_file Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 16/22] stream: fix HMP block_job_set_speed Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 17/22] stream: fix ratelimiting corner case Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 18/22] stream: do not copy unallocated sectors from the base Paolo Bonzini
2012-05-08 14:51 ` [Qemu-devel] [PATCH 1.1 19/22] block: implement is_allocated for raw Paolo Bonzini
2012-05-09 13:40 ` Kevin Wolf
2012-05-09 14:05 ` Paolo Bonzini
2012-05-09 14:10 ` Kevin Wolf
2012-05-09 14:24 ` Paolo Bonzini
2012-05-09 14:49 ` [Qemu-devel] [PATCH next v2 " Paolo Bonzini
2012-05-08 14:52 ` [Qemu-devel] [PATCH 1.1 20/22] stream: tweak usage of bdrv_co_is_allocated Paolo Bonzini
2012-05-08 14:52 ` [Qemu-devel] [PATCH 1.1 21/22] stream: move is_allocated_above to block.c Paolo Bonzini
2012-05-08 14:52 ` Paolo Bonzini [this message]
2012-05-09 13:52 ` [Qemu-devel] [PATCH 1.1 22/22] stream: move rate limiting to a separate header file Kevin Wolf
2012-05-09 14:09 ` [Qemu-devel] [PATCH 1.1 v2 " Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1336488722-13120-23-git-send-email-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).