How can we change the SectorsPerCluster value that is reported? In previous versions of CBFS I see a variable called SectorsPerAllocationUnit. I dont see this or anything similar in the newer versions of CBFS.

This is important to us, because a third-party application is determining the buffer size inside file write calls to be equal to the number of bytes in a cluster (lpSectorsPerCluster * lpBytesPerSector). Writing to 10MB files in 4KB chunks is too small for us, because of the overhead we have between each write call.

In the current version there is no possibility to specify the cluster size. Perhaps it will be added in future but now to workaround the problem maybe implementation of some intermediate buffer can help for you. I mean in the OnWrite callback you could write 4KB chunks to an intermediate buffer and then perform a real write of a big data chunk from that buffer.
Also there can be other third party programs that will perform writing small chunks always not depending on the cluster size. Of course, the latter isn't an argument in the case if the mentioned third party program is somehow important for you.

Thanks for your prompt response. Yes the third party application is important to us.

We could possibly optimize the code as you suggested. We would need to now store file information both in our current Database as well as local in memory for in progress files as the third party application could be verifying that the file info gets updated after each write.

I suppose we could try downgrading to a previous CBFS release for testing. Is the cluster support scheduled for development? If so; when would you expect it to be released?

We have no plans for such support. It doesn't matter if cluster size is 4Kb or 64Kb - write speed will be terribly slow anyway. Fine block size is 1Mb and larger - then writing speed is optimized. Indeed, local buffer is the best solution because it will improve speed of operations of any application.

We did implement a buffer over a year ago as you suggested, but we found that the performance in our application was still fairly slow. We ended up removing it, and just reduced the number of calls to the SQL Database (to update file size, etc..) per write request. With this change were were able to increase the performance with 4KB writes from approx 300KB/s to 650KB/Second but this is still too slow for some of our environments.

We did test with the sample Mapper application and it is able to get 4KB write speeds of approx 27,000 KB/Second so the performance is certainly due to our implementation.

In the third party application it is hard coded to write chunks = (lpSectorsPerCluster * lpBytesPerSector). In the case of the Eldos Drive Letter this = 4KB.

Have you reconsidered re-adding the ability to change the lpSectorsPerCluster value? Or do you think that Version 4 of CBFS will help with the performance?

We use cookies to help provide you with the best possible online experience. By using this site, you agree that we may store and access cookies on your device. You can find out more about and set your own preferences here.