diff options
author | Simon Rettberg | 2013-11-17 12:48:11 +0100 |
---|---|---|
committer | Simon Rettberg | 2013-11-17 12:48:11 +0100 |
commit | f41c0c15c121cc01fa509e3ad4a1ad0b115ae78f (patch) | |
tree | 0792194e7749232c01e3f8f33d5bddbc15eedb13 | |
parent | [SERVER] Once again rework locking in uplink and freeing of resources to figh... (diff) | |
download | dnbd3-f41c0c15c121cc01fa509e3ad4a1ad0b115ae78f.tar.gz dnbd3-f41c0c15c121cc01fa509e3ad4a1ad0b115ae78f.tar.xz dnbd3-f41c0c15c121cc01fa509e3ad4a1ad0b115ae78f.zip |
[KERNEL] Don't pick a random block for RTT measurement
It's a bad idea.
-rw-r--r-- | src/kernel/net.c | 20 |
1 files changed, 3 insertions, 17 deletions
diff --git a/src/kernel/net.c b/src/kernel/net.c index e65801a..3db8da2 100644 --- a/src/kernel/net.c +++ b/src/kernel/net.c @@ -642,23 +642,9 @@ int dnbd3_net_discover(void *data) // Request block dnbd3_request.cmd = CMD_GET_BLOCK; - // Pick random block - if (dev->reported_size == 0) - { - dnbd3_request.offset = 0; - } - else if (sizeof(size_t) >= 8) - { - dnbd3_request.offset = ((((start.tv_sec << 12) ^ start.tv_usec) << 4) % dev->reported_size) - & ~(uint64_t)(RTT_BLOCK_SIZE - 1); - //printk("Random offset 64bit: %lluMiB\n", (unsigned long long)(dnbd3_request.offset >> 20)); - } - else // On 32bit, prevent modulo on a 64bit data type. This limits the random block picking to the first 4GB of the image - { - dnbd3_request.offset = ((((start.tv_sec << 12) ^ start.tv_usec) << 4) % (uint32_t)dev->reported_size) - & ~(RTT_BLOCK_SIZE - 1); - //printk("Random offset 32bit: %lluMiB\n", (unsigned long long)(dnbd3_request.offset >> 20)); - } + // Do *NOT* pick a random block as it has proven to cause severe + // cache thrashing on the server + dnbd3_request.offset = 0; dnbd3_request.size = RTT_BLOCK_SIZE; fixup_request(dnbd3_request); iov[0].iov_base = &dnbd3_request; |