Details
-
Improvement
-
Status: Resolved
-
Normal
-
Resolution: Fixed
Description
A large contributor to slower buffered reads than mmapped is likely that we read a full 64Kb at once, when average record sizes may be as low as 140 bytes on our stress tests. The TLB has only 128 entries on a modern core, and each read will touch 32 of these, meaning we are unlikely to almost ever be hitting the TLB, and will be incurring at least 30 unnecessary misses each time (as well as the other costs of larger than necessary accesses). When working with an SSD there is little to no benefit reading more than 4Kb at once, and in either case reading more data than we need is wasteful. So, I propose selecting a buffer size that is the next larger power of 2 than our average record size (with a minimum of 4Kb), so that we expect to read in one operation. I also propose that we create a pool of these buffers up-front, and that we ensure they are all exactly aligned to a virtual page, so that the source and target operations each touch exactly one virtual page per 4Kb of expected record size.
Attachments
Attachments
Issue Links
- relates to
-
CASSANDRA-9786 Our index file seeks can be directed to the page most likely to contain the record, and read exactly one page
- Open
-
CASSANDRA-10407 Benchmark and evaluate CASSANDRA-8894 improvements
- Open
-
CASSANDRA-8897 Remove FileCacheService, instead pooling the buffers
- Resolved
- links to