* [PATCH 0/2] btrfs: convert btrfs_buffered_write() to folio interface
@ 2024-10-10 4:46 Qu Wenruo
2024-10-10 4:46 ` [PATCH 1/2] btrfs: make buffered write to copy one page a time Qu Wenruo
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Qu Wenruo @ 2024-10-10 4:46 UTC (permalink / raw)
To: linux-btrfs
Inspired by generic_perform_write(), convert btrfs_buffered_write() to
go a page-by-page iteration, then convert it to use folio interface.
This should provide the basis for use to go
address_operations->write_begin() and write_end() callbacks.
There is a tiny timing change.
Before this patchset we wait for the page writeback after we get an
uptodate or no need to read the page.
But now we follow the regular FGP_WRITEBEGIN, which implies FGP_STABLE
and will wait for writeback before reading the page.
Qu Wenruo (2):
btrfs: make buffered write to copy one page a time
btrfs: convert btrfs_buffered_write() to use folio interface
fs/btrfs/file.c | 259 +++++++++++++-----------------------
fs/btrfs/file.h | 2 +-
fs/btrfs/free-space-cache.c | 15 ++-
3 files changed, 102 insertions(+), 174 deletions(-)
--
2.46.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] btrfs: make buffered write to copy one page a time
2024-10-10 4:46 [PATCH 0/2] btrfs: convert btrfs_buffered_write() to folio interface Qu Wenruo
@ 2024-10-10 4:46 ` Qu Wenruo
2024-10-17 7:08 ` kernel test robot
2024-10-10 4:46 ` [PATCH 2/2] btrfs: convert btrfs_buffered_write() to use folio interface Qu Wenruo
2024-10-22 1:17 ` [PATCH 0/2] btrfs: convert btrfs_buffered_write() to " David Sterba
2 siblings, 1 reply; 6+ messages in thread
From: Qu Wenruo @ 2024-10-10 4:46 UTC (permalink / raw)
To: linux-btrfs
Currently the btrfs_buffered_write() is preparing multiple page a time,
allowing a better performance.
But the current trend is to support larger folio as an optimization,
instead of implementing a proprietary multi-page optimization.
This is inspired by generic_perform_write(), which is copying one folio
a time.
Such change will prepare us to migrate to implement the write_begin()
and write_end() call backs, and make every involved function a little
easier.
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
fs/btrfs/file.c | 236 +++++++++++++-----------------------
fs/btrfs/file.h | 6 +-
fs/btrfs/free-space-cache.c | 15 ++-
3 files changed, 98 insertions(+), 159 deletions(-)
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 160d77f8eb6f..fae59acb3b8a 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -37,22 +37,21 @@
#include "file.h"
#include "super.h"
-/* simple helper to fault in pages and copy. This should go away
+/*
+ * Simple helper to fault in page and copy. This should go away
* and be replaced with calls into generic code.
*/
static noinline int btrfs_copy_from_user(loff_t pos, size_t write_bytes,
- struct page **prepared_pages,
+ struct page *page,
struct iov_iter *i)
{
size_t copied = 0;
size_t total_copied = 0;
- int pg = 0;
int offset = offset_in_page(pos);
while (write_bytes > 0) {
- size_t count = min_t(size_t,
- PAGE_SIZE - offset, write_bytes);
- struct page *page = prepared_pages[pg];
+ size_t count = min_t(size_t, PAGE_SIZE - offset,
+ write_bytes);
/*
* Copy data from userspace to the current page
*/
@@ -63,7 +62,7 @@ static noinline int btrfs_copy_from_user(loff_t pos, size_t write_bytes,
/*
* if we get a partial write, we can end up with
- * partially up to date pages. These add
+ * partially up to date page. These add
* a lot of complexity, so make sure they don't
* happen by forcing this copy to be retried.
*
@@ -82,10 +81,6 @@ static noinline int btrfs_copy_from_user(loff_t pos, size_t write_bytes,
write_bytes -= copied;
total_copied += copied;
offset += copied;
- if (offset == PAGE_SIZE) {
- pg++;
- offset = 0;
- }
}
return total_copied;
}
@@ -93,27 +88,24 @@ static noinline int btrfs_copy_from_user(loff_t pos, size_t write_bytes,
/*
* unlocks pages after btrfs_file_write is done with them
*/
-static void btrfs_drop_pages(struct btrfs_fs_info *fs_info,
- struct page **pages, size_t num_pages,
- u64 pos, u64 copied)
+static void btrfs_drop_page(struct btrfs_fs_info *fs_info,
+ struct page *page, u64 pos, u64 copied)
{
- size_t i;
u64 block_start = round_down(pos, fs_info->sectorsize);
u64 block_len = round_up(pos + copied, fs_info->sectorsize) - block_start;
ASSERT(block_len <= U32_MAX);
- for (i = 0; i < num_pages; i++) {
- /* page checked is some magic around finding pages that
- * have been modified without going through btrfs_set_page_dirty
- * clear it here. There should be no need to mark the pages
- * accessed as prepare_pages should have marked them accessed
- * in prepare_pages via find_or_create_page()
- */
- btrfs_folio_clamp_clear_checked(fs_info, page_folio(pages[i]),
- block_start, block_len);
- unlock_page(pages[i]);
- put_page(pages[i]);
- }
+ /*
+ * Page checked is some magic around finding pages that
+ * have been modified without going through btrfs_set_page_dirty
+ * clear it here. There should be no need to mark the pages
+ * accessed as prepare_one_page() should have marked them accessed
+ * in prepare_one_page() via find_or_create_page()
+ */
+ btrfs_folio_clamp_clear_checked(fs_info, page_folio(page),
+ block_start, block_len);
+ unlock_page(page);
+ put_page(page);
}
/*
@@ -123,19 +115,17 @@ static void btrfs_drop_pages(struct btrfs_fs_info *fs_info,
* - Mark modified pages as Uptodate/Dirty and not needing COW fixup
* - Update inode size for past EOF write
*/
-int btrfs_dirty_pages(struct btrfs_inode *inode, struct page **pages,
- loff_t pos, size_t write_bytes,
- struct extent_state **cached, bool noreserve)
+int btrfs_dirty_page(struct btrfs_inode *inode, struct page *page,
+ loff_t pos, size_t write_bytes,
+ struct extent_state **cached, bool noreserve)
{
struct btrfs_fs_info *fs_info = inode->root->fs_info;
int ret = 0;
- int i;
- const int num_pages = (round_up(pos + write_bytes, PAGE_SIZE) -
- round_down(pos, PAGE_SIZE)) >> PAGE_SHIFT;
u64 num_bytes;
u64 start_pos;
u64 end_of_last_block;
u64 end_pos = pos + write_bytes;
+ struct folio *folio = page_folio(page);
loff_t isize = i_size_read(&inode->vfs_inode);
unsigned int extra_bits = 0;
@@ -149,6 +139,8 @@ int btrfs_dirty_pages(struct btrfs_inode *inode, struct page **pages,
num_bytes = round_up(write_bytes + pos - start_pos,
fs_info->sectorsize);
ASSERT(num_bytes <= U32_MAX);
+ ASSERT(folio_pos(folio) <= pos &&
+ folio_pos(folio) + folio_size(folio) >= pos + write_bytes);
end_of_last_block = start_pos + num_bytes - 1;
@@ -165,16 +157,9 @@ int btrfs_dirty_pages(struct btrfs_inode *inode, struct page **pages,
if (ret)
return ret;
- for (i = 0; i < num_pages; i++) {
- struct page *p = pages[i];
-
- btrfs_folio_clamp_set_uptodate(fs_info, page_folio(p),
- start_pos, num_bytes);
- btrfs_folio_clamp_clear_checked(fs_info, page_folio(p),
- start_pos, num_bytes);
- btrfs_folio_clamp_set_dirty(fs_info, page_folio(p),
- start_pos, num_bytes);
- }
+ btrfs_folio_clamp_set_uptodate(fs_info, folio, start_pos, num_bytes);
+ btrfs_folio_clamp_clear_checked(fs_info, folio, start_pos, num_bytes);
+ btrfs_folio_clamp_set_dirty(fs_info, folio, start_pos, num_bytes);
/*
* we've only changed i_size in ram, and we haven't updated
@@ -922,62 +907,48 @@ static gfp_t get_prepare_gfp_flags(struct inode *inode, bool nowait)
}
/*
- * this just gets pages into the page cache and locks them down.
+ * this just gets page into the page cache and locks them down.
*/
-static noinline int prepare_pages(struct inode *inode, struct page **pages,
- size_t num_pages, loff_t pos,
- size_t write_bytes, bool force_uptodate,
- bool nowait)
+static noinline int prepare_one_page(struct inode *inode, struct page **page_ret,
+ loff_t pos, size_t write_bytes,
+ bool force_uptodate, bool nowait)
{
- int i;
unsigned long index = pos >> PAGE_SHIFT;
gfp_t mask = get_prepare_gfp_flags(inode, nowait);
fgf_t fgp_flags = get_prepare_fgp_flags(nowait);
+ struct page *page;
int ret = 0;
- int faili;
- for (i = 0; i < num_pages; i++) {
again:
- pages[i] = pagecache_get_page(inode->i_mapping, index + i,
- fgp_flags, mask | __GFP_WRITE);
- if (!pages[i]) {
- faili = i - 1;
- if (nowait)
- ret = -EAGAIN;
- else
- ret = -ENOMEM;
- goto fail;
- }
-
- ret = set_page_extent_mapped(pages[i]);
- if (ret < 0) {
- faili = i;
- goto fail;
- }
-
- ret = prepare_uptodate_page(inode, pages[i], pos, write_bytes,
- force_uptodate);
- if (ret) {
- put_page(pages[i]);
- if (!nowait && ret == -EAGAIN) {
- ret = 0;
- goto again;
- }
- faili = i - 1;
- goto fail;
- }
- wait_on_page_writeback(pages[i]);
+ page = pagecache_get_page(inode->i_mapping, index, fgp_flags,
+ mask | __GFP_WRITE);
+ if (!page) {
+ if (nowait)
+ ret = -EAGAIN;
+ else
+ ret = -ENOMEM;
+ return ret;
}
-
+ ret = set_page_extent_mapped(page);
+ if (ret < 0) {
+ unlock_page(page);
+ put_page(page);
+ return ret;
+ }
+ ret = prepare_uptodate_page(inode, page, pos, write_bytes,
+ force_uptodate);
+ if (ret) {
+ /* The page is already unlocked. */
+ put_page(page);
+ if (!nowait && ret == -EAGAIN) {
+ ret = 0;
+ goto again;
+ }
+ return ret;
+ }
+ wait_on_page_writeback(page);
+ *page_ret = page;
return 0;
-fail:
- while (faili >= 0) {
- unlock_page(pages[faili]);
- put_page(pages[faili]);
- faili--;
- }
- return ret;
-
}
/*
@@ -988,19 +959,16 @@ static noinline int prepare_pages(struct inode *inode, struct page **pages,
* 1 - the extent is locked
* 0 - the extent is not locked, and everything is OK
* -EAGAIN - need re-prepare the pages
- * the other < 0 number - Something wrong happens
*/
static noinline int
-lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page **pages,
- size_t num_pages, loff_t pos,
- size_t write_bytes,
+lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page *page,
+ loff_t pos, size_t write_bytes,
u64 *lockstart, u64 *lockend, bool nowait,
struct extent_state **cached_state)
{
struct btrfs_fs_info *fs_info = inode->root->fs_info;
u64 start_pos;
u64 last_pos;
- int i;
int ret = 0;
start_pos = round_down(pos, fs_info->sectorsize);
@@ -1012,12 +980,8 @@ lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page **pages,
if (nowait) {
if (!try_lock_extent(&inode->io_tree, start_pos, last_pos,
cached_state)) {
- for (i = 0; i < num_pages; i++) {
- unlock_page(pages[i]);
- put_page(pages[i]);
- pages[i] = NULL;
- }
-
+ unlock_page(page);
+ put_page(page);
return -EAGAIN;
}
} else {
@@ -1031,10 +995,8 @@ lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page **pages,
ordered->file_offset <= last_pos) {
unlock_extent(&inode->io_tree, start_pos, last_pos,
cached_state);
- for (i = 0; i < num_pages; i++) {
- unlock_page(pages[i]);
- put_page(pages[i]);
- }
+ unlock_page(page);
+ put_page(page);
btrfs_start_ordered_extent(ordered);
btrfs_put_ordered_extent(ordered);
return -EAGAIN;
@@ -1048,11 +1010,10 @@ lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page **pages,
}
/*
- * We should be called after prepare_pages() which should have locked
+ * We should be called after prepare_one_page() which should have locked
* all pages in the range.
*/
- for (i = 0; i < num_pages; i++)
- WARN_ON(!PageLocked(pages[i]));
+ WARN_ON(!PageLocked(page));
return ret;
}
@@ -1196,20 +1157,17 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
loff_t pos;
struct inode *inode = file_inode(file);
struct btrfs_fs_info *fs_info = inode_to_fs_info(inode);
- struct page **pages = NULL;
struct extent_changeset *data_reserved = NULL;
u64 release_bytes = 0;
u64 lockstart;
u64 lockend;
size_t num_written = 0;
- int nrptrs;
ssize_t ret;
- bool only_release_metadata = false;
- bool force_page_uptodate = false;
loff_t old_isize = i_size_read(inode);
unsigned int ilock_flags = 0;
const bool nowait = (iocb->ki_flags & IOCB_NOWAIT);
unsigned int bdp_flags = (nowait ? BDP_ASYNC : 0);
+ bool only_release_metadata = false;
if (nowait)
ilock_flags |= BTRFS_ILOCK_TRY;
@@ -1227,32 +1185,22 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
goto out;
pos = iocb->ki_pos;
- nrptrs = min(DIV_ROUND_UP(iov_iter_count(i), PAGE_SIZE),
- PAGE_SIZE / (sizeof(struct page *)));
- nrptrs = min(nrptrs, current->nr_dirtied_pause - current->nr_dirtied);
- nrptrs = max(nrptrs, 8);
- pages = kmalloc_array(nrptrs, sizeof(struct page *), GFP_KERNEL);
- if (!pages) {
- ret = -ENOMEM;
- goto out;
- }
-
while (iov_iter_count(i) > 0) {
struct extent_state *cached_state = NULL;
size_t offset = offset_in_page(pos);
size_t sector_offset;
size_t write_bytes = min(iov_iter_count(i),
- nrptrs * (size_t)PAGE_SIZE -
- offset);
- size_t num_pages;
+ PAGE_SIZE - offset);
size_t reserve_bytes;
size_t copied;
size_t dirty_sectors;
size_t num_sectors;
+ struct page *page = NULL;
int extents_locked;
+ bool force_page_uptodate = false;
/*
- * Fault pages before locking them in prepare_pages
+ * Fault pages before locking them in prepare_one_page()
* to avoid recursive lock
*/
if (unlikely(fault_in_iov_iter_readable(i, write_bytes))) {
@@ -1291,8 +1239,6 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
only_release_metadata = true;
}
- num_pages = DIV_ROUND_UP(write_bytes + offset, PAGE_SIZE);
- WARN_ON(num_pages > nrptrs);
reserve_bytes = round_up(write_bytes + sector_offset,
fs_info->sectorsize);
WARN_ON(reserve_bytes == 0);
@@ -1320,13 +1266,8 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
break;
}
- /*
- * This is going to setup the pages array with the number of
- * pages we want, so we don't really need to worry about the
- * contents of pages from loop to loop
- */
- ret = prepare_pages(inode, pages, num_pages,
- pos, write_bytes, force_page_uptodate, false);
+ ret = prepare_one_page(inode, &page, pos, write_bytes,
+ force_page_uptodate, false);
if (ret) {
btrfs_delalloc_release_extents(BTRFS_I(inode),
reserve_bytes);
@@ -1334,8 +1275,8 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
}
extents_locked = lock_and_cleanup_extent_if_need(
- BTRFS_I(inode), pages,
- num_pages, pos, write_bytes, &lockstart,
+ BTRFS_I(inode), page,
+ pos, write_bytes, &lockstart,
&lockend, nowait, &cached_state);
if (extents_locked < 0) {
if (!nowait && extents_locked == -EAGAIN)
@@ -1347,20 +1288,13 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
break;
}
- copied = btrfs_copy_from_user(pos, write_bytes, pages, i);
+ copied = btrfs_copy_from_user(pos, write_bytes, page, i);
num_sectors = BTRFS_BYTES_TO_BLKS(fs_info, reserve_bytes);
dirty_sectors = round_up(copied + sector_offset,
fs_info->sectorsize);
dirty_sectors = BTRFS_BYTES_TO_BLKS(fs_info, dirty_sectors);
- /*
- * if we have trouble faulting in the pages, fall
- * back to one page at a time
- */
- if (copied < write_bytes)
- nrptrs = 1;
-
if (copied == 0) {
force_page_uptodate = true;
dirty_sectors = 0;
@@ -1386,15 +1320,15 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
release_bytes = round_up(copied + sector_offset,
fs_info->sectorsize);
- ret = btrfs_dirty_pages(BTRFS_I(inode), pages,
- pos, copied,
- &cached_state, only_release_metadata);
+ ret = btrfs_dirty_page(BTRFS_I(inode), page,
+ pos, copied, &cached_state,
+ only_release_metadata);
/*
* If we have not locked the extent range, because the range's
* start offset is >= i_size, we might still have a non-NULL
* cached extent state, acquired while marking the extent range
- * as delalloc through btrfs_dirty_pages(). Therefore free any
+ * as delalloc through btrfs_dirty_page(). Therefore free any
* possible cached extent state to avoid a memory leak.
*/
if (extents_locked)
@@ -1405,7 +1339,7 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
btrfs_delalloc_release_extents(BTRFS_I(inode), reserve_bytes);
if (ret) {
- btrfs_drop_pages(fs_info, pages, num_pages, pos, copied);
+ btrfs_drop_page(fs_info, page, pos, copied);
break;
}
@@ -1413,7 +1347,7 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
if (only_release_metadata)
btrfs_check_nocow_unlock(BTRFS_I(inode));
- btrfs_drop_pages(fs_info, pages, num_pages, pos, copied);
+ btrfs_drop_page(fs_info, page, pos, copied);
cond_resched();
@@ -1421,8 +1355,6 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
num_written += copied;
}
- kfree(pages);
-
if (release_bytes) {
if (only_release_metadata) {
btrfs_check_nocow_unlock(BTRFS_I(inode));
diff --git a/fs/btrfs/file.h b/fs/btrfs/file.h
index c23d0bf42598..5316d971f6ef 100644
--- a/fs/btrfs/file.h
+++ b/fs/btrfs/file.h
@@ -34,9 +34,9 @@ int btrfs_mark_extent_written(struct btrfs_trans_handle *trans,
ssize_t btrfs_do_write_iter(struct kiocb *iocb, struct iov_iter *from,
const struct btrfs_ioctl_encoded_io_args *encoded);
int btrfs_release_file(struct inode *inode, struct file *file);
-int btrfs_dirty_pages(struct btrfs_inode *inode, struct page **pages,
- loff_t pos, size_t write_bytes,
- struct extent_state **cached, bool noreserve);
+int btrfs_dirty_page(struct btrfs_inode *inode, struct page *page,
+ loff_t pos, size_t write_bytes,
+ struct extent_state **cached, bool noreserve);
int btrfs_fdatawrite_range(struct btrfs_inode *inode, loff_t start, loff_t end);
int btrfs_check_nocow_lock(struct btrfs_inode *inode, loff_t pos,
size_t *write_bytes, bool nowait);
diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c
index 0d2db205b9f6..ec34b85dd0e5 100644
--- a/fs/btrfs/free-space-cache.c
+++ b/fs/btrfs/free-space-cache.c
@@ -1387,6 +1387,7 @@ static int __btrfs_write_out_cache(struct inode *inode,
int bitmaps = 0;
int ret;
int must_iput = 0;
+ int i_size;
if (!i_size_read(inode))
return -EIO;
@@ -1457,10 +1458,16 @@ static int __btrfs_write_out_cache(struct inode *inode,
io_ctl_zero_remaining_pages(io_ctl);
/* Everything is written out, now we dirty the pages in the file. */
- ret = btrfs_dirty_pages(BTRFS_I(inode), io_ctl->pages, 0, i_size_read(inode),
- &cached_state, false);
- if (ret)
- goto out_nospc;
+ i_size = i_size_read(inode);
+ for (int i = 0; i < round_up(i_size, PAGE_SIZE) / PAGE_SIZE; i++) {
+ u64 dirty_start = i * PAGE_SIZE;
+ u64 dirty_len = min_t(u64, dirty_start + PAGE_SIZE, i_size) - dirty_start;
+
+ ret = btrfs_dirty_page(BTRFS_I(inode), io_ctl->pages[i],
+ dirty_start, dirty_len, &cached_state, false);
+ if (ret < 0)
+ goto out_nospc;
+ }
if (block_group && (block_group->flags & BTRFS_BLOCK_GROUP_DATA))
up_write(&block_group->data_rwsem);
--
2.46.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] btrfs: convert btrfs_buffered_write() to use folio interface
2024-10-10 4:46 [PATCH 0/2] btrfs: convert btrfs_buffered_write() to folio interface Qu Wenruo
2024-10-10 4:46 ` [PATCH 1/2] btrfs: make buffered write to copy one page a time Qu Wenruo
@ 2024-10-10 4:46 ` Qu Wenruo
2024-10-22 1:17 ` [PATCH 0/2] btrfs: convert btrfs_buffered_write() to " David Sterba
2 siblings, 0 replies; 6+ messages in thread
From: Qu Wenruo @ 2024-10-10 4:46 UTC (permalink / raw)
To: linux-btrfs
The buffered write path is still heavily utilizing the old page
interface.
Since we have convert it to do a page-by-page copying, it's much easier
to convert all involved functions to folio interface, this involves:
- btrfs_copy_from_user()
- btrfs_drop_folio()
- prepare_uptodate_page()
- prepare_one_page()
- lock_and_cleanup_extent_if_need()
- btrfs_dirty_page()
All involved function will be changed to accept a folio parameter, and
if the word "page" is in the function name, change that to "folio" too.
The function btrfs_dirty_page() is exported for v1 space cache, convert
v1 cache call site to convert its page to folio for the new interface.
And there is a small enhancement for prepare_one_folio(), instead of
manually waiting for the page writeback, let __filemap_get_folio() to
handle that by using FGP_WRITEBEGIN, which implies
(FGP_LOCK | FGP_WRITE | FGP_CREAT | FGP_STABLE).
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
fs/btrfs/file.c | 121 ++++++++++++++++--------------------
fs/btrfs/file.h | 6 +-
fs/btrfs/free-space-cache.c | 4 +-
3 files changed, 60 insertions(+), 71 deletions(-)
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index fae59acb3b8a..1c8f6f8602ff 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -42,7 +42,7 @@
* and be replaced with calls into generic code.
*/
static noinline int btrfs_copy_from_user(loff_t pos, size_t write_bytes,
- struct page *page,
+ struct folio *folio,
struct iov_iter *i)
{
size_t copied = 0;
@@ -55,10 +55,10 @@ static noinline int btrfs_copy_from_user(loff_t pos, size_t write_bytes,
/*
* Copy data from userspace to the current page
*/
- copied = copy_page_from_iter_atomic(page, offset, count, i);
+ copied = copy_folio_from_iter_atomic(folio, offset, count, i);
/* Flush processor's dcache for this page */
- flush_dcache_page(page);
+ flush_dcache_folio(folio);
/*
* if we get a partial write, we can end up with
@@ -70,7 +70,7 @@ static noinline int btrfs_copy_from_user(loff_t pos, size_t write_bytes,
* back to page at a time copies after we return 0.
*/
if (unlikely(copied < count)) {
- if (!PageUptodate(page)) {
+ if (!folio_test_uptodate(folio)) {
iov_iter_revert(i, copied);
copied = 0;
}
@@ -88,24 +88,24 @@ static noinline int btrfs_copy_from_user(loff_t pos, size_t write_bytes,
/*
* unlocks pages after btrfs_file_write is done with them
*/
-static void btrfs_drop_page(struct btrfs_fs_info *fs_info,
- struct page *page, u64 pos, u64 copied)
+static void btrfs_drop_folio(struct btrfs_fs_info *fs_info,
+ struct folio *folio, u64 pos, u64 copied)
{
u64 block_start = round_down(pos, fs_info->sectorsize);
u64 block_len = round_up(pos + copied, fs_info->sectorsize) - block_start;
ASSERT(block_len <= U32_MAX);
/*
- * Page checked is some magic around finding pages that
- * have been modified without going through btrfs_set_page_dirty
- * clear it here. There should be no need to mark the pages
- * accessed as prepare_one_page() should have marked them accessed
- * in prepare_one_page() via find_or_create_page()
+ * Folio checked is some magic around finding folios that
+ * have been modified without going through btrfs_dirty_folio().
+ * Clear it here. There should be no need to mark the pages
+ * accessed as prepare_one_folio() should have marked them accessed
+ * in prepare_one_folio() via find_or_create_page()
*/
- btrfs_folio_clamp_clear_checked(fs_info, page_folio(page),
+ btrfs_folio_clamp_clear_checked(fs_info, folio,
block_start, block_len);
- unlock_page(page);
- put_page(page);
+ folio_unlock(folio);
+ folio_put(folio);
}
/*
@@ -115,9 +115,9 @@ static void btrfs_drop_page(struct btrfs_fs_info *fs_info,
* - Mark modified pages as Uptodate/Dirty and not needing COW fixup
* - Update inode size for past EOF write
*/
-int btrfs_dirty_page(struct btrfs_inode *inode, struct page *page,
- loff_t pos, size_t write_bytes,
- struct extent_state **cached, bool noreserve)
+int btrfs_dirty_folio(struct btrfs_inode *inode, struct folio *folio,
+ loff_t pos, size_t write_bytes,
+ struct extent_state **cached, bool noreserve)
{
struct btrfs_fs_info *fs_info = inode->root->fs_info;
int ret = 0;
@@ -125,7 +125,6 @@ int btrfs_dirty_page(struct btrfs_inode *inode, struct page *page,
u64 start_pos;
u64 end_of_last_block;
u64 end_pos = pos + write_bytes;
- struct folio *folio = page_folio(page);
loff_t isize = i_size_read(&inode->vfs_inode);
unsigned int extra_bits = 0;
@@ -841,11 +840,10 @@ int btrfs_mark_extent_written(struct btrfs_trans_handle *trans,
* on error we return an unlocked page and the error value
* on success we return a locked page and 0
*/
-static int prepare_uptodate_page(struct inode *inode,
- struct page *page, u64 pos,
- u64 len, bool force_uptodate)
+static int prepare_uptodate_folio(struct inode *inode,
+ struct folio *folio, u64 pos,
+ u64 len, bool force_uptodate)
{
- struct folio *folio = page_folio(page);
u64 clamp_start = max_t(u64, pos, folio_pos(folio));
u64 clamp_end = min_t(u64, pos + len, folio_pos(folio) + folio_size(folio));
int ret = 0;
@@ -876,23 +874,13 @@ static int prepare_uptodate_page(struct inode *inode,
* The private flag check is essential for subpage as we need to store
* extra bitmap using folio private.
*/
- if (page->mapping != inode->i_mapping || !folio_test_private(folio)) {
+ if (folio->mapping != inode->i_mapping || !folio_test_private(folio)) {
folio_unlock(folio);
return -EAGAIN;
}
return 0;
}
-static fgf_t get_prepare_fgp_flags(bool nowait)
-{
- fgf_t fgp_flags = FGP_LOCK | FGP_ACCESSED | FGP_CREAT;
-
- if (nowait)
- fgp_flags |= FGP_NOWAIT;
-
- return fgp_flags;
-}
-
static gfp_t get_prepare_gfp_flags(struct inode *inode, bool nowait)
{
gfp_t gfp;
@@ -909,45 +897,46 @@ static gfp_t get_prepare_gfp_flags(struct inode *inode, bool nowait)
/*
* this just gets page into the page cache and locks them down.
*/
-static noinline int prepare_one_page(struct inode *inode, struct page **page_ret,
- loff_t pos, size_t write_bytes,
- bool force_uptodate, bool nowait)
+static noinline int prepare_one_folio(struct inode *inode, struct folio **folio_ret,
+ loff_t pos, size_t write_bytes,
+ bool force_uptodate, bool nowait)
{
unsigned long index = pos >> PAGE_SHIFT;
gfp_t mask = get_prepare_gfp_flags(inode, nowait);
- fgf_t fgp_flags = get_prepare_fgp_flags(nowait);
- struct page *page;
+ fgf_t fgp_flags = nowait ? FGP_WRITEBEGIN | FGP_NOWAIT : FGP_WRITEBEGIN;
+ struct folio *folio;
int ret = 0;
again:
- page = pagecache_get_page(inode->i_mapping, index, fgp_flags,
- mask | __GFP_WRITE);
- if (!page) {
+ folio = __filemap_get_folio(inode->i_mapping, index, fgp_flags,
+ mask);
+ if (IS_ERR(folio)) {
if (nowait)
ret = -EAGAIN;
else
- ret = -ENOMEM;
+ ret = PTR_ERR(folio);
return ret;
}
- ret = set_page_extent_mapped(page);
+ /* Only support page sized folio yet. */
+ ASSERT(folio_order(folio) == 0);
+ ret = set_folio_extent_mapped(folio);
if (ret < 0) {
- unlock_page(page);
- put_page(page);
+ folio_unlock(folio);
+ folio_put(folio);
return ret;
}
- ret = prepare_uptodate_page(inode, page, pos, write_bytes,
- force_uptodate);
+ ret = prepare_uptodate_folio(inode, folio, pos, write_bytes,
+ force_uptodate);
if (ret) {
/* The page is already unlocked. */
- put_page(page);
+ folio_put(folio);
if (!nowait && ret == -EAGAIN) {
ret = 0;
goto again;
}
return ret;
}
- wait_on_page_writeback(page);
- *page_ret = page;
+ *folio_ret = folio;
return 0;
}
@@ -961,7 +950,7 @@ static noinline int prepare_one_page(struct inode *inode, struct page **page_ret
* -EAGAIN - need re-prepare the pages
*/
static noinline int
-lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page *page,
+lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct folio *folio,
loff_t pos, size_t write_bytes,
u64 *lockstart, u64 *lockend, bool nowait,
struct extent_state **cached_state)
@@ -980,8 +969,8 @@ lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page *page,
if (nowait) {
if (!try_lock_extent(&inode->io_tree, start_pos, last_pos,
cached_state)) {
- unlock_page(page);
- put_page(page);
+ folio_unlock(folio);
+ folio_put(folio);
return -EAGAIN;
}
} else {
@@ -995,8 +984,8 @@ lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page *page,
ordered->file_offset <= last_pos) {
unlock_extent(&inode->io_tree, start_pos, last_pos,
cached_state);
- unlock_page(page);
- put_page(page);
+ folio_unlock(folio);
+ folio_put(folio);
btrfs_start_ordered_extent(ordered);
btrfs_put_ordered_extent(ordered);
return -EAGAIN;
@@ -1010,10 +999,10 @@ lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page *page,
}
/*
- * We should be called after prepare_one_page() which should have locked
+ * We should be called after prepare_one_folio() which should have locked
* all pages in the range.
*/
- WARN_ON(!PageLocked(page));
+ WARN_ON(!folio_test_locked(folio));
return ret;
}
@@ -1195,12 +1184,12 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
size_t copied;
size_t dirty_sectors;
size_t num_sectors;
- struct page *page = NULL;
+ struct folio *folio = NULL;
int extents_locked;
bool force_page_uptodate = false;
/*
- * Fault pages before locking them in prepare_one_page()
+ * Fault pages before locking them in prepare_one_folio()
* to avoid recursive lock
*/
if (unlikely(fault_in_iov_iter_readable(i, write_bytes))) {
@@ -1266,8 +1255,8 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
break;
}
- ret = prepare_one_page(inode, &page, pos, write_bytes,
- force_page_uptodate, false);
+ ret = prepare_one_folio(inode, &folio, pos, write_bytes,
+ force_page_uptodate, false);
if (ret) {
btrfs_delalloc_release_extents(BTRFS_I(inode),
reserve_bytes);
@@ -1275,7 +1264,7 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
}
extents_locked = lock_and_cleanup_extent_if_need(
- BTRFS_I(inode), page,
+ BTRFS_I(inode), folio,
pos, write_bytes, &lockstart,
&lockend, nowait, &cached_state);
if (extents_locked < 0) {
@@ -1288,7 +1277,7 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
break;
}
- copied = btrfs_copy_from_user(pos, write_bytes, page, i);
+ copied = btrfs_copy_from_user(pos, write_bytes, folio, i);
num_sectors = BTRFS_BYTES_TO_BLKS(fs_info, reserve_bytes);
dirty_sectors = round_up(copied + sector_offset,
@@ -1320,7 +1309,7 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
release_bytes = round_up(copied + sector_offset,
fs_info->sectorsize);
- ret = btrfs_dirty_page(BTRFS_I(inode), page,
+ ret = btrfs_dirty_folio(BTRFS_I(inode), folio,
pos, copied, &cached_state,
only_release_metadata);
@@ -1339,7 +1328,7 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
btrfs_delalloc_release_extents(BTRFS_I(inode), reserve_bytes);
if (ret) {
- btrfs_drop_page(fs_info, page, pos, copied);
+ btrfs_drop_folio(fs_info, folio, pos, copied);
break;
}
@@ -1347,7 +1336,7 @@ ssize_t btrfs_buffered_write(struct kiocb *iocb, struct iov_iter *i)
if (only_release_metadata)
btrfs_check_nocow_unlock(BTRFS_I(inode));
- btrfs_drop_page(fs_info, page, pos, copied);
+ btrfs_drop_folio(fs_info, folio, pos, copied);
cond_resched();
diff --git a/fs/btrfs/file.h b/fs/btrfs/file.h
index 5316d971f6ef..b7f290d56357 100644
--- a/fs/btrfs/file.h
+++ b/fs/btrfs/file.h
@@ -34,9 +34,9 @@ int btrfs_mark_extent_written(struct btrfs_trans_handle *trans,
ssize_t btrfs_do_write_iter(struct kiocb *iocb, struct iov_iter *from,
const struct btrfs_ioctl_encoded_io_args *encoded);
int btrfs_release_file(struct inode *inode, struct file *file);
-int btrfs_dirty_page(struct btrfs_inode *inode, struct page *page,
- loff_t pos, size_t write_bytes,
- struct extent_state **cached, bool noreserve);
+int btrfs_dirty_folio(struct btrfs_inode *inode, struct folio *folio,
+ loff_t pos, size_t write_bytes,
+ struct extent_state **cached, bool noreserve);
int btrfs_fdatawrite_range(struct btrfs_inode *inode, loff_t start, loff_t end);
int btrfs_check_nocow_lock(struct btrfs_inode *inode, loff_t pos,
size_t *write_bytes, bool nowait);
diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c
index ec34b85dd0e5..40476d882685 100644
--- a/fs/btrfs/free-space-cache.c
+++ b/fs/btrfs/free-space-cache.c
@@ -1463,8 +1463,8 @@ static int __btrfs_write_out_cache(struct inode *inode,
u64 dirty_start = i * PAGE_SIZE;
u64 dirty_len = min_t(u64, dirty_start + PAGE_SIZE, i_size) - dirty_start;
- ret = btrfs_dirty_page(BTRFS_I(inode), io_ctl->pages[i],
- dirty_start, dirty_len, &cached_state, false);
+ ret = btrfs_dirty_folio(BTRFS_I(inode), page_folio(io_ctl->pages[i]),
+ dirty_start, dirty_len, &cached_state, false);
if (ret < 0)
goto out_nospc;
}
--
2.46.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] btrfs: make buffered write to copy one page a time
2024-10-10 4:46 ` [PATCH 1/2] btrfs: make buffered write to copy one page a time Qu Wenruo
@ 2024-10-17 7:08 ` kernel test robot
0 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2024-10-17 7:08 UTC (permalink / raw)
To: Qu Wenruo
Cc: oe-lkp, lkp, linux-btrfs, ying.huang, feng.tang, fengwei.yin,
oliver.sang
Hello,
kernel test robot noticed a 16.0% regression of iozone.average_KBps on:
commit: eeeea160c640d8eb91dc3d6dc48be26c2c37457c ("[PATCH 1/2] btrfs: make buffered write to copy one page a time")
url: https://github.com/intel-lab-lkp/linux/commits/Qu-Wenruo/btrfs-make-buffered-write-to-copy-one-page-a-time/20241010-124734
base: https://git.kernel.org/cgit/linux/kernel/git/kdave/linux.git for-next
patch link: https://lore.kernel.org/all/0d6f8e54faafe6dba9be2f72e6d0fca99951ddfd.1728532438.git.wqu@suse.com/
patch subject: [PATCH 1/2] btrfs: make buffered write to copy one page a time
testcase: iozone
config: x86_64-rhel-8.3
compiler: gcc-12
test machine: 224 threads 4 sockets Intel(R) Xeon(R) Platinum 8380H CPU @ 2.90GHz (Cooper Lake) with 192G memory
parameters:
disk: 2HDD
fs: btrfs
iosched: kyber
cpufreq_governor: performance
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <oliver.sang@intel.com>
| Closes: https://lore.kernel.org/oe-lkp/202410171456.b6cdebb1-oliver.sang@intel.com
Details are as below:
-------------------------------------------------------------------------------------------------->
The kernel config and materials to reproduce are available at:
https://download.01.org/0day-ci/archive/20241017/202410171456.b6cdebb1-oliver.sang@intel.com
=========================================================================================
compiler/cpufreq_governor/disk/fs/iosched/kconfig/rootfs/tbox_group/testcase:
gcc-12/performance/2HDD/btrfs/kyber/x86_64-rhel-8.3/debian-12-x86_64-20240206.cgz/lkp-cpl-4sp2/iozone
commit:
a6f63ff0d7 ("Merge branch 'for-next-next-v6.12-20241009' into for-next-20241009")
eeeea160c6 ("btrfs: make buffered write to copy one page a time")
a6f63ff0d7025c54 eeeea160c640d8eb91dc3d6dc48
---------------- ---------------------------
%stddev %change %stddev
\ | \
0.04 +0.0 0.04 mpstat.cpu.all.sys%
1998642 ± 84% -68.0% 638956 ± 37% numa-numastat.node0.local_node
2099811 ± 80% -65.2% 730619 ± 31% numa-numastat.node0.numa_hit
2099377 ± 80% -65.2% 730368 ± 31% numa-vmstat.node0.numa_hit
1998208 ± 84% -68.0% 638705 ± 37% numa-vmstat.node0.numa_local
64443 ± 4% +6.8% 68808 ± 2% proc-vmstat.nr_zone_write_pending
7331 ± 79% +138.8% 17505 ± 16% proc-vmstat.numa_hint_faults
95857 ± 48% +65.7% 158842 ± 11% proc-vmstat.numa_pte_updates
137921 +2.1% 140815 proc-vmstat.pgreuse
9.03 ± 2% -19.9% 7.23 ± 3% perf-stat.i.MPKI
99780778 ± 3% +20.9% 1.207e+08 ± 3% perf-stat.i.branch-instructions
1.22 -0.1 1.15 perf-stat.i.branch-miss-rate%
5.024e+08 ± 3% +22.7% 6.164e+08 ± 3% perf-stat.i.instructions
0.71 +7.1% 0.76 perf-stat.i.ipc
7.75 -15.9% 6.52 ± 2% perf-stat.overall.MPKI
2.18 ± 2% -0.3 1.90 perf-stat.overall.branch-miss-rate%
99931564 ± 3% +20.8% 1.207e+08 ± 3% perf-stat.ps.branch-instructions
5.032e+08 ± 3% +22.6% 6.168e+08 ± 3% perf-stat.ps.instructions
6.001e+11 ± 3% +22.4% 7.348e+11 ± 3% perf-stat.total.instructions
0.55 ± 47% +0.4 0.94 ± 9% perf-profile.calltrace.cycles-pp.write
0.40 ± 71% +0.5 0.86 ± 10% perf-profile.calltrace.cycles-pp.btrfs_buffered_write.btrfs_do_write_iter.vfs_write.ksys_write.do_syscall_64
0.41 ± 71% +0.5 0.87 ± 9% perf-profile.calltrace.cycles-pp.btrfs_do_write_iter.vfs_write.ksys_write.do_syscall_64.entry_SYSCALL_64_after_hwframe
0.43 ± 71% +0.5 0.90 ± 10% perf-profile.calltrace.cycles-pp.vfs_write.ksys_write.do_syscall_64.entry_SYSCALL_64_after_hwframe.write
0.44 ± 71% +0.5 0.92 ± 9% perf-profile.calltrace.cycles-pp.do_syscall_64.entry_SYSCALL_64_after_hwframe.write
0.44 ± 71% +0.5 0.92 ± 9% perf-profile.calltrace.cycles-pp.entry_SYSCALL_64_after_hwframe.write
0.44 ± 71% +0.5 0.91 ± 10% perf-profile.calltrace.cycles-pp.ksys_write.do_syscall_64.entry_SYSCALL_64_after_hwframe.write
0.16 ± 12% -0.0 0.12 ± 7% perf-profile.children.cycles-pp.run_posix_cpu_timers
0.02 ±141% +0.1 0.09 ± 46% perf-profile.children.cycles-pp.btrfs_delalloc_reserve_metadata
0.00 +0.1 0.08 ± 29% perf-profile.children.cycles-pp.prepare_one_page
0.07 ± 53% +0.1 0.17 ± 31% perf-profile.children.cycles-pp.__clear_extent_bit
0.00 +0.3 0.27 ± 18% perf-profile.children.cycles-pp.btrfs_dirty_page
0.60 ± 29% +0.3 0.95 ± 9% perf-profile.children.cycles-pp.write
0.52 ± 28% +0.3 0.87 ± 9% perf-profile.children.cycles-pp.btrfs_buffered_write
0.56 ± 28% +0.3 0.91 ± 10% perf-profile.children.cycles-pp.vfs_write
0.52 ± 28% +0.4 0.87 ± 9% perf-profile.children.cycles-pp.btrfs_do_write_iter
0.56 ± 28% +0.4 0.92 ± 10% perf-profile.children.cycles-pp.ksys_write
0.23 ± 8% -0.0 0.19 ± 8% perf-profile.self.cycles-pp.sysvec_apic_timer_interrupt
0.16 ± 12% -0.0 0.12 ± 7% perf-profile.self.cycles-pp.run_posix_cpu_timers
542043 -20.2% 432357 iozone.1024KB_1024reclen
9097871 ± 4% -57.3% 3886841 ± 8% iozone.1024KB_1024reclen.frewrite
9632899 ± 2% -57.6% 4083590 ± 3% iozone.1024KB_1024reclen.fwrite
9773507 -58.4% 4068268 ± 5% iozone.1024KB_1024reclen.random_write
9246355 ± 11% -54.7% 4192127 iozone.1024KB_1024reclen.record_rewrite
7060912 ± 3% -50.5% 3495651 ± 2% iozone.1024KB_1024reclen.rewrite
5854028 ± 11% -35.9% 3751337 ± 2% iozone.1024KB_1024reclen.write
8683596 ± 22% -55.1% 3898752 ± 13% iozone.1024KB_128reclen.frewrite
8147547 ± 30% -52.2% 3896196 ± 17% iozone.1024KB_128reclen.fwrite
11646693 ± 9% -61.2% 4517455 ± 5% iozone.1024KB_128reclen.random_write
17030272 ± 7% -73.1% 4582005 ± 2% iozone.1024KB_128reclen.record_rewrite
6710074 ± 24% -49.9% 3362845 ± 14% iozone.1024KB_128reclen.rewrite
5304511 ± 18% -31.5% 3635821 ± 9% iozone.1024KB_16reclen.frewrite
5599329 ± 12% -31.5% 3835223 ± 10% iozone.1024KB_16reclen.fwrite
6420412 ± 12% -37.5% 4015161 ± 3% iozone.1024KB_16reclen.random_write
8956010 -53.0% 4204864 ± 4% iozone.1024KB_16reclen.record_rewrite
5400865 ± 4% -36.4% 3433675 ± 8% iozone.1024KB_16reclen.rewrite
5057394 ± 4% -26.2% 3731322 ± 7% iozone.1024KB_16reclen.write
10659137 ± 4% -57.5% 4524846 ± 14% iozone.1024KB_256reclen.frewrite
9600316 ± 16% -53.8% 4433287 ± 18% iozone.1024KB_256reclen.fwrite
12086394 ± 7% -62.1% 4581666 ± 5% iozone.1024KB_256reclen.random_write
18674893 ± 3% -75.0% 4662367 ± 2% iozone.1024KB_256reclen.record_rewrite
6954389 ± 24% -53.5% 3237090 ± 15% iozone.1024KB_256reclen.rewrite
6511047 ± 22% -45.8% 3528011 ± 13% iozone.1024KB_32reclen.frewrite
6991276 ± 19% -45.7% 3797465 ± 13% iozone.1024KB_32reclen.fwrite
8883588 ± 8% -50.7% 4377528 ± 3% iozone.1024KB_32reclen.random_write
12071763 ± 4% -64.2% 4316696 iozone.1024KB_32reclen.record_rewrite
5838377 ± 19% -43.2% 3317402 ± 14% iozone.1024KB_32reclen.rewrite
8226792 ± 4% +6.4% 8755907 iozone.1024KB_4reclen.random_read
3385272 +3.1% 3491635 iozone.1024KB_4reclen.record_rewrite
2820123 ± 5% +5.4% 2971591 iozone.1024KB_4reclen.rewrite
705144 ± 3% -21.2% 555839 ± 2% iozone.1024KB_512reclen
13870147 ± 4% -51.6% 6708400 ± 12% iozone.1024KB_512reclen.frewrite
5714601 ± 6% -28.5% 4086432 ± 8% iozone.1024KB_512reclen.fwrite
12128304 ± 4% -63.6% 4417054 ± 7% iozone.1024KB_512reclen.random_write
15557904 -70.4% 4597540 iozone.1024KB_512reclen.record_rewrite
7655911 ± 5% -51.7% 3695523 ± 3% iozone.1024KB_512reclen.rewrite
6998972 ± 4% -42.9% 3996083 ± 6% iozone.1024KB_512reclen.write
7531595 ± 23% -50.8% 3701834 ± 16% iozone.1024KB_64reclen.frewrite
7586858 ± 27% -51.8% 3657647 ± 18% iozone.1024KB_64reclen.fwrite
10537091 ± 10% -58.1% 4410056 ± 5% iozone.1024KB_64reclen.random_write
14724491 ± 7% -69.4% 4504235 ± 2% iozone.1024KB_64reclen.record_rewrite
6233206 ± 24% -48.9% 3184404 ± 16% iozone.1024KB_64reclen.rewrite
4583844 ± 2% -23.5% 3507804 iozone.1024KB_8reclen.frewrite
4836398 -24.3% 3660722 iozone.1024KB_8reclen.random_write
5725197 ± 9% -28.2% 4110803 iozone.1024KB_8reclen.record_rewrite
4226568 ± 3% -22.8% 3263105 ± 8% iozone.1024KB_8reclen.rewrite
958137 ± 3% -12.4% 839054 ± 7% iozone.128KB_128reclen
8738751 ± 6% -58.6% 3617394 ± 22% iozone.128KB_128reclen.frewrite
9185212 ± 2% -59.6% 3713555 ± 20% iozone.128KB_128reclen.fwrite
11038193 ± 2% -58.9% 4542068 iozone.128KB_128reclen.random_write
10983805 ± 3% -63.0% 4068594 ± 17% iozone.128KB_128reclen.record_rewrite
6397989 ± 8% -49.6% 3221561 ± 11% iozone.128KB_128reclen.rewrite
5394780 ± 9% -40.7% 3196876 ± 17% iozone.128KB_128reclen.write
5788254 ± 5% -31.2% 3984232 ± 5% iozone.128KB_16reclen.frewrite
5282205 ± 11% -26.0% 3906918 ± 8% iozone.128KB_16reclen.fwrite
6110253 ± 8% -38.0% 3787704 ± 7% iozone.128KB_16reclen.random_write
7310434 ± 3% -47.3% 3854735 ± 2% iozone.128KB_16reclen.record_rewrite
4233865 ± 9% -31.2% 2913969 ± 20% iozone.128KB_16reclen.write
7153424 ± 12% -38.8% 4380585 ± 9% iozone.128KB_32reclen.frewrite
6781060 ± 14% -32.6% 4569325 ± 7% iozone.128KB_32reclen.fwrite
8272460 ± 2% -49.1% 4212237 ± 2% iozone.128KB_32reclen.random_write
9058701 ± 4% -57.3% 3865827 ± 8% iozone.128KB_32reclen.record_rewrite
5670379 ± 8% -42.0% 3290422 ± 6% iozone.128KB_32reclen.rewrite
4886671 ± 8% -30.9% 3378247 ± 7% iozone.128KB_32reclen.write
10953435 ± 4% -45.0% 6027905 ± 18% iozone.128KB_64reclen.frewrite
5211701 ± 15% -26.1% 3851838 ± 6% iozone.128KB_64reclen.fwrite
9901762 ± 3% -55.0% 4457872 ± 2% iozone.128KB_64reclen.random_write
10619616 ± 3% -64.1% 3817487 ± 14% iozone.128KB_64reclen.record_rewrite
5921763 ± 14% -41.8% 3446338 ± 7% iozone.128KB_64reclen.rewrite
5102284 ± 10% -33.3% 3400985 ± 9% iozone.128KB_64reclen.write
4429298 ± 5% -20.9% 3502551 ± 5% iozone.128KB_8reclen.frewrite
4245188 ± 8% -24.6% 3201936 ± 18% iozone.128KB_8reclen.fwrite
4598068 -29.4% 3247543 ± 13% iozone.128KB_8reclen.random_write
385560 -17.4% 318351 iozone.131072KB_1024reclen
4226504 -38.1% 2617224 iozone.131072KB_1024reclen.frewrite
4248661 -38.3% 2622832 iozone.131072KB_1024reclen.fwrite
4872229 ± 2% -42.1% 2820516 iozone.131072KB_1024reclen.random_write
12985870 -69.8% 3922393 iozone.131072KB_1024reclen.record_rewrite
4187877 -38.8% 2565012 iozone.131072KB_1024reclen.rewrite
3672037 ± 4% -26.8% 2686945 iozone.131072KB_1024reclen.write
448736 -19.4% 361855 iozone.131072KB_128reclen
4268447 -38.3% 2631749 iozone.131072KB_128reclen.frewrite
4323348 -39.0% 2638197 iozone.131072KB_128reclen.fwrite
4622813 -42.1% 2678604 iozone.131072KB_128reclen.random_write
19501625 -76.0% 4672640 iozone.131072KB_128reclen.record_rewrite
4027166 -37.8% 2505861 iozone.131072KB_128reclen.rewrite
3673398 -28.7% 2620321 iozone.131072KB_128reclen.write
343686 ± 2% -12.9% 299492 ± 2% iozone.131072KB_16384reclen
3478793 -30.9% 2404333 iozone.131072KB_16384reclen.frewrite
3553351 -31.4% 2437960 ± 2% iozone.131072KB_16384reclen.fwrite
4601231 -39.9% 2764435 iozone.131072KB_16384reclen.random_write
7507491 ± 2% -58.5% 3118015 iozone.131072KB_16384reclen.record_rewrite
4036137 -38.0% 2501444 ± 2% iozone.131072KB_16384reclen.rewrite
3628587 -28.2% 2606651 iozone.131072KB_16384reclen.write
366856 -14.8% 312456 iozone.131072KB_2048reclen
4072963 -37.1% 2560087 iozone.131072KB_2048reclen.frewrite
4113190 -37.2% 2582822 iozone.131072KB_2048reclen.fwrite
4757567 -40.9% 2809962 iozone.131072KB_2048reclen.random_write
10030466 -63.4% 3675841 iozone.131072KB_2048reclen.record_rewrite
4155697 -38.9% 2540635 ± 2% iozone.131072KB_2048reclen.rewrite
3694537 ± 3% -27.3% 2684360 iozone.131072KB_2048reclen.write
462547 -18.3% 378043 iozone.131072KB_256reclen
10477031 ± 3% +6.4% 11143514 iozone.131072KB_256reclen.bkwd_read
10786442 ± 3% +6.3% 11466470 ± 2% iozone.131072KB_256reclen.fread
4422554 -38.9% 2703180 iozone.131072KB_256reclen.frewrite
4513907 -40.2% 2700056 iozone.131072KB_256reclen.fwrite
4691120 ± 2% -42.1% 2715491 iozone.131072KB_256reclen.random_write
21472934 -78.2% 4689219 iozone.131072KB_256reclen.record_rewrite
4025658 ± 3% -37.7% 2508850 iozone.131072KB_256reclen.rewrite
10425184 +3.6% 10798459 iozone.131072KB_256reclen.stride_read
3674918 ± 2% -30.0% 2572009 ± 4% iozone.131072KB_256reclen.write
362980 ± 2% -13.2% 315057 iozone.131072KB_4096reclen
8598261 ± 2% +4.7% 9002206 iozone.131072KB_4096reclen.bkwd_read
4080689 -36.7% 2581225 iozone.131072KB_4096reclen.frewrite
4124534 -37.0% 2596925 iozone.131072KB_4096reclen.fwrite
4761270 -40.8% 2816424 iozone.131072KB_4096reclen.random_write
9783775 -62.2% 3697554 iozone.131072KB_4096reclen.record_rewrite
4094406 -38.6% 2515909 iozone.131072KB_4096reclen.rewrite
3711599 -27.6% 2687856 iozone.131072KB_4096reclen.write
445354 -19.5% 358554 ± 2% iozone.131072KB_512reclen
4505758 -38.9% 2751413 iozone.131072KB_512reclen.frewrite
4533134 -39.3% 2752491 iozone.131072KB_512reclen.fwrite
4841713 -42.5% 2785239 ± 2% iozone.131072KB_512reclen.random_write
19357877 ± 2% -76.6% 4527349 iozone.131072KB_512reclen.record_rewrite
4255338 ± 2% -39.3% 2581578 iozone.131072KB_512reclen.rewrite
3917082 -30.0% 2741744 iozone.131072KB_512reclen.write
427530 -18.4% 348661 iozone.131072KB_64reclen
4120078 -36.6% 2612921 iozone.131072KB_64reclen.frewrite
4163104 -37.1% 2616671 iozone.131072KB_64reclen.fwrite
4342296 -40.3% 2593797 iozone.131072KB_64reclen.random_write
16675187 ± 2% -72.3% 4617489 iozone.131072KB_64reclen.record_rewrite
3862107 -35.1% 2508071 iozone.131072KB_64reclen.rewrite
3615562 -28.2% 2594525 iozone.131072KB_64reclen.write
369656 -13.8% 318628 iozone.131072KB_8192reclen
4084040 -35.8% 2621236 iozone.131072KB_8192reclen.frewrite
4171031 -36.3% 2657549 iozone.131072KB_8192reclen.fwrite
4751812 -40.9% 2808532 iozone.131072KB_8192reclen.random_write
9274324 -61.4% 3584092 iozone.131072KB_8192reclen.record_rewrite
4079969 -38.3% 2516161 ± 2% iozone.131072KB_8192reclen.rewrite
3662940 -27.4% 2658129 iozone.131072KB_8192reclen.write
523766 ± 3% -22.7% 404748 iozone.16384KB_1024reclen
6837159 ± 6% -49.8% 3432704 ± 3% iozone.16384KB_1024reclen.frewrite
6452432 ± 6% -49.4% 3264958 iozone.16384KB_1024reclen.fwrite
11712645 ± 2% -5.3% 11094955 ± 3% iozone.16384KB_1024reclen.random_read
10212039 -59.5% 4130773 iozone.16384KB_1024reclen.random_write
10644747 ± 2% -4.2% 10199361 iozone.16384KB_1024reclen.read
13233016 -69.6% 4019136 iozone.16384KB_1024reclen.record_rewrite
11476059 ± 3% -4.7% 10941165 ± 2% iozone.16384KB_1024reclen.reread
6769300 ± 10% -50.3% 3361173 iozone.16384KB_1024reclen.rewrite
5575719 ± 7% -40.2% 3332755 ± 2% iozone.16384KB_1024reclen.write
670808 ± 4% -25.8% 497581 iozone.16384KB_128reclen
15744853 ± 4% -7.3% 14588313 ± 4% iozone.16384KB_128reclen.fread
8575298 ± 6% -55.9% 3779439 ± 2% iozone.16384KB_128reclen.frewrite
8528342 ± 9% -55.0% 3838202 ± 2% iozone.16384KB_128reclen.fwrite
10657796 ± 3% -59.9% 4274345 iozone.16384KB_128reclen.random_write
14753478 ± 5% -7.1% 13710497 ± 3% iozone.16384KB_128reclen.read
19883590 ± 2% -76.4% 4687775 iozone.16384KB_128reclen.record_rewrite
6879699 ± 11% -50.0% 3438716 ± 2% iozone.16384KB_128reclen.rewrite
5693333 ± 8% -39.7% 3435110 ± 3% iozone.16384KB_128reclen.write
402948 ± 8% -25.0% 302066 ± 3% iozone.16384KB_16384reclen
5989603 ± 18% -48.4% 3089331 ± 7% iozone.16384KB_16384reclen.frewrite
5952726 ± 18% -51.1% 2909260 ± 3% iozone.16384KB_16384reclen.fwrite
10926335 -6.0% 10266058 iozone.16384KB_16384reclen.random_read
7865529 -53.7% 3641609 iozone.16384KB_16384reclen.random_write
7097218 ± 13% -54.3% 3243012 ± 5% iozone.16384KB_16384reclen.record_rewrite
4955000 ± 13% -43.3% 2809554 ± 3% iozone.16384KB_16384reclen.rewrite
3852320 ± 9% -33.1% 2575572 ± 2% iozone.16384KB_16384reclen.write
492780 ± 4% -15.7% 415240 ± 2% iozone.16384KB_16reclen
5747167 ± 5% -37.8% 3572140 ± 2% iozone.16384KB_16reclen.frewrite
5611391 ± 6% -38.2% 3466024 ± 3% iozone.16384KB_16reclen.fwrite
6074952 -40.8% 3598773 iozone.16384KB_16reclen.random_write
9187879 -52.5% 4365629 iozone.16384KB_16reclen.record_rewrite
5018736 ± 8% -37.5% 3135693 ± 2% iozone.16384KB_16reclen.rewrite
4501210 ± 10% -31.2% 3098882 ± 3% iozone.16384KB_16reclen.write
476039 ± 3% -20.2% 379667 iozone.16384KB_2048reclen
6201803 ± 10% -43.6% 3500786 ± 2% iozone.16384KB_2048reclen.frewrite
5898758 ± 9% -45.2% 3230000 ± 2% iozone.16384KB_2048reclen.fwrite
8666918 -55.7% 3842024 ± 2% iozone.16384KB_2048reclen.random_write
10076118 -63.3% 3695523 iozone.16384KB_2048reclen.record_rewrite
11218308 ± 3% -4.8% 10684627 ± 3% iozone.16384KB_2048reclen.reread
6119133 ± 10% -48.4% 3156270 ± 3% iozone.16384KB_2048reclen.rewrite
5152680 ± 10% -37.9% 3197545 ± 3% iozone.16384KB_2048reclen.write
683080 ± 5% -27.1% 497924 ± 3% iozone.16384KB_256reclen
16140658 ± 4% -8.2% 14818303 ± 5% iozone.16384KB_256reclen.freread
8337309 ± 12% -55.9% 3675422 ± 6% iozone.16384KB_256reclen.frewrite
8623447 ± 12% -57.0% 3709426 ± 5% iozone.16384KB_256reclen.fwrite
11159490 ± 2% -61.4% 4306677 ± 3% iozone.16384KB_256reclen.random_write
14760981 ± 4% -6.7% 13765221 ± 2% iozone.16384KB_256reclen.read
21831204 -78.4% 4713642 iozone.16384KB_256reclen.record_rewrite
7346093 ± 9% -53.7% 3403207 ± 4% iozone.16384KB_256reclen.rewrite
6109079 ± 8% -41.8% 3556551 ± 3% iozone.16384KB_256reclen.write
566054 ± 5% -19.9% 453202 ± 2% iozone.16384KB_32reclen
6697700 ± 10% -46.4% 3591587 ± 2% iozone.16384KB_32reclen.frewrite
6970026 ± 9% -48.2% 3609335 ± 4% iozone.16384KB_32reclen.fwrite
7956017 ± 2% -50.3% 3958068 iozone.16384KB_32reclen.random_write
12942212 ± 5% -66.0% 4406567 ± 4% iozone.16384KB_32reclen.record_rewrite
5921726 ± 11% -45.9% 3201790 ± 3% iozone.16384KB_32reclen.rewrite
5191971 ± 12% -37.6% 3237823 ± 4% iozone.16384KB_32reclen.write
460586 ± 5% -20.6% 365537 ± 2% iozone.16384KB_4096reclen
6335781 ± 15% -40.0% 3803409 ± 5% iozone.16384KB_4096reclen.frewrite
5870430 ± 13% -41.6% 3428726 ± 2% iozone.16384KB_4096reclen.fwrite
8495162 -54.7% 3847451 ± 2% iozone.16384KB_4096reclen.random_write
9388265 ± 3% -61.5% 3615448 iozone.16384KB_4096reclen.record_rewrite
11077239 ± 3% -6.7% 10336092 ± 2% iozone.16384KB_4096reclen.reread
5871104 ± 12% -49.5% 2965535 iozone.16384KB_4096reclen.rewrite
4790750 ± 13% -37.9% 2972961 iozone.16384KB_4096reclen.write
9047972 ± 2% -3.4% 8738705 iozone.16384KB_4reclen.freread
6915186 ± 4% -4.3% 6614717 ± 2% iozone.16384KB_4reclen.random_read
3396707 +3.0% 3497129 iozone.16384KB_4reclen.record_rewrite
614723 ± 3% -27.4% 446233 ± 4% iozone.16384KB_512reclen
13914396 ± 4% -7.8% 12828695 ± 5% iozone.16384KB_512reclen.bkwd_read
8096910 ± 7% -54.1% 3714698 ± 4% iozone.16384KB_512reclen.frewrite
8101100 ± 8% -54.6% 3676473 iozone.16384KB_512reclen.fwrite
11355901 ± 3% -61.9% 4330173 ± 2% iozone.16384KB_512reclen.random_write
12460175 ± 4% -7.6% 11507388 ± 4% iozone.16384KB_512reclen.read
19238622 ± 4% -76.4% 4542726 iozone.16384KB_512reclen.record_rewrite
7323816 ± 12% -53.2% 3425389 iozone.16384KB_512reclen.rewrite
13429700 ± 4% -8.2% 12323787 ± 4% iozone.16384KB_512reclen.stride_read
6207547 ± 11% -42.5% 3572174 ± 3% iozone.16384KB_512reclen.write
624341 ± 4% -23.2% 479567 iozone.16384KB_64reclen
15151736 ± 4% -8.6% 13854885 ± 4% iozone.16384KB_64reclen.bkwd_read
7323657 ± 8% -48.8% 3746646 ± 2% iozone.16384KB_64reclen.frewrite
7790658 ± 7% -52.3% 3719161 ± 3% iozone.16384KB_64reclen.fwrite
9510948 ± 2% -55.8% 4207249 iozone.16384KB_64reclen.random_write
16906757 -72.5% 4652294 iozone.16384KB_64reclen.record_rewrite
6631166 ± 9% -50.1% 3311344 ± 3% iozone.16384KB_64reclen.rewrite
5573825 ± 10% -39.7% 3361066 ± 4% iozone.16384KB_64reclen.write
433143 ± 7% -21.4% 340305 ± 3% iozone.16384KB_8192reclen
7362577 ± 9% -40.0% 4417899 ± 5% iozone.16384KB_8192reclen.frewrite
5392604 ± 2% -31.0% 3719420 ± 6% iozone.16384KB_8192reclen.fwrite
8344361 ± 3% -53.9% 3843290 iozone.16384KB_8192reclen.random_write
8531288 ± 10% -59.7% 3440601 ± 4% iozone.16384KB_8192reclen.record_rewrite
5582200 ± 14% -48.4% 2880844 ± 2% iozone.16384KB_8192reclen.rewrite
11218798 ± 2% -11.7% 9903546 ± 8% iozone.16384KB_8192reclen.stride_read
4609004 ± 13% -40.2% 2756259 iozone.16384KB_8192reclen.write
406592 ± 5% -9.1% 369612 iozone.16384KB_8reclen
4483118 ± 4% -24.4% 3388493 ± 2% iozone.16384KB_8reclen.frewrite
4294129 ± 8% -24.4% 3248404 ± 2% iozone.16384KB_8reclen.fwrite
4177378 ± 2% -24.7% 3147515 iozone.16384KB_8reclen.random_write
6115193 -32.6% 4124662 iozone.16384KB_8reclen.record_rewrite
4044126 ± 7% -24.7% 3046498 ± 3% iozone.16384KB_8reclen.rewrite
3777195 ± 9% -22.3% 2935122 ± 4% iozone.16384KB_8reclen.write
546618 -19.5% 439945 iozone.2048KB_1024reclen
12660025 -46.8% 6732798 ± 2% iozone.2048KB_1024reclen.frewrite
6005037 ± 4% -29.6% 4228146 ± 4% iozone.2048KB_1024reclen.fwrite
9615106 ± 4% -56.3% 4204222 iozone.2048KB_1024reclen.random_write
10922139 ± 2% -63.3% 4012164 ± 6% iozone.2048KB_1024reclen.record_rewrite
7433654 ± 2% -51.5% 3602167 iozone.2048KB_1024reclen.rewrite
6398008 ± 4% -39.9% 3847742 ± 5% iozone.2048KB_1024reclen.write
774331 ± 2% -19.1% 626077 iozone.2048KB_128reclen
9339282 ± 3% -54.7% 4235217 ± 7% iozone.2048KB_128reclen.frewrite
9861836 -55.1% 4432068 iozone.2048KB_128reclen.fwrite
11255098 ± 3% -61.0% 4393415 ± 5% iozone.2048KB_128reclen.random_write
19154136 -75.7% 4660792 iozone.2048KB_128reclen.record_rewrite
7915314 ± 3% -52.0% 3797347 iozone.2048KB_128reclen.rewrite
6736213 ± 7% -39.0% 4106970 ± 6% iozone.2048KB_128reclen.write
540333 -12.0% 475243 ± 2% iozone.2048KB_16reclen
6117335 -37.0% 3853879 iozone.2048KB_16reclen.frewrite
6170729 ± 3% -36.7% 3906222 iozone.2048KB_16reclen.fwrite
6457065 ± 2% -39.3% 3920286 ± 2% iozone.2048KB_16reclen.random_write
8925801 -52.3% 4258996 iozone.2048KB_16reclen.record_rewrite
5634792 ± 2% -36.8% 3559899 ± 3% iozone.2048KB_16reclen.rewrite
5116892 ± 8% -27.1% 3732619 ± 4% iozone.2048KB_16reclen.write
487898 -17.8% 401052 iozone.2048KB_2048reclen
8131189 -53.7% 3766691 ± 2% iozone.2048KB_2048reclen.frewrite
8051272 ± 8% -52.1% 3853722 ± 2% iozone.2048KB_2048reclen.fwrite
8324425 ± 2% -53.1% 3907865 ± 3% iozone.2048KB_2048reclen.random_write
8403246 -54.1% 3853043 ± 3% iozone.2048KB_2048reclen.record_rewrite
6448049 ± 7% -46.7% 3436943 iozone.2048KB_2048reclen.rewrite
4736760 ± 10% -33.6% 3147117 iozone.2048KB_2048reclen.write
787613 ± 3% -20.5% 626349 iozone.2048KB_256reclen
10263264 ± 3% -54.7% 4646604 iozone.2048KB_256reclen.frewrite
10179784 ± 3% -54.3% 4657053 iozone.2048KB_256reclen.fwrite
11645748 ± 7% -61.9% 4442609 ± 5% iozone.2048KB_256reclen.random_write
19996981 ± 3% -76.9% 4610956 ± 4% iozone.2048KB_256reclen.record_rewrite
7744388 ± 9% -50.5% 3835087 iozone.2048KB_256reclen.rewrite
7117349 ± 4% -41.4% 4169140 ± 3% iozone.2048KB_256reclen.write
617275 ± 2% -15.9% 519296 iozone.2048KB_32reclen
7401019 ± 3% -45.4% 4037639 iozone.2048KB_32reclen.frewrite
7719491 ± 2% -46.9% 4097741 iozone.2048KB_32reclen.fwrite
8633317 ± 3% -51.1% 4221529 ± 2% iozone.2048KB_32reclen.random_write
11765911 ± 14% -62.2% 4441885 iozone.2048KB_32reclen.record_rewrite
6743151 ± 2% -44.1% 3772064 ± 2% iozone.2048KB_32reclen.rewrite
6067717 ± 6% -33.3% 4045820 ± 3% iozone.2048KB_32reclen.write
686319 ± 2% -20.3% 547002 ± 2% iozone.2048KB_512reclen
10258408 ± 4% -51.1% 5013013 ± 3% iozone.2048KB_512reclen.frewrite
9201658 ± 14% -46.4% 4934039 ± 7% iozone.2048KB_512reclen.fwrite
11811913 ± 5% -61.4% 4556856 iozone.2048KB_512reclen.random_write
16741303 ± 3% -73.0% 4512235 iozone.2048KB_512reclen.record_rewrite
8076937 ± 5% -52.5% 3832601 iozone.2048KB_512reclen.rewrite
6402629 ± 11% -37.7% 3990424 ± 4% iozone.2048KB_512reclen.write
686438 ± 2% -19.3% 553707 iozone.2048KB_64reclen
8426729 ± 8% -50.2% 4196218 iozone.2048KB_64reclen.frewrite
8949585 ± 2% -52.3% 4271865 iozone.2048KB_64reclen.fwrite
10476756 ± 2% -59.1% 4284777 ± 7% iozone.2048KB_64reclen.random_write
16339660 ± 2% -72.4% 4512540 iozone.2048KB_64reclen.record_rewrite
7299616 ± 6% -48.1% 3786234 iozone.2048KB_64reclen.rewrite
6425014 ± 13% -35.1% 4172482 ± 2% iozone.2048KB_64reclen.write
446265 ± 2% -7.2% 414117 ± 2% iozone.2048KB_8reclen
4600877 ± 3% -21.7% 3602700 iozone.2048KB_8reclen.frewrite
4696867 ± 4% -24.1% 3563359 ± 5% iozone.2048KB_8reclen.fwrite
4575834 -25.8% 3396893 ± 3% iozone.2048KB_8reclen.random_write
5909456 ± 6% -30.9% 4084327 iozone.2048KB_8reclen.record_rewrite
4163296 ± 8% -17.9% 3419822 iozone.2048KB_8reclen.rewrite
4315228 ± 3% -17.8% 3545590 ± 2% iozone.2048KB_8reclen.write
876883 -12.7% 765305 ± 2% iozone.256KB_128reclen
12782503 ± 3% -45.0% 7025945 iozone.256KB_128reclen.frewrite
5741338 ± 2% -33.1% 3842429 ± 15% iozone.256KB_128reclen.fwrite
12766790 ± 2% -62.6% 4776665 ± 3% iozone.256KB_128reclen.random_write
14002687 -67.8% 4512965 ± 5% iozone.256KB_128reclen.record_rewrite
7065110 ± 13% -50.3% 3507880 ± 14% iozone.256KB_128reclen.rewrite
5930962 ± 7% -32.3% 4015437 iozone.256KB_128reclen.write
642307 ± 2% -9.2% 583516 ± 3% iozone.256KB_16reclen
6074746 ± 2% -37.6% 3792774 ± 6% iozone.256KB_16reclen.frewrite
6105783 -41.2% 3591341 ± 20% iozone.256KB_16reclen.fwrite
6873747 ± 4% -41.7% 4006649 ± 4% iozone.256KB_16reclen.random_write
7981703 ± 7% -48.4% 4120145 iozone.256KB_16reclen.record_rewrite
5440790 -34.9% 3540479 iozone.256KB_16reclen.rewrite
4945496 ± 5% -25.8% 3668556 ± 4% iozone.256KB_16reclen.write
936922 -12.7% 817874 iozone.256KB_256reclen
9160325 ± 13% -53.8% 4230113 ± 4% iozone.256KB_256reclen.frewrite
10080319 ± 8% -56.3% 4405546 iozone.256KB_256reclen.fwrite
13506820 ± 9% -65.9% 4601257 ± 15% iozone.256KB_256reclen.random_write
13415163 -65.9% 4570189 ± 10% iozone.256KB_256reclen.record_rewrite
6785904 ± 16% -45.7% 3687027 ± 4% iozone.256KB_256reclen.rewrite
6143300 ± 8% -42.8% 3513204 ± 9% iozone.256KB_256reclen.write
731396 ± 4% -9.5% 661916 iozone.256KB_32reclen
7356434 ± 6% -42.7% 4215021 ± 4% iozone.256KB_32reclen.frewrite
7645775 ± 2% -43.3% 4336420 ± 4% iozone.256KB_32reclen.fwrite
9336883 -51.9% 4486681 iozone.256KB_32reclen.random_write
10992498 -61.6% 4219066 ± 4% iozone.256KB_32reclen.record_rewrite
6343748 ± 3% -44.5% 3519118 ± 4% iozone.256KB_32reclen.rewrite
5653159 ± 3% -33.4% 3767542 ± 7% iozone.256KB_32reclen.write
9842890 +3.0% 10135309 iozone.256KB_4reclen.fread
3091569 +3.9% 3211087 iozone.256KB_4reclen.frewrite
819494 -12.5% 716765 ± 3% iozone.256KB_64reclen
9479809 ± 2% -48.1% 4915296 ± 4% iozone.256KB_64reclen.frewrite
9443174 -47.2% 4989437 iozone.256KB_64reclen.fwrite
10982966 ± 9% -60.0% 4396044 ± 16% iozone.256KB_64reclen.random_write
13120773 ± 2% -66.2% 4430361 iozone.256KB_64reclen.record_rewrite
7022881 -47.4% 3691036 ± 4% iozone.256KB_64reclen.rewrite
5811449 ± 10% -32.1% 3946590 ± 4% iozone.256KB_64reclen.write
505316 -6.0% 474879 ± 3% iozone.256KB_8reclen
4604603 ± 3% -22.0% 3592664 ± 3% iozone.256KB_8reclen.frewrite
4723759 ± 4% -20.5% 3757181 iozone.256KB_8reclen.fwrite
4880843 -25.9% 3614503 ± 3% iozone.256KB_8reclen.random_write
5720852 -31.3% 3930088 iozone.256KB_8reclen.record_rewrite
4171724 ± 3% -27.0% 3045157 ± 19% iozone.256KB_8reclen.rewrite
384269 -18.7% 312569 ± 3% iozone.262144KB_1024reclen
4228130 -38.5% 2601765 iozone.262144KB_1024reclen.frewrite
4245661 -38.6% 2605001 iozone.262144KB_1024reclen.fwrite
4764166 -43.3% 2700353 ± 7% iozone.262144KB_1024reclen.random_write
13022842 -71.4% 3718118 ± 9% iozone.262144KB_1024reclen.record_rewrite
4224765 -38.4% 2603504 iozone.262144KB_1024reclen.rewrite
3762221 -30.8% 2604280 ± 8% iozone.262144KB_1024reclen.write
444657 -19.4% 358268 iozone.262144KB_128reclen
4257822 -38.7% 2611195 iozone.262144KB_128reclen.frewrite
4256653 -38.4% 2620727 iozone.262144KB_128reclen.fwrite
4442435 -41.8% 2585358 iozone.262144KB_128reclen.random_write
19508218 -76.2% 4635032 iozone.262144KB_128reclen.record_rewrite
4027292 -38.4% 2482551 iozone.262144KB_128reclen.rewrite
3685432 -31.3% 2531930 ± 5% iozone.262144KB_128reclen.write
350335 -12.9% 305213 iozone.262144KB_16384reclen
3306788 -31.6% 2262244 iozone.262144KB_16384reclen.frewrite
3400413 -34.4% 2230709 ± 5% iozone.262144KB_16384reclen.fwrite
4625060 -39.8% 2783094 iozone.262144KB_16384reclen.random_write
7521068 ± 14% -57.6% 3192318 ± 5% iozone.262144KB_16384reclen.record_rewrite
4086952 -39.4% 2477683 iozone.262144KB_16384reclen.rewrite
3595399 -30.1% 2513733 ± 11% iozone.262144KB_16384reclen.write
359063 ± 4% -13.1% 311921 iozone.262144KB_2048reclen
3920404 ± 8% -35.4% 2531203 iozone.262144KB_2048reclen.frewrite
3927967 ± 9% -35.2% 2544352 iozone.262144KB_2048reclen.fwrite
4645669 ± 2% -40.2% 2777700 iozone.262144KB_2048reclen.random_write
10198908 -63.7% 3697244 iozone.262144KB_2048reclen.record_rewrite
4147484 -38.1% 2567342 iozone.262144KB_2048reclen.rewrite
3710679 ± 2% -28.2% 2662870 iozone.262144KB_2048reclen.write
463955 -20.6% 368213 iozone.262144KB_256reclen
10373960 ± 5% +5.0% 10890873 iozone.262144KB_256reclen.bkwd_read
4479411 -40.2% 2680473 iozone.262144KB_256reclen.frewrite
4457060 -39.9% 2679874 iozone.262144KB_256reclen.fwrite
4606982 -42.4% 2655255 iozone.262144KB_256reclen.random_write
21281948 -78.1% 4651245 iozone.262144KB_256reclen.record_rewrite
4131652 -39.6% 2494448 ± 2% iozone.262144KB_256reclen.rewrite
3745982 -30.3% 2610616 iozone.262144KB_256reclen.write
363030 -13.7% 313142 iozone.262144KB_4096reclen
4077622 -37.6% 2545637 iozone.262144KB_4096reclen.frewrite
4097419 -37.5% 2560139 iozone.262144KB_4096reclen.fwrite
4667585 ± 2% -39.9% 2803072 iozone.262144KB_4096reclen.random_write
9839826 -62.5% 3694499 iozone.262144KB_4096reclen.record_rewrite
4124679 -38.3% 2543895 iozone.262144KB_4096reclen.rewrite
3629825 ± 3% -26.5% 2666858 iozone.262144KB_4096reclen.write
447934 -20.2% 357320 iozone.262144KB_512reclen
4535922 -40.0% 2722081 iozone.262144KB_512reclen.frewrite
4549499 -39.9% 2732292 iozone.262144KB_512reclen.fwrite
4748840 -41.8% 2764377 iozone.262144KB_512reclen.random_write
19397355 ± 2% -76.8% 4508272 iozone.262144KB_512reclen.record_rewrite
4267200 ± 2% -40.2% 2552813 iozone.262144KB_512reclen.rewrite
3885152 ± 5% -31.3% 2670734 ± 5% iozone.262144KB_512reclen.write
424456 -18.3% 346877 iozone.262144KB_64reclen
10154974 ± 3% +4.1% 10568230 iozone.262144KB_64reclen.fread
4094335 -36.6% 2596063 iozone.262144KB_64reclen.frewrite
4122313 -37.1% 2590914 iozone.262144KB_64reclen.fwrite
4173511 -40.4% 2488944 iozone.262144KB_64reclen.random_write
16968397 -72.9% 4604559 iozone.262144KB_64reclen.record_rewrite
3911540 -36.7% 2476357 iozone.262144KB_64reclen.rewrite
3540605 ± 2% -28.8% 2522326 ± 5% iozone.262144KB_64reclen.write
363270 -14.1% 312070 iozone.262144KB_8192reclen
4072504 -36.9% 2569494 iozone.262144KB_8192reclen.frewrite
4127105 -37.6% 2577055 iozone.262144KB_8192reclen.fwrite
4684117 -40.3% 2795599 iozone.262144KB_8192reclen.random_write
9668475 -62.9% 3591337 ± 4% iozone.262144KB_8192reclen.record_rewrite
4149213 -38.8% 2540318 ± 2% iozone.262144KB_8192reclen.rewrite
3626868 ± 4% -26.8% 2656000 iozone.262144KB_8192reclen.write
452361 ± 6% -23.5% 346179 ± 3% iozone.32768KB_1024reclen
10954271 ± 5% -7.6% 10121060 ± 7% iozone.32768KB_1024reclen.fread
5449792 ± 13% -45.9% 2950655 ± 6% iozone.32768KB_1024reclen.frewrite
5406442 ± 14% -47.2% 2853976 ± 4% iozone.32768KB_1024reclen.fwrite
8077369 ± 7% -55.7% 3581207 ± 3% iozone.32768KB_1024reclen.random_write
13107006 -69.8% 3962878 iozone.32768KB_1024reclen.record_rewrite
5297933 ± 13% -44.4% 2944868 ± 5% iozone.32768KB_1024reclen.rewrite
4381643 ± 17% -34.6% 2863550 ± 4% iozone.32768KB_1024reclen.write
540696 ± 10% -24.6% 407737 iozone.32768KB_128reclen
13364204 ± 8% -11.1% 11887041 ± 7% iozone.32768KB_128reclen.freread
5879763 ± 19% -48.6% 3021490 ± 4% iozone.32768KB_128reclen.frewrite
5784176 ± 26% -49.4% 2926630 ± 5% iozone.32768KB_128reclen.fwrite
7645945 ± 13% -53.4% 3566359 ± 4% iozone.32768KB_128reclen.random_write
19380762 ± 4% -76.1% 4637415 iozone.32768KB_128reclen.record_rewrite
5152463 ± 15% -46.5% 2756253 ± 4% iozone.32768KB_128reclen.rewrite
4778959 ± 12% -42.6% 2743941 ± 2% iozone.32768KB_128reclen.write
355402 ± 6% -18.6% 289426 ± 5% iozone.32768KB_16384reclen
5065660 ± 7% -27.4% 3678717 ± 3% iozone.32768KB_16384reclen.frewrite
4502475 ± 5% -22.7% 3479293 ± 3% iozone.32768KB_16384reclen.fwrite
5977933 ± 2% -48.3% 3091112 ± 8% iozone.32768KB_16384reclen.random_write
6161792 ± 3% -51.7% 2974276 ± 4% iozone.32768KB_16384reclen.record_rewrite
4532246 ± 3% -42.5% 2606120 ± 3% iozone.32768KB_16384reclen.rewrite
3764245 ± 11% -29.5% 2653857 ± 4% iozone.32768KB_16384reclen.write
434720 ± 5% -20.8% 344426 ± 3% iozone.32768KB_2048reclen
5241635 ± 11% -45.6% 2851437 ± 2% iozone.32768KB_2048reclen.frewrite
4750629 ± 13% -43.2% 2699454 ± 5% iozone.32768KB_2048reclen.fwrite
7484649 ± 5% -55.5% 3327521 ± 8% iozone.32768KB_2048reclen.random_write
9823060 -62.6% 3673651 iozone.32768KB_2048reclen.record_rewrite
5226760 ± 13% -45.0% 2872670 ± 4% iozone.32768KB_2048reclen.rewrite
4208492 ± 13% -33.9% 2781504 ± 2% iozone.32768KB_2048reclen.write
561829 ± 9% -25.6% 417889 ± 2% iozone.32768KB_256reclen
6860768 ± 11% -53.2% 3208544 ± 7% iozone.32768KB_256reclen.frewrite
6098671 ± 27% -50.5% 3020109 ± 6% iozone.32768KB_256reclen.fwrite
8463832 ± 8% -56.5% 3682172 ± 3% iozone.32768KB_256reclen.random_write
21467650 -78.2% 4679967 iozone.32768KB_256reclen.record_rewrite
5273214 ± 13% -47.3% 2778932 ± 7% iozone.32768KB_256reclen.rewrite
4373441 ± 13% -35.2% 2832910 ± 7% iozone.32768KB_256reclen.write
414838 ± 7% -15.6% 350194 ± 4% iozone.32768KB_4096reclen
5398092 ± 6% -44.2% 3011772 ± 6% iozone.32768KB_4096reclen.frewrite
4815155 ± 10% -38.3% 2971343 ± 5% iozone.32768KB_4096reclen.fwrite
7050252 ± 8% -50.8% 3465523 ± 3% iozone.32768KB_4096reclen.random_write
9399112 ± 3% -60.9% 3672116 iozone.32768KB_4096reclen.record_rewrite
5116695 ± 9% -44.6% 2835183 ± 4% iozone.32768KB_4096reclen.rewrite
4077496 ± 11% -31.7% 2786662 ± 3% iozone.32768KB_4096reclen.write
537403 ± 7% -26.9% 392679 ± 2% iozone.32768KB_512reclen
6382722 ± 14% -53.0% 2999010 ± 5% iozone.32768KB_512reclen.frewrite
6043775 ± 20% -50.8% 2975689 ± 5% iozone.32768KB_512reclen.fwrite
8431834 ± 9% -55.9% 3715052 ± 3% iozone.32768KB_512reclen.random_write
19350771 -76.7% 4499910 iozone.32768KB_512reclen.record_rewrite
5673691 ± 15% -49.6% 2860172 ± 3% iozone.32768KB_512reclen.rewrite
4695280 ± 17% -39.0% 2862002 ± 2% iozone.32768KB_512reclen.write
516609 ± 8% -23.8% 393799 ± 2% iozone.32768KB_64reclen
13166484 ± 5% -12.2% 11562108 ± 8% iozone.32768KB_64reclen.bkwd_read
5103586 ± 19% -46.5% 2727942 ± 3% iozone.32768KB_64reclen.frewrite
5235240 ± 23% -46.5% 2801394 ± 3% iozone.32768KB_64reclen.fwrite
7279781 ± 6% -50.6% 3592676 ± 3% iozone.32768KB_64reclen.random_write
16991347 -72.9% 4607452 iozone.32768KB_64reclen.record_rewrite
4910826 ± 14% -43.0% 2799150 ± 6% iozone.32768KB_64reclen.rewrite
4188458 ± 6% -35.2% 2715386 ± 3% iozone.32768KB_64reclen.write
399134 ± 6% -16.3% 334017 ± 3% iozone.32768KB_8192reclen
4890220 ± 10% -36.2% 3118086 ± 6% iozone.32768KB_8192reclen.frewrite
5198365 ± 5% -36.9% 3281056 iozone.32768KB_8192reclen.fwrite
6937688 ± 5% -50.9% 3404642 ± 2% iozone.32768KB_8192reclen.random_write
8411000 ± 5% -58.4% 3497183 iozone.32768KB_8192reclen.record_rewrite
4886181 ± 10% -40.6% 2901408 ± 2% iozone.32768KB_8192reclen.rewrite
4060328 ± 14% -29.3% 2869880 ± 6% iozone.32768KB_8192reclen.write
547507 -21.3% 431106 iozone.4096KB_1024reclen
8803122 -47.6% 4608902 iozone.4096KB_1024reclen.frewrite
8190984 ± 2% -45.8% 4436387 iozone.4096KB_1024reclen.fwrite
10046329 -58.1% 4210980 ± 3% iozone.4096KB_1024reclen.random_write
12133980 -66.9% 4019665 iozone.4096KB_1024reclen.record_rewrite
7585382 ± 2% -51.9% 3651453 iozone.4096KB_1024reclen.rewrite
6590193 ± 2% -42.1% 3817964 ± 4% iozone.4096KB_1024reclen.write
722013 ± 2% -23.0% 556038 iozone.4096KB_128reclen
9524794 -55.3% 4258037 ± 2% iozone.4096KB_128reclen.frewrite
9592753 -55.8% 4241299 ± 2% iozone.4096KB_128reclen.fwrite
11349709 -60.6% 4473598 iozone.4096KB_128reclen.random_write
19159156 ± 2% -75.8% 4638607 iozone.4096KB_128reclen.record_rewrite
8146349 -53.5% 3789449 ± 3% iozone.4096KB_128reclen.rewrite
7034730 ± 3% -43.2% 3994649 ± 7% iozone.4096KB_128reclen.write
531712 -12.5% 465267 iozone.4096KB_16reclen
6137175 -37.2% 3852128 iozone.4096KB_16reclen.frewrite
6226631 ± 2% -37.0% 3921424 iozone.4096KB_16reclen.fwrite
6427825 -40.2% 3841270 iozone.4096KB_16reclen.random_write
9153123 -52.9% 4310771 iozone.4096KB_16reclen.record_rewrite
5642240 ± 2% -36.1% 3606201 iozone.4096KB_16reclen.rewrite
4733088 ± 10% -26.9% 3461604 ± 7% iozone.4096KB_16reclen.write
498194 -17.3% 411858 iozone.4096KB_2048reclen
10061771 -40.7% 5967435 iozone.4096KB_2048reclen.frewrite
5695122 ± 3% -29.8% 3999587 ± 2% iozone.4096KB_2048reclen.fwrite
8538957 -52.9% 4021716 iozone.4096KB_2048reclen.random_write
9154121 -57.9% 3852260 iozone.4096KB_2048reclen.record_rewrite
6784175 -48.7% 3477279 iozone.4096KB_2048reclen.rewrite
5730945 ± 4% -37.5% 3583348 ± 4% iozone.4096KB_2048reclen.write
799652 -22.1% 622935 iozone.4096KB_256reclen
10182498 -56.7% 4413478 iozone.4096KB_256reclen.frewrite
10079537 ± 2% -56.4% 4398351 iozone.4096KB_256reclen.fwrite
11431595 ± 5% -60.7% 4489528 iozone.4096KB_256reclen.random_write
21136142 -77.9% 4668119 iozone.4096KB_256reclen.record_rewrite
8432884 ± 2% -54.4% 3841577 iozone.4096KB_256reclen.rewrite
7143188 ± 3% -41.3% 4190914 iozone.4096KB_256reclen.write
622082 -18.0% 509974 iozone.4096KB_32reclen
7573420 ± 2% -47.2% 3997267 iozone.4096KB_32reclen.frewrite
7723292 -47.7% 4040106 ± 2% iozone.4096KB_32reclen.fwrite
8332826 -51.0% 4080432 ± 3% iozone.4096KB_32reclen.random_write
13037221 -65.6% 4482760 iozone.4096KB_32reclen.record_rewrite
6853083 ± 2% -45.0% 3767795 iozone.4096KB_32reclen.rewrite
6176004 ± 3% -34.5% 4044866 ± 2% iozone.4096KB_32reclen.write
500859 -18.8% 406662 iozone.4096KB_4096reclen
8390312 -54.4% 3825195 ± 3% iozone.4096KB_4096reclen.frewrite
8363283 -53.3% 3901735 iozone.4096KB_4096reclen.fwrite
8389951 ± 4% -52.1% 4022578 iozone.4096KB_4096reclen.random_write
8597277 -53.3% 4017127 iozone.4096KB_4096reclen.record_rewrite
6710892 -48.8% 3438657 iozone.4096KB_4096reclen.rewrite
4836366 ± 3% -33.0% 3238538 iozone.4096KB_4096reclen.write
7445582 ± 2% -4.1% 7142068 ± 2% iozone.4096KB_4reclen.stride_read
703788 ± 2% -23.3% 539608 ± 2% iozone.4096KB_512reclen
9674357 ± 2% -54.1% 4444669 iozone.4096KB_512reclen.frewrite
9274029 -52.7% 4384389 iozone.4096KB_512reclen.fwrite
12050340 -62.6% 4509701 iozone.4096KB_512reclen.random_write
18073626 -75.1% 4502289 iozone.4096KB_512reclen.record_rewrite
8382898 ± 2% -53.8% 3874107 iozone.4096KB_512reclen.rewrite
7020098 ± 8% -40.0% 4213203 iozone.4096KB_512reclen.write
680911 -20.5% 541063 iozone.4096KB_64reclen
8715570 ± 2% -52.1% 4171282 iozone.4096KB_64reclen.frewrite
8859582 ± 2% -53.2% 4142478 ± 4% iozone.4096KB_64reclen.fwrite
10038380 ± 2% -56.8% 4331688 iozone.4096KB_64reclen.random_write
15765586 -2.9% 15313032 iozone.4096KB_64reclen.read
16626317 -72.4% 4584815 iozone.4096KB_64reclen.record_rewrite
7572169 ± 3% -49.2% 3848094 iozone.4096KB_64reclen.rewrite
6403648 ± 9% -38.2% 3959666 ± 5% iozone.4096KB_64reclen.write
425985 ± 3% -6.5% 398362 iozone.4096KB_8reclen
4504277 ± 4% -22.2% 3504237 iozone.4096KB_8reclen.frewrite
4593663 ± 3% -22.4% 3564791 ± 2% iozone.4096KB_8reclen.fwrite
10555094 -3.3% 10208177 iozone.4096KB_8reclen.random_read
4370705 ± 2% -26.3% 3220631 iozone.4096KB_8reclen.random_write
5963939 ± 2% -33.1% 3989125 ± 2% iozone.4096KB_8reclen.record_rewrite
4209124 ± 3% -21.5% 3303798 iozone.4096KB_8reclen.rewrite
852407 ± 3% -16.0% 715694 ± 2% iozone.512KB_128reclen
10177118 ± 5% -50.2% 5068071 ± 4% iozone.512KB_128reclen.frewrite
10282951 ± 3% -50.3% 5106983 ± 3% iozone.512KB_128reclen.fwrite
12595570 ± 15% -61.4% 4865755 ± 2% iozone.512KB_128reclen.random_write
16296842 -72.9% 4417265 ± 8% iozone.512KB_128reclen.record_rewrite
7757871 ± 3% -51.1% 3794609 ± 2% iozone.512KB_128reclen.rewrite
6638722 ± 3% -38.9% 4057507 ± 3% iozone.512KB_128reclen.write
595458 -9.2% 540559 iozone.512KB_16reclen
5956064 ± 3% -34.5% 3903203 iozone.512KB_16reclen.frewrite
6272496 ± 2% -37.0% 3949192 ± 2% iozone.512KB_16reclen.fwrite
7236243 -43.7% 4075432 ± 3% iozone.512KB_16reclen.random_write
8719765 -51.8% 4201307 ± 2% iozone.512KB_16reclen.record_rewrite
5446223 ± 2% -34.1% 3588778 ± 2% iozone.512KB_16reclen.rewrite
5142682 ± 5% -26.0% 3804311 ± 3% iozone.512KB_16reclen.write
849114 ± 2% -15.0% 721716 ± 3% iozone.512KB_256reclen
12957952 ± 4% -46.2% 6969607 ± 2% iozone.512KB_256reclen.frewrite
5522956 ± 8% -25.6% 4110667 ± 5% iozone.512KB_256reclen.fwrite
14017494 -65.6% 4822324 ± 6% iozone.512KB_256reclen.random_write
16381271 -71.5% 4674505 ± 4% iozone.512KB_256reclen.record_rewrite
7501543 ± 4% -50.6% 3703905 ± 5% iozone.512KB_256reclen.rewrite
6216048 ± 13% -36.3% 3958710 ± 11% iozone.512KB_256reclen.write
719626 ± 2% -11.8% 634484 iozone.512KB_32reclen
7478304 ± 5% -44.2% 4170717 iozone.512KB_32reclen.frewrite
7753337 -45.1% 4258997 iozone.512KB_32reclen.fwrite
9722852 -53.8% 4495981 ± 3% iozone.512KB_32reclen.random_write
11873100 ± 3% -63.3% 4351978 ± 2% iozone.512KB_32reclen.record_rewrite
6544030 ± 5% -42.7% 3747946 iozone.512KB_32reclen.rewrite
5826301 ± 6% -31.0% 4019454 ± 2% iozone.512KB_32reclen.write
741696 ± 2% -15.5% 626927 ± 4% iozone.512KB_512reclen
9528590 ± 18% -55.5% 4237034 ± 4% iozone.512KB_512reclen.frewrite
10150088 ± 18% -57.3% 4333989 ± 4% iozone.512KB_512reclen.fwrite
12817906 ± 5% -64.2% 4585174 ± 7% iozone.512KB_512reclen.random_write
11254899 ± 23% -58.1% 4712207 ± 3% iozone.512KB_512reclen.record_rewrite
7774338 ± 5% -53.4% 3624363 ± 9% iozone.512KB_512reclen.rewrite
6771886 ± 2% -41.1% 3986479 ± 4% iozone.512KB_512reclen.write
800056 -13.7% 690201 ± 2% iozone.512KB_64reclen
8943767 ± 2% -49.5% 4519888 ± 2% iozone.512KB_64reclen.frewrite
9113029 ± 2% -49.3% 4618343 iozone.512KB_64reclen.fwrite
11727579 ± 4% -59.9% 4707398 ± 4% iozone.512KB_64reclen.random_write
14262817 ± 7% -69.3% 4379665 ± 3% iozone.512KB_64reclen.record_rewrite
7189400 ± 2% -48.1% 3727859 ± 2% iozone.512KB_64reclen.rewrite
6324167 ± 3% -35.8% 4057263 ± 3% iozone.512KB_64reclen.write
478105 -4.9% 454663 ± 2% iozone.512KB_8reclen
4484121 ± 8% -21.3% 3529343 ± 2% iozone.512KB_8reclen.frewrite
4734724 ± 2% -22.5% 3667327 ± 2% iozone.512KB_8reclen.fwrite
4285637 ± 3% -21.7% 3354676 ± 3% iozone.512KB_8reclen.rewrite
4167376 ± 7% -16.1% 3497431 ± 4% iozone.512KB_8reclen.write
380792 -16.9% 316489 iozone.524288KB_1024reclen
4182707 -38.2% 2584442 iozone.524288KB_1024reclen.frewrite
4208045 -38.5% 2586615 iozone.524288KB_1024reclen.fwrite
4746818 -41.9% 2756626 iozone.524288KB_1024reclen.random_write
12948563 -69.8% 3914308 iozone.524288KB_1024reclen.record_rewrite
4186499 -38.2% 2588662 iozone.524288KB_1024reclen.rewrite
3707293 -27.7% 2680239 iozone.524288KB_1024reclen.write
431843 ± 4% -17.4% 356596 iozone.524288KB_128reclen
4069767 ± 9% -36.4% 2588593 iozone.524288KB_128reclen.frewrite
4079706 ± 9% -36.0% 2611388 iozone.524288KB_128reclen.fwrite
4379068 -42.5% 2519619 iozone.524288KB_128reclen.random_write
18466442 ± 14% -75.0% 4611034 iozone.524288KB_128reclen.record_rewrite
10592121 +1.7% 10767895 iozone.524288KB_128reclen.reread
4002754 -37.8% 2491421 iozone.524288KB_128reclen.rewrite
3627215 -29.8% 2548092 ± 3% iozone.524288KB_128reclen.write
347453 -11.4% 307984 iozone.524288KB_16384reclen
3271528 -34.2% 2151430 ± 4% iozone.524288KB_16384reclen.frewrite
3286841 -32.6% 2214421 iozone.524288KB_16384reclen.fwrite
4625809 -39.7% 2791290 iozone.524288KB_16384reclen.random_write
8139628 ± 8% -59.9% 3267021 ± 2% iozone.524288KB_16384reclen.record_rewrite
4074653 -36.6% 2584407 iozone.524288KB_16384reclen.rewrite
3657694 -27.9% 2636561 iozone.524288KB_16384reclen.write
364883 -13.9% 314183 iozone.524288KB_2048reclen
8847193 +2.4% 9060472 iozone.524288KB_2048reclen.fread
4036772 -37.6% 2518570 iozone.524288KB_2048reclen.frewrite
4055761 -37.3% 2541319 iozone.524288KB_2048reclen.fwrite
4648856 -40.5% 2767063 iozone.524288KB_2048reclen.random_write
10209277 -63.8% 3700146 iozone.524288KB_2048reclen.record_rewrite
4120405 -37.4% 2580251 iozone.524288KB_2048reclen.rewrite
3687354 ± 2% -27.5% 2673004 iozone.524288KB_2048reclen.write
431784 ± 8% -14.7% 368311 iozone.524288KB_256reclen
4061568 ± 12% -34.3% 2667748 iozone.524288KB_256reclen.frewrite
4089031 ± 13% -34.6% 2675433 iozone.524288KB_256reclen.fwrite
4153039 ± 13% -37.7% 2586336 iozone.524288KB_256reclen.random_write
21061999 -77.9% 4663314 iozone.524288KB_256reclen.record_rewrite
9644476 ± 11% +13.5% 10947927 iozone.524288KB_256reclen.reread
3957096 ± 8% -36.9% 2498077 iozone.524288KB_256reclen.rewrite
3708958 -29.7% 2607600 iozone.524288KB_256reclen.write
365403 -13.8% 314900 iozone.524288KB_4096reclen
4018347 -36.9% 2537033 iozone.524288KB_4096reclen.frewrite
4064270 -37.3% 2549563 iozone.524288KB_4096reclen.fwrite
4663198 -40.3% 2784744 iozone.524288KB_4096reclen.random_write
10057156 -63.1% 3715403 iozone.524288KB_4096reclen.record_rewrite
4154963 -38.3% 2561944 iozone.524288KB_4096reclen.rewrite
3733178 -28.7% 2662798 iozone.524288KB_4096reclen.write
445806 -19.5% 358905 iozone.524288KB_512reclen
4455258 -38.9% 2723386 iozone.524288KB_512reclen.frewrite
4529424 -39.7% 2732012 iozone.524288KB_512reclen.fwrite
4728030 -42.8% 2702810 iozone.524288KB_512reclen.random_write
19417290 ± 3% -76.9% 4494683 iozone.524288KB_512reclen.record_rewrite
4252001 ± 2% -40.2% 2543611 iozone.524288KB_512reclen.rewrite
3748274 ± 5% -28.2% 2690289 ± 2% iozone.524288KB_512reclen.write
416154 -16.7% 346626 iozone.524288KB_64reclen
4097421 -37.7% 2552856 iozone.524288KB_64reclen.frewrite
4114763 -36.9% 2597729 iozone.524288KB_64reclen.fwrite
4059909 -41.4% 2380185 ± 4% iozone.524288KB_64reclen.random_write
16909664 -73.5% 4487795 ± 5% iozone.524288KB_64reclen.record_rewrite
3885305 -36.0% 2484738 iozone.524288KB_64reclen.rewrite
3485125 ± 2% -26.4% 2565242 iozone.524288KB_64reclen.write
361507 -13.0% 314496 iozone.524288KB_8192reclen
8751425 +3.3% 9044435 iozone.524288KB_8192reclen.bkwd_read
4021932 -37.3% 2519798 iozone.524288KB_8192reclen.frewrite
4029210 -37.4% 2520367 iozone.524288KB_8192reclen.fwrite
4624949 -39.6% 2792755 iozone.524288KB_8192reclen.random_write
9824162 -63.5% 3588696 ± 2% iozone.524288KB_8192reclen.record_rewrite
4113266 -37.5% 2569105 iozone.524288KB_8192reclen.rewrite
8840507 +2.6% 9069156 iozone.524288KB_8192reclen.stride_read
3695751 -27.7% 2670870 iozone.524288KB_8192reclen.write
4652673 ± 24% -48.2% 2411724 ± 38% iozone.64KB_16reclen.random_write
6124949 ± 6% -44.5% 3402157 ± 5% iozone.64KB_16reclen.record_rewrite
4690498 ± 4% -34.5% 3072246 ± 14% iozone.64KB_16reclen.rewrite
7132382 ± 15% -48.9% 3642362 ± 6% iozone.64KB_32reclen.record_rewrite
8120162 ± 6% -54.2% 3720855 ± 19% iozone.64KB_64reclen.random_write
8267460 ± 6% -50.1% 4125200 ± 4% iozone.64KB_64reclen.record_rewrite
4581532 ± 17% -39.5% 2769666 ± 19% iozone.64KB_64reclen.write
4691011 -35.0% 3050516 ± 20% iozone.64KB_8reclen.record_rewrite
4003729 ± 4% -27.2% 2915760 ± 11% iozone.64KB_8reclen.rewrite
3360656 ± 3% -14.1% 2885464 ± 5% iozone.64KB_8reclen.write
402591 ± 2% -20.6% 319718 iozone.65536KB_1024reclen
9791995 ± 2% -3.8% 9416697 ± 3% iozone.65536KB_1024reclen.freread
4307101 -39.1% 2621644 iozone.65536KB_1024reclen.frewrite
4498761 ± 4% -41.9% 2615383 iozone.65536KB_1024reclen.fwrite
5660509 ± 4% -48.7% 2902944 iozone.65536KB_1024reclen.random_write
12809725 ± 2% -69.4% 3916498 iozone.65536KB_1024reclen.record_rewrite
9776019 ± 5% -8.1% 8988945 ± 2% iozone.65536KB_1024reclen.reread
4350957 ± 2% -39.4% 2638716 iozone.65536KB_1024reclen.rewrite
3974207 ± 5% -31.6% 2718382 iozone.65536KB_1024reclen.write
473239 ± 4% -21.9% 369705 ± 2% iozone.65536KB_128reclen
4377096 ± 2% -39.5% 2647855 iozone.65536KB_128reclen.frewrite
4729920 ± 9% -43.2% 2684971 iozone.65536KB_128reclen.fwrite
5468735 ± 5% -46.9% 2903721 iozone.65536KB_128reclen.random_write
19818575 -76.5% 4652744 iozone.65536KB_128reclen.record_rewrite
4213942 ± 2% -38.8% 2580789 iozone.65536KB_128reclen.rewrite
3959940 ± 5% -33.7% 2627238 iozone.65536KB_128reclen.write
339441 ± 2% -14.9% 288777 ± 2% iozone.65536KB_16384reclen
3836114 -29.5% 2705330 iozone.65536KB_16384reclen.frewrite
4026876 ± 2% -32.6% 2713650 ± 5% iozone.65536KB_16384reclen.fwrite
5066003 ± 2% -42.3% 2921152 ± 2% iozone.65536KB_16384reclen.random_write
6647502 -53.6% 3084275 iozone.65536KB_16384reclen.record_rewrite
4000380 -37.0% 2520062 ± 2% iozone.65536KB_16384reclen.rewrite
3689062 ± 4% -29.9% 2585183 iozone.65536KB_16384reclen.write
381408 ± 3% -17.2% 315791 iozone.65536KB_2048reclen
4150052 ± 2% -38.2% 2562800 ± 3% iozone.65536KB_2048reclen.frewrite
4366399 ± 5% -40.6% 2594992 iozone.65536KB_2048reclen.fwrite
5459554 ± 5% -46.4% 2928750 iozone.65536KB_2048reclen.random_write
9999409 -63.3% 3665495 iozone.65536KB_2048reclen.record_rewrite
4323040 ± 2% -39.5% 2616028 iozone.65536KB_2048reclen.rewrite
3975298 ± 4% -31.6% 2719542 ± 2% iozone.65536KB_2048reclen.write
493925 ± 3% -23.3% 379052 iozone.65536KB_256reclen
4618908 ± 2% -40.7% 2739839 iozone.65536KB_256reclen.frewrite
4878676 ± 8% -43.8% 2742467 iozone.65536KB_256reclen.fwrite
5543513 ± 7% -47.5% 2911964 ± 2% iozone.65536KB_256reclen.random_write
21674869 -78.3% 4703546 iozone.65536KB_256reclen.record_rewrite
4316073 ± 2% -40.6% 2561615 ± 2% iozone.65536KB_256reclen.rewrite
4091194 ± 8% -34.4% 2685829 ± 3% iozone.65536KB_256reclen.write
386466 ± 3% -16.4% 322996 iozone.65536KB_4096reclen
4262068 -38.7% 2613308 ± 2% iozone.65536KB_4096reclen.frewrite
4246013 ± 2% -37.8% 2639126 iozone.65536KB_4096reclen.fwrite
5377536 ± 2% -46.7% 2868163 ± 5% iozone.65536KB_4096reclen.random_write
9619397 -62.4% 3619658 iozone.65536KB_4096reclen.record_rewrite
4295062 ± 2% -39.2% 2609899 iozone.65536KB_4096reclen.rewrite
3873263 ± 4% -29.3% 2737042 ± 2% iozone.65536KB_4096reclen.write
471489 -23.1% 362778 ± 2% iozone.65536KB_512reclen
4719039 ± 2% -41.0% 2786233 iozone.65536KB_512reclen.frewrite
4941073 ± 6% -44.5% 2744267 ± 2% iozone.65536KB_512reclen.fwrite
5763651 ± 6% -47.5% 3027789 ± 2% iozone.65536KB_512reclen.random_write
19424730 ± 3% -76.7% 4531186 iozone.65536KB_512reclen.record_rewrite
4506592 ± 2% -41.0% 2657102 iozone.65536KB_512reclen.rewrite
4278222 ± 6% -35.5% 2758807 ± 2% iozone.65536KB_512reclen.write
450461 ± 2% -21.4% 354159 ± 3% iozone.65536KB_64reclen
4245088 ± 3% -39.9% 2551044 ± 5% iozone.65536KB_64reclen.frewrite
4472056 ± 7% -39.1% 2721937 ± 2% iozone.65536KB_64reclen.fwrite
5105996 ± 5% -44.1% 2852003 iozone.65536KB_64reclen.random_write
16847036 ± 2% -72.5% 4626346 iozone.65536KB_64reclen.record_rewrite
4068751 -36.8% 2569793 iozone.65536KB_64reclen.rewrite
3761778 ± 4% -29.8% 2640634 ± 6% iozone.65536KB_64reclen.write
374899 ± 2% -16.6% 312721 iozone.65536KB_8192reclen
4248877 ± 3% -35.4% 2744762 ± 2% iozone.65536KB_8192reclen.frewrite
4347033 ± 2% -36.0% 2782983 iozone.65536KB_8192reclen.fwrite
5102401 ± 2% -42.7% 2923845 iozone.65536KB_8192reclen.random_write
9046426 -60.9% 3535553 iozone.65536KB_8192reclen.record_rewrite
4181552 -37.9% 2598768 iozone.65536KB_8192reclen.rewrite
3725325 ± 5% -27.6% 2698126 iozone.65536KB_8192reclen.write
541652 -21.0% 427956 iozone.8192KB_1024reclen
7588814 ± 2% -47.4% 3994097 iozone.8192KB_1024reclen.frewrite
7082574 ± 4% -44.9% 3904631 iozone.8192KB_1024reclen.fwrite
10345367 -58.8% 4265061 ± 2% iozone.8192KB_1024reclen.random_write
12687343 ± 4% -68.1% 4044617 iozone.8192KB_1024reclen.record_rewrite
7671323 -52.6% 3637718 ± 2% iozone.8192KB_1024reclen.rewrite
6403719 -40.0% 3843378 ± 2% iozone.8192KB_1024reclen.write
715385 -21.7% 559829 ± 2% iozone.8192KB_128reclen
9492398 -55.1% 4265155 iozone.8192KB_128reclen.frewrite
9583339 -55.2% 4294686 iozone.8192KB_128reclen.fwrite
10948189 -59.5% 4439434 iozone.8192KB_128reclen.random_write
19822925 -76.5% 4666594 iozone.8192KB_128reclen.record_rewrite
8024183 ± 2% -51.5% 3895607 iozone.8192KB_128reclen.rewrite
6726543 ± 3% -38.9% 4111241 ± 2% iozone.8192KB_128reclen.write
529512 -12.8% 461764 iozone.8192KB_16reclen
12713193 ± 2% -2.4% 12403682 iozone.8192KB_16reclen.bkwd_read
6142090 ± 2% -37.0% 3869305 iozone.8192KB_16reclen.frewrite
6202098 -36.7% 3924276 iozone.8192KB_16reclen.fwrite
6298580 -40.0% 3782064 iozone.8192KB_16reclen.random_write
9019398 ± 4% -51.7% 4356552 iozone.8192KB_16reclen.record_rewrite
5739034 -37.1% 3608220 iozone.8192KB_16reclen.rewrite
5319076 ± 3% -30.9% 3677574 ± 6% iozone.8192KB_16reclen.write
497042 -19.9% 398208 ± 2% iozone.8192KB_2048reclen
7599511 ± 2% -53.0% 3568886 ± 26% iozone.8192KB_2048reclen.frewrite
7063907 -43.2% 4012680 ± 2% iozone.8192KB_2048reclen.fwrite
8661047 -57.6% 3676566 ± 18% iozone.8192KB_2048reclen.random_write
9853000 -61.9% 3752285 iozone.8192KB_2048reclen.record_rewrite
6834824 -49.3% 3465809 iozone.8192KB_2048reclen.rewrite
5745400 ± 5% -37.6% 3585810 ± 2% iozone.8192KB_2048reclen.write
733833 ± 2% -23.5% 561035 ± 2% iozone.8192KB_256reclen
9868867 ± 2% -56.1% 4335083 iozone.8192KB_256reclen.frewrite
9962499 -56.7% 4309833 ± 2% iozone.8192KB_256reclen.fwrite
11554593 -61.1% 4490540 iozone.8192KB_256reclen.random_write
21283509 -77.9% 4705744 iozone.8192KB_256reclen.record_rewrite
8183994 ± 5% -52.0% 3931252 iozone.8192KB_256reclen.rewrite
6826489 ± 9% -39.7% 4119292 ± 4% iozone.8192KB_256reclen.write
616178 ± 2% -17.3% 509351 ± 2% iozone.8192KB_32reclen
7607962 ± 2% -47.0% 4028488 iozone.8192KB_32reclen.frewrite
7723721 -47.1% 4089104 iozone.8192KB_32reclen.fwrite
8246685 -49.9% 4127517 iozone.8192KB_32reclen.random_write
14882779 ± 2% -3.8% 14313397 ± 3% iozone.8192KB_32reclen.read
13176393 -65.8% 4512706 iozone.8192KB_32reclen.record_rewrite
6905286 ± 2% -45.3% 3777504 iozone.8192KB_32reclen.rewrite
6136280 ± 4% -36.1% 3919141 ± 2% iozone.8192KB_32reclen.write
480910 ± 3% -18.6% 391551 iozone.8192KB_4096reclen
9029468 ± 7% -43.0% 5145507 ± 3% iozone.8192KB_4096reclen.frewrite
4898402 ± 3% -24.6% 3693143 ± 7% iozone.8192KB_4096reclen.fwrite
8547116 -54.0% 3929360 iozone.8192KB_4096reclen.random_write
9254872 -59.3% 3769732 iozone.8192KB_4096reclen.record_rewrite
6569113 ± 2% -49.7% 3303761 iozone.8192KB_4096reclen.rewrite
5563031 ± 2% -39.3% 3374003 ± 3% iozone.8192KB_4096reclen.write
3440021 +2.4% 3522588 iozone.8192KB_4reclen.record_rewrite
711208 ± 2% -23.9% 541401 ± 3% iozone.8192KB_512reclen
9320610 -55.0% 4196921 ± 2% iozone.8192KB_512reclen.frewrite
8957011 -53.4% 4174983 iozone.8192KB_512reclen.fwrite
11809259 -62.1% 4476670 ± 2% iozone.8192KB_512reclen.random_write
18829929 -76.1% 4508938 iozone.8192KB_512reclen.record_rewrite
8411175 ± 3% -53.8% 3887441 iozone.8192KB_512reclen.rewrite
7166144 ± 2% -44.7% 3959966 ± 3% iozone.8192KB_512reclen.write
675616 ± 2% -19.9% 541307 ± 2% iozone.8192KB_64reclen
8613899 ± 4% -51.6% 4172567 iozone.8192KB_64reclen.frewrite
8822220 ± 2% -52.4% 4202922 iozone.8192KB_64reclen.fwrite
9695269 ± 4% -55.4% 4319618 iozone.8192KB_64reclen.random_write
16652653 -72.5% 4584103 iozone.8192KB_64reclen.record_rewrite
7647358 ± 2% -49.8% 3838600 iozone.8192KB_64reclen.rewrite
6513828 ± 5% -38.2% 4025626 ± 4% iozone.8192KB_64reclen.write
461761 ± 4% -22.1% 359687 iozone.8192KB_8192reclen
7795996 ± 6% -54.3% 3564917 iozone.8192KB_8192reclen.frewrite
7654999 ± 6% -54.5% 3479801 ± 2% iozone.8192KB_8192reclen.fwrite
8520759 -54.0% 3918730 iozone.8192KB_8192reclen.random_write
8157000 ± 3% -55.0% 3671143 iozone.8192KB_8192reclen.record_rewrite
6177989 ± 5% -49.5% 3119569 ± 2% iozone.8192KB_8192reclen.rewrite
4416235 ± 5% -34.4% 2896523 ± 3% iozone.8192KB_8192reclen.write
439124 ± 2% -7.6% 405667 iozone.8192KB_8reclen
4698260 -23.2% 3610275 iozone.8192KB_8reclen.frewrite
4768517 -23.2% 3660266 iozone.8192KB_8reclen.fwrite
4380191 -25.2% 3277166 ± 2% iozone.8192KB_8reclen.random_write
6126524 -33.0% 4104360 iozone.8192KB_8reclen.record_rewrite
4439028 -22.8% 3425308 iozone.8192KB_8reclen.rewrite
4266167 ± 5% -20.0% 3412028 ± 2% iozone.8192KB_8reclen.write
5162798 -16.0% 4334478 iozone.average_KBps
60901246 ± 3% -43.0% 34701299 iozone.frewrite_KBps
57283573 ± 3% -42.0% 33239682 iozone.fwrite_KBps
70165219 -50.7% 34625385 iozone.random_write_KBps
1.178e+08 -66.3% 39658202 iozone.record_rewrite_KBps
52267713 ± 2% -42.3% 30152206 iozone.rewrite_KBps
5.00 +20.0% 6.00 iozone.time.percent_of_cpu_this_job_got
59.48 +27.4% 75.76 iozone.time.system_time
390341 ± 16% +40.8% 549598 ± 9% iozone.time.voluntary_context_switches
45439615 ± 3% -32.4% 30728676 iozone.write_KBps
Disclaimer:
Results have been estimated based on internal Intel analysis and are provided
for informational purposes only. Any difference in system hardware or software
design or configuration may affect actual performance.
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 0/2] btrfs: convert btrfs_buffered_write() to folio interface
2024-10-10 4:46 [PATCH 0/2] btrfs: convert btrfs_buffered_write() to folio interface Qu Wenruo
2024-10-10 4:46 ` [PATCH 1/2] btrfs: make buffered write to copy one page a time Qu Wenruo
2024-10-10 4:46 ` [PATCH 2/2] btrfs: convert btrfs_buffered_write() to use folio interface Qu Wenruo
@ 2024-10-22 1:17 ` David Sterba
2024-10-22 2:35 ` Qu Wenruo
2 siblings, 1 reply; 6+ messages in thread
From: David Sterba @ 2024-10-22 1:17 UTC (permalink / raw)
To: Qu Wenruo; +Cc: linux-btrfs
On Thu, Oct 10, 2024 at 03:16:11PM +1030, Qu Wenruo wrote:
> Inspired by generic_perform_write(), convert btrfs_buffered_write() to
> go a page-by-page iteration, then convert it to use folio interface.
>
> This should provide the basis for use to go
> address_operations->write_begin() and write_end() callbacks.
>
> There is a tiny timing change.
> Before this patchset we wait for the page writeback after we get an
> uptodate or no need to read the page.
>
> But now we follow the regular FGP_WRITEBEGIN, which implies FGP_STABLE
> and will wait for writeback before reading the page.
>
> Qu Wenruo (2):
> btrfs: make buffered write to copy one page a time
> btrfs: convert btrfs_buffered_write() to use folio interface
So this is another step towards folios, ok. The first patch got a LKP
bot report about performance degradataion due to the change from
multiple pages to per page loop, but you mention that. The drop is 16%,
that's not something that we should ignore. It was for one workload so
this is mabye acceptable.
Another thing is that how it's changed to the write begin/end, I don't
understand this enough to give it a yes/no. Also this is the buffered
write so quite fundamental file operation. I've had the patches in
misc-next (and in linux-next) for some time, so we have some testing. I
hope we get more reviews too. We're now in rc4, so it's about the time
to get it in or delay until the next cycle if there are doubts.
Regarding the patches, I have only style comments, you touch a lot of
code that is not changed often so it would be good to fix the style of
code or comments but correctness comes first so this can be fixed later,
I'd really like to be sure this is safe.
My suggestion is to add the patches to for-next, we'll have enough time
to catch problems and expose the new code to more testing environments.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 0/2] btrfs: convert btrfs_buffered_write() to folio interface
2024-10-22 1:17 ` [PATCH 0/2] btrfs: convert btrfs_buffered_write() to " David Sterba
@ 2024-10-22 2:35 ` Qu Wenruo
0 siblings, 0 replies; 6+ messages in thread
From: Qu Wenruo @ 2024-10-22 2:35 UTC (permalink / raw)
To: dsterba; +Cc: linux-btrfs
在 2024/10/22 11:47, David Sterba 写道:
> On Thu, Oct 10, 2024 at 03:16:11PM +1030, Qu Wenruo wrote:
>> Inspired by generic_perform_write(), convert btrfs_buffered_write() to
>> go a page-by-page iteration, then convert it to use folio interface.
>>
>> This should provide the basis for use to go
>> address_operations->write_begin() and write_end() callbacks.
>>
>> There is a tiny timing change.
>> Before this patchset we wait for the page writeback after we get an
>> uptodate or no need to read the page.
>>
>> But now we follow the regular FGP_WRITEBEGIN, which implies FGP_STABLE
>> and will wait for writeback before reading the page.
>>
>> Qu Wenruo (2):
>> btrfs: make buffered write to copy one page a time
>> btrfs: convert btrfs_buffered_write() to use folio interface
>
> So this is another step towards folios, ok. The first patch got a LKP
> bot report about performance degradataion due to the change from
> multiple pages to per page loop, but you mention that. The drop is 16%,
> that's not something that we should ignore. It was for one workload so
> this is mabye acceptable.
The performance drop in fact is larger than my expectation, and affects
quite some benchmarks, thus I'm not in a rush to push it for upstream
anytime soon.
>
> Another thing is that how it's changed to the write begin/end, I don't
> understand this enough to give it a yes/no.
It's only one step towards that interface, and there are still quite
some work left.
And the change to write_begin/end interface is not high on my to-do list.
> Also this is the buffered
> write so quite fundamental file operation. I've had the patches in
> misc-next (and in linux-next) for some time, so we have some testing. I
> hope we get more reviews too. We're now in rc4, so it's about the time
> to get it in or delay until the next cycle if there are doubts.
>
> Regarding the patches, I have only style comments, you touch a lot of
> code that is not changed often so it would be good to fix the style of
> code or comments but correctness comes first so this can be fixed later,
> I'd really like to be sure this is safe.
>
> My suggestion is to add the patches to for-next, we'll have enough time
> to catch problems and expose the new code to more testing environments.
OK, I can do the push, but if anyone hits any functional problems I'll
be more than happier to revert/remove them immediately.
Thanks,
Qu
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-10-22 2:35 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-10 4:46 [PATCH 0/2] btrfs: convert btrfs_buffered_write() to folio interface Qu Wenruo
2024-10-10 4:46 ` [PATCH 1/2] btrfs: make buffered write to copy one page a time Qu Wenruo
2024-10-17 7:08 ` kernel test robot
2024-10-10 4:46 ` [PATCH 2/2] btrfs: convert btrfs_buffered_write() to use folio interface Qu Wenruo
2024-10-22 1:17 ` [PATCH 0/2] btrfs: convert btrfs_buffered_write() to " David Sterba
2024-10-22 2:35 ` Qu Wenruo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).