diff options
| author | Dan Engelbrecht <[email protected]> | 2022-12-07 11:21:41 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-12-07 02:21:41 -0800 |
| commit | 100c8f966b1c5b2fb190748f0177600562d1c5fe (patch) | |
| tree | fc85e350dea47330149a1d42eb7a6c7ae0a06111 /zenutil/cache/cacherequests.cpp | |
| parent | Cache request record/replay (#198) (diff) | |
| download | zen-100c8f966b1c5b2fb190748f0177600562d1c5fe.tar.xz zen-100c8f966b1c5b2fb190748f0177600562d1c5fe.zip | |
optimizations (#200)
* Use direct file read and direct buffer allocation for small IoBuffer materalization
* Reduce range of materialized data in CompositeBuffer reading
CompressedBuffer header reading often only need a small part and not the whole file
* reduce lock contention in IoBuffer::Materialize
* Reduce parsing of compressed headers
Validate header type at decompression
* faster CreateDirectories - start from leaf going up and recurse back
* optimized BufferHeader::IsValid
* Add ValidateCompressedHeader to use when we don't need the actual compressed data
Validate that we always get compressed data in CidStore::AddChunk
* changelog
Diffstat (limited to 'zenutil/cache/cacherequests.cpp')
| -rw-r--r-- | zenutil/cache/cacherequests.cpp | 77 |
1 files changed, 38 insertions, 39 deletions
diff --git a/zenutil/cache/cacherequests.cpp b/zenutil/cache/cacherequests.cpp index 1ba2721b6..e6df4b4aa 100644 --- a/zenutil/cache/cacherequests.cpp +++ b/zenutil/cache/cacherequests.cpp @@ -227,7 +227,7 @@ namespace cacherequests { PutCacheRecordRequestValue& Value = Request.Values[It->second]; ZEN_ASSERT(Value.RawHash == ValueHash); Value.Body = Attachment->AsCompressedBinary(); - ZEN_ASSERT(IoHash::FromBLAKE3(Value.Body.GetRawHash()) == Value.RawHash); + ZEN_ASSERT_SLOW(IoHash::FromBLAKE3(Value.Body.DecodeRawHash()) == Value.RawHash); } } }); @@ -268,10 +268,10 @@ namespace cacherequests { const CompressedBuffer& Buffer = Value.Body; if (Buffer) { - IoHash AttachmentHash = IoHash::FromBLAKE3(Buffer.GetRawHash()); + IoHash AttachmentHash = IoHash::FromBLAKE3(Buffer.DecodeRawHash()); // TODO: Slow! Writer.AddBinaryAttachment("RawHash", AttachmentHash); OutPackage.AddAttachment(CbAttachment(Buffer, AttachmentHash)); - Writer.AddInteger("RawSize", Buffer.GetRawSize()); + Writer.AddInteger("RawSize", Buffer.DecodeRawSize()); // TODO: Slow! } else { @@ -500,12 +500,12 @@ namespace cacherequests { Writer.BeginArray("Values"); for (const GetCacheRecordResultValue& Value : RecordResult->Values) { - IoHash AttachmentHash = Value.Body ? IoHash::FromBLAKE3(Value.Body.GetRawHash()) : Value.RawHash; + IoHash AttachmentHash = Value.Body ? IoHash::FromBLAKE3(Value.Body.DecodeRawHash()) : Value.RawHash; Writer.BeginObject(); { Writer.AddObjectId("Id", Value.Id); Writer.AddHash("RawHash", AttachmentHash); - Writer.AddInteger("RawSize", Value.Body ? Value.Body.GetRawSize() : Value.RawSize); + Writer.AddInteger("RawSize", Value.Body ? Value.Body.DecodeRawSize() : Value.RawSize); } Writer.EndObject(); if (Value.Body) @@ -591,12 +591,11 @@ namespace cacherequests { WriteCacheRequestKey(Writer, ValueRequest.Key); if (ValueRequest.Body) { - if (ValueRequest.RawHash != IoHash::Zero && - IoHash::FromBLAKE3(ValueRequest.Body.GetRawHash()) != ValueRequest.RawHash) + IoHash AttachmentHash = IoHash::FromBLAKE3(ValueRequest.Body.DecodeRawHash()); + if (ValueRequest.RawHash != IoHash::Zero && AttachmentHash != ValueRequest.RawHash) { return false; } - IoHash AttachmentHash = IoHash::FromBLAKE3(ValueRequest.Body.GetRawHash()); Writer.AddBinaryAttachment("RawHash", AttachmentHash); OutPackage.AddAttachment(CbAttachment(ValueRequest.Body, AttachmentHash)); } @@ -776,7 +775,7 @@ namespace cacherequests { ValueResult.Body = Attachment ? Attachment->AsCompressedBinary() : CompressedBuffer(); if (ValueResult.Body) { - ValueResult.RawSize = ValueResult.Body.GetRawSize(); + ValueResult.RawSize = ValueResult.Body.DecodeRawSize(); } else { @@ -1042,8 +1041,8 @@ namespace cacherequests { static bool operator==(const PutCacheRecordRequestValue& Lhs, const PutCacheRecordRequestValue& Rhs) { - const IoHash LhsRawHash = Lhs.RawHash != IoHash::Zero ? Lhs.RawHash : IoHash::FromBLAKE3(Lhs.Body.GetRawHash()); - const IoHash RhsRawHash = Rhs.RawHash != IoHash::Zero ? Rhs.RawHash : IoHash::FromBLAKE3(Rhs.Body.GetRawHash()); + const IoHash LhsRawHash = Lhs.RawHash != IoHash::Zero ? Lhs.RawHash : IoHash::FromBLAKE3(Lhs.Body.DecodeRawHash()); + const IoHash RhsRawHash = Rhs.RawHash != IoHash::Zero ? Rhs.RawHash : IoHash::FromBLAKE3(Rhs.Body.DecodeRawHash()); return Lhs.Id == Rhs.Id && LhsRawHash == RhsRawHash && Lhs.Body.GetCompressed().Flatten().GetView().EqualBytes(Rhs.Body.GetCompressed().Flatten().GetView()); } @@ -1112,7 +1111,7 @@ namespace cacherequests { { return false; } - if (bool(Lhs.Body) && Lhs.Body.GetRawHash() != Rhs.Body.GetRawHash()) + if (bool(Lhs.Body) && Lhs.Body.DecodeRawHash() != Rhs.Body.DecodeRawHash()) { return false; } @@ -1313,31 +1312,31 @@ namespace cacherequests { GetCacheRecordsResult FullResult = { {GetCacheRecordResult{.Key = FullPutRequestCopy.Requests[0].Key, .Values = {{.Id = FullPutRequestCopy.Requests[0].Values[0].Id, - .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[0].Values[0].Body.GetRawHash()), - .RawSize = FullPutRequestCopy.Requests[0].Values[0].Body.GetRawSize(), + .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[0].Values[0].Body.DecodeRawHash()), + .RawSize = FullPutRequestCopy.Requests[0].Values[0].Body.DecodeRawSize(), .Body = FullPutRequestCopy.Requests[0].Values[0].Body}, {.Id = FullPutRequestCopy.Requests[0].Values[1].Id, - .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[0].Values[1].Body.GetRawHash()), - .RawSize = FullPutRequestCopy.Requests[0].Values[1].Body.GetRawSize(), + .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[0].Values[1].Body.DecodeRawHash()), + .RawSize = FullPutRequestCopy.Requests[0].Values[1].Body.DecodeRawSize(), .Body = FullPutRequestCopy.Requests[0].Values[1].Body}, {.Id = FullPutRequestCopy.Requests[0].Values[2].Id, - .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[0].Values[2].Body.GetRawHash()), - .RawSize = FullPutRequestCopy.Requests[0].Values[2].Body.GetRawSize(), + .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[0].Values[2].Body.DecodeRawHash()), + .RawSize = FullPutRequestCopy.Requests[0].Values[2].Body.DecodeRawSize(), .Body = FullPutRequestCopy.Requests[0].Values[2].Body}}}, {}, // Simulate not have! GetCacheRecordResult{.Key = FullPutRequestCopy.Requests[2].Key, .Values = {{.Id = FullPutRequestCopy.Requests[2].Values[0].Id, - .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[2].Values[0].Body.GetRawHash()), - .RawSize = FullPutRequestCopy.Requests[2].Values[0].Body.GetRawSize(), + .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[2].Values[0].Body.DecodeRawHash()), + .RawSize = FullPutRequestCopy.Requests[2].Values[0].Body.DecodeRawSize(), .Body = FullPutRequestCopy.Requests[2].Values[0].Body}, {.Id = FullPutRequestCopy.Requests[2].Values[1].Id, - .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[2].Values[1].Body.GetRawHash()), - .RawSize = FullPutRequestCopy.Requests[2].Values[1].Body.GetRawSize(), + .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[2].Values[1].Body.DecodeRawHash()), + .RawSize = FullPutRequestCopy.Requests[2].Values[1].Body.DecodeRawSize(), .Body = {}}, // Simulate not have {.Id = FullPutRequestCopy.Requests[2].Values[2].Id, - .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[2].Values[2].Body.GetRawHash()), - .RawSize = FullPutRequestCopy.Requests[2].Values[2].Body.GetRawSize(), + .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[2].Values[2].Body.DecodeRawHash()), + .RawSize = FullPutRequestCopy.Requests[2].Values[2].Body.DecodeRawSize(), .Body = FullPutRequestCopy.Requests[2].Values[2].Body}}}}}; CbPackage FullResponsePackage; CHECK(FullResult.Format(FullResponsePackage)); @@ -1369,15 +1368,15 @@ namespace cacherequests { .DefaultPolicy = CachePolicy::StoreLocal, .Namespace = "other_namespace", .Requests = {{.Key = {.Bucket = "finebucket", .Hash = IoHash::FromHexString("d1df59fcab06793a5f2c372d795bb907a15cab15")}, - .RawHash = IoHash::FromBLAKE3(Buffers[0].GetRawHash()), + .RawHash = IoHash::FromBLAKE3(Buffers[0].DecodeRawHash()), .Body = Buffers[0], .Policy = CachePolicy::Local}, {.Key = {.Bucket = "badbucket", .Hash = IoHash::FromHexString("177030568fdd461bf4fe5ddbf4d463e514e8178e")}, - .RawHash = IoHash::FromBLAKE3(Buffers[1].GetRawHash()), + .RawHash = IoHash::FromBLAKE3(Buffers[1].DecodeRawHash()), .Body = Buffers[1], .Policy = CachePolicy::Remote}, {.Key = {.Bucket = "badbucket", .Hash = IoHash::FromHexString("e1ce9e1ac8a6f5953dc14c1fa9512b804ed689df")}, - .RawHash = IoHash::FromBLAKE3(Buffers[2].GetRawHash())}}}; + .RawHash = IoHash::FromBLAKE3(Buffers[2].DecodeRawHash())}}}; CbPackage FullRequestPackage; CHECK(FullRequest.Format(FullRequestPackage)); @@ -1441,12 +1440,12 @@ namespace cacherequests { {MakeCompressedBuffer(5123), MakeCompressedBuffer(2321), MakeCompressedBuffer(2333)}}; CacheValuesResult FullResult = { .Results = { - CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][0].GetRawHash()), .Body = Buffers[0][0]}, - CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][1].GetRawHash()), .Body = Buffers[0][1]}, - CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][2].GetRawHash()), .Body = Buffers[0][2]}, - CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[2][0].GetRawHash()), .Body = Buffers[2][0]}, - CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[2][1].GetRawHash()), .Body = Buffers[2][1]}, - CacheValueResult{.RawSize = Buffers[2][2].GetRawSize(), .RawHash = IoHash::FromBLAKE3(Buffers[2][2].GetRawHash())}}}; + CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][0].DecodeRawHash()), .Body = Buffers[0][0]}, + CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][1].DecodeRawHash()), .Body = Buffers[0][1]}, + CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][2].DecodeRawHash()), .Body = Buffers[0][2]}, + CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[2][0].DecodeRawHash()), .Body = Buffers[2][0]}, + CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[2][1].DecodeRawHash()), .Body = Buffers[2][1]}, + CacheValueResult{.RawSize = Buffers[2][2].DecodeRawSize(), .RawHash = IoHash::FromBLAKE3(Buffers[2][2].DecodeRawHash())}}}; CbPackage FullResponsePackage; CHECK(FullResult.Format(FullResponsePackage)); CacheValuesResult FullResultCopy; @@ -1511,12 +1510,12 @@ namespace cacherequests { {MakeCompressedBuffer(5123), MakeCompressedBuffer(2321), MakeCompressedBuffer(2333)}}; GetCacheChunksResult FullResult = { .Results = { - CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][0].GetRawHash()), .Body = Buffers[0][0]}, - CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][1].GetRawHash()), .Body = Buffers[0][1]}, - CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][2].GetRawHash()), .Body = Buffers[0][2]}, - CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[2][0].GetRawHash()), .Body = Buffers[2][0]}, - CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[2][1].GetRawHash()), .Body = Buffers[2][1]}, - CacheValueResult{.RawSize = Buffers[2][2].GetRawSize(), .RawHash = IoHash::FromBLAKE3(Buffers[2][2].GetRawHash())}}}; + CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][0].DecodeRawHash()), .Body = Buffers[0][0]}, + CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][1].DecodeRawHash()), .Body = Buffers[0][1]}, + CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][2].DecodeRawHash()), .Body = Buffers[0][2]}, + CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[2][0].DecodeRawHash()), .Body = Buffers[2][0]}, + CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[2][1].DecodeRawHash()), .Body = Buffers[2][1]}, + CacheValueResult{.RawSize = Buffers[2][2].DecodeRawSize(), .RawHash = IoHash::FromBLAKE3(Buffers[2][2].DecodeRawHash())}}}; CbPackage FullResponsePackage; CHECK(FullResult.Format(FullResponsePackage)); GetCacheChunksResult FullResultCopy; |