Page MenuHomeFreeBSD

D32249.id96185.diff
No OneTemporary

D32249.id96185.diff

diff --git a/stand/common/bcache.c b/stand/common/bcache.c
--- a/stand/common/bcache.c
+++ b/stand/common/bcache.c
@@ -238,17 +238,27 @@
if (BCACHE_LOOKUP(bc, (daddr_t)(blk + i))) {
bcache_misses += (nblk - i);
complete = 0;
- if (nblk - i > BCACHE_MINREADAHEAD && bc->ra > BCACHE_MINREADAHEAD)
- bc->ra >>= 1; /* reduce read ahead */
break;
} else {
bcache_hits++;
}
}
- if (complete) { /* whole set was in cache, return it */
+ /*
+ * Adjust read-ahead size if appropriate. Subject to the requirement
+ * that bc->ra must stay in between MINREADAHEAD and READAHEAD, we
+ * increase it when we notice that readahead was useful and decrease
+ * it when we notice that readahead was not useful.
+ */
+ if (complete) {
if (bc->ra < BCACHE_READAHEAD)
- bc->ra <<= 1; /* increase read ahead */
+ bc->ra <<= 1; /* increase read ahead */
+ } else {
+ if (nblk - i > BCACHE_MINREADAHEAD && bc->ra > BCACHE_MINREADAHEAD)
+ bc->ra >>= 1; /* reduce read ahead */
+ }
+
+ if (complete) { /* whole set was in cache, return it */
bcopy(bc->bcache_data + (bcache_blksize * BHASH(bc, blk)), buf, size);
goto done;
}

File Metadata

Mime Type
text/plain
Expires
Thu, Apr 16, 1:34 PM (15 h, 15 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31606860
Default Alt Text
D32249.id96185.diff (1 KB)

Event Timeline