From 3f447f5105beff5d4a82461a09fddc448761bcdd Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Sat, 25 Feb 2017 17:49:34 +0100 Subject: cyber_file: enable large-chunk CYBER reads Allowing for reading CYBER in much larger chunks boosts read perfomance on the Designated CYBER Test System (DCTS) from 4.2 Gibibyte per second to 6.66 Gibibyte per second. All hail CYBER! --- README.rst | 2 +- src/cyber.c | 2 +- src/cyber_file.c | 15 +++++++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/README.rst b/README.rst index df69293..0936c93 100644 --- a/README.rst +++ b/README.rst @@ -12,7 +12,7 @@ Purism Librem 13): - High throughput access to **CYBER** space - - Up-to 4.2 Gibibyte per second read speed + - Up-to 6.66 Gibibyte per second read speed - Up-to 12 Gibibyte per second write speed - Unlimited storage diff --git a/src/cyber.c b/src/cyber.c index 3f454af..c19d9ec 100644 --- a/src/cyber.c +++ b/src/cyber.c @@ -25,5 +25,5 @@ MODULE_LICENSE("GPL v2"); MODULE_AUTHOR("Felix Morgner"); -MODULE_VERSION("42.1337"); +MODULE_VERSION("42.1337.666"); MODULE_DESCRIPTION("Add CYBER to your system"); diff --git a/src/cyber_file.c b/src/cyber_file.c index d7264c1..deaed39 100644 --- a/src/cyber_file.c +++ b/src/cyber_file.c @@ -39,12 +39,19 @@ int cyber_file_open(struct inode * inode, struct file * file) ssize_t cyber_file_read(struct file * file, char __user * buffer, size_t size, loff_t * offset) { - int const cybers = (size > PAGE_SIZE ? PAGE_SIZE : size) / 8; - if(copy_to_user(buffer, cyberSpace, cybers * 8)) + int const cyberChunks = (size + PAGE_SIZE - 1) / PAGE_SIZE; + int const cybersPerChunk = (size > PAGE_SIZE ? PAGE_SIZE : size) / 8; + int remainingChunks = cyberChunks; + + for(; remainingChunks > 0; --remainingChunks) { - return -EFAULT; + if(copy_to_user(buffer, cyberSpace, cybersPerChunk * 8)) + { + return -EFAULT; + } } - return cybers * 8; + + return cyberChunks * cybersPerChunk * 8; } ssize_t cyber_file_write(struct file * file, char __user const * buffer, size_t size, loff_t * offset) -- cgit v1.2.3