diff options
author | Jakob Unterwurzacher | 2017-06-30 23:30:57 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2017-06-30 23:30:57 +0200 |
commit | 12c0101a232928e8969f23235ca45506e743d547 (patch) | |
tree | e7b16686ba038604151959d0e47d3a39ddbb40fa /internal | |
parent | e4b5005bcce471ab017a3f8e44e1298424aefad4 (diff) |
contentenc: add PReqPool and use it in DecryptBlocks
This gets us a massive speed boost in streaming reads.
Diffstat (limited to 'internal')
-rw-r--r-- | internal/contentenc/content.go | 5 | ||||
-rw-r--r-- | internal/fusefrontend/file.go | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/internal/contentenc/content.go b/internal/contentenc/content.go index 238683c..188b4e2 100644 --- a/internal/contentenc/content.go +++ b/internal/contentenc/content.go @@ -60,6 +60,8 @@ type ContentEnc struct { CReqPool bPool // Plaintext block pool. Always returns plainBS-sized byte slices. pBlockPool bPool + // Plaintext request data pool. Slice have size fuse.MAX_KERNEL_WRITE. + PReqPool bPool } // New returns an initialized ContentEnc instance. @@ -80,6 +82,7 @@ func New(cc *cryptocore.CryptoCore, plainBS uint64, forceDecode bool) *ContentEn cBlockPool: newBPool(int(cipherBS)), CReqPool: newBPool(cReqSize), pBlockPool: newBPool(int(plainBS)), + PReqPool: newBPool(fuse.MAX_KERNEL_WRITE), } return c } @@ -98,7 +101,7 @@ func (be *ContentEnc) CipherBS() uint64 { func (be *ContentEnc) DecryptBlocks(ciphertext []byte, firstBlockNo uint64, fileID []byte) ([]byte, error) { cBuf := bytes.NewBuffer(ciphertext) var err error - var pBuf bytes.Buffer + pBuf := bytes.NewBuffer(be.PReqPool.Get()[:0]) for cBuf.Len() > 0 { cBlock := cBuf.Next(int(be.cipherBS)) var pBlock []byte diff --git a/internal/fusefrontend/file.go b/internal/fusefrontend/file.go index 70c8d83..a1f4f15 100644 --- a/internal/fusefrontend/file.go +++ b/internal/fusefrontend/file.go @@ -214,7 +214,10 @@ func (f *file) doRead(dst []byte, off uint64, length uint64) ([]byte, fuse.Statu } // else: out stays empty, file was smaller than the requested offset - return append(dst, out...), fuse.OK + out = append(dst, out...) + f.fs.contentEnc.PReqPool.Put(plaintext) + + return out, fuse.OK } // Read - FUSE call |