summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2016-10-03 17:50:27 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2016-10-03 17:50:27 +0000
commit3f2f62252cf9dc60b229658e39f4fd2b47807654 (patch)
tree10ea15bf2bedf091e7b100e1baf98e13d0301267 /searchlib
parent3e73105ac58b6b64ca060ff8c95bcdc9a282a61f (diff)
Finally enable a larger swithing point for MMAP usage.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/docstore/visitcache.cpp33
1 files changed, 20 insertions, 13 deletions
diff --git a/searchlib/src/vespa/searchlib/docstore/visitcache.cpp b/searchlib/src/vespa/searchlib/docstore/visitcache.cpp
index 79d7fd4e26d..8129c427f4f 100644
--- a/searchlib/src/vespa/searchlib/docstore/visitcache.cpp
+++ b/searchlib/src/vespa/searchlib/docstore/visitcache.cpp
@@ -5,6 +5,12 @@
namespace search {
namespace docstore {
+using vespalib::ConstBufferRef;
+using vespalib::LockGuard;
+using vespalib::DataBuffer;
+using vespalib::alloc::Alloc;
+using vespalib::alloc::MemoryAllocator;
+
KeySet::KeySet(uint32_t key) :
_keys()
{
@@ -35,25 +41,25 @@ size_t getBufferSize(const BlobSet::Positions & p) {
}
-BlobSet::BlobSet(const Positions & positions, vespalib::alloc::Alloc && buffer) :
+BlobSet::BlobSet(const Positions & positions, Alloc && buffer) :
_positions(positions),
_buffer(std::move(buffer), getBufferSize(_positions))
{
}
void
-BlobSet::append(uint32_t lid, vespalib::ConstBufferRef blob) {
+BlobSet::append(uint32_t lid, ConstBufferRef blob) {
_positions.emplace_back(lid, getBufferSize(_positions), blob.size());
_buffer.write(blob.c_str(), blob.size());
}
-vespalib::ConstBufferRef
+ConstBufferRef
BlobSet::get(uint32_t lid) const
{
- vespalib::ConstBufferRef buf;
+ ConstBufferRef buf;
for (LidPosition pos : _positions) {
if (pos.lid() == lid) {
- buf = vespalib::ConstBufferRef(_buffer.c_str() + pos.offset(), pos.size());
+ buf = ConstBufferRef(_buffer.c_str() + pos.offset(), pos.size());
break;
}
}
@@ -73,8 +79,8 @@ CompressedBlobSet::CompressedBlobSet(const document::CompressionConfig &compress
_buffer()
{
if ( ! _positions.empty() ) {
- vespalib::DataBuffer compressed;
- vespalib::ConstBufferRef org = uncompressed.getBuffer();
+ DataBuffer compressed;
+ ConstBufferRef org = uncompressed.getBuffer();
_compression = document::compress(compression, org, compressed, false);
_buffer.resize(compressed.getDataLen());
memcpy(_buffer, compressed.getData(), compressed.getDataLen());
@@ -84,9 +90,10 @@ CompressedBlobSet::CompressedBlobSet(const document::CompressionConfig &compress
BlobSet
CompressedBlobSet::getBlobSet() const
{
- vespalib::DataBuffer uncompressed;
+ // These are frequent lage allocations that are to expensive to mmap.
+ DataBuffer uncompressed(0, 1, vespalib::DefaultAlloc::create(0, 16 * MemoryAllocator::HUGEPAGE_SIZE));
if ( ! _positions.empty() ) {
- document::decompress(_compression, getBufferSize(_positions), vespalib::ConstBufferRef(_buffer.c_str(), _buffer.size()), uncompressed, false);
+ document::decompress(_compression, getBufferSize(_positions), ConstBufferRef(_buffer.c_str(), _buffer.size()), uncompressed, false);
}
return BlobSet(_positions, uncompressed.stealBuffer());
}
@@ -103,14 +110,14 @@ public:
VisitCollector() :
_blobSet()
{ }
- void visit(uint32_t lid, vespalib::ConstBufferRef buf) override;
+ void visit(uint32_t lid, ConstBufferRef buf) override;
const BlobSet & getBlobSet() const { return _blobSet; }
private:
BlobSet _blobSet;
};
void
-VisitCollector::visit(uint32_t lid, vespalib::ConstBufferRef buf) {
+VisitCollector::visit(uint32_t lid, ConstBufferRef buf) {
if (buf.size() > 0) {
_blobSet.append(lid, buf);
}
@@ -133,7 +140,7 @@ VisitCache::VisitCache(IDataStore &store, size_t cacheSize, const document::Comp
}
VisitCache::Cache::IdSet
-VisitCache::Cache::findSetsContaining(const vespalib::LockGuard &, const KeySet & keys) const {
+VisitCache::Cache::findSetsContaining(const LockGuard &, const KeySet & keys) const {
IdSet found;
for (uint32_t subKey : keys.getKeys()) {
const auto foundLid = _lid2Id.find(subKey);
@@ -160,7 +167,7 @@ VisitCache::Cache::readSet(const KeySet & key)
}
void
-VisitCache::Cache::locateAndInvalidateOtherSubsets(const vespalib::LockGuard & cacheGuard, const KeySet & keys)
+VisitCache::Cache::locateAndInvalidateOtherSubsets(const LockGuard & cacheGuard, const KeySet & keys)
{
// Due to the implementation of insert where the global lock is released and the fact
// that 2 overlapping keysets kan have different keys and use different ValueLock