diff mbox

fixup! xfs: test per-inode DAX flag by IO

Message ID 1486221472-1007-1-git-send-email-ross.zwisler@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ross Zwisler Feb. 4, 2017, 3:17 p.m. UTC
This makes a few changes to allow xfs/138 to use PMD faults, and has a few
other changes which I think are improvements.

For PMD faults:
- We need to use MKFS_OPTIONS="-d su=2m,sw=1" to ensure that the block
  allocations we get from XFS are 2MiB sized and aligned.  Without this we
  will fall back to 4k DAX pages for all the tests.

- We need to preallocate the file size with fallocate, rather than using
  "xfs_io -c pwrite".  This lets XFS increase the size of the test files
  before the test starts, giving us 2MiB sized and aligned blocks.  This
  also has the added bonus that we don't start out the mmap portion of the
  test with all the areas of the files written to and allocated.  This
  means that on the first read pass through a portion of a file we exercise
  the zero page DAX path for holes, then on subsequent passes we'll fill
  the holes and exercise the normal DAX path, giving us better overall
  coverage of the DAX code.  It also makes the test run slightly faster.

- For some reason I was having trouble getting XFS to give me 2MiB aligned
  and sized block allocations with file size 1GiB?  The test only needs
  file sizes of 64 MiB, and dropping the files used to that size ensured
  that I always got 2MiB allocations, but truthfully I don't understand
  this behavior from XFS.

And one cleanup thing:

- Changed the sizes above 4k to use bash math instead of having hard coded
  values.  I personally don't have 67108864 memorized to be 64 MiB (maybe
  everyone else does), but the meaning of $((64 * 1024 * 1024)) is more
  obvious to the reader.

I'm working on similar changes for your generic/405, but am still having
trouble getting PMD faults from ext4, even with the mkfs options I had
previously been using for other testing.

Signed-off-by: Ross Zwisler <ross.zwisler@linux.intel.com>
---
 tests/xfs/138 | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

Comments

Murphy Zhou Feb. 5, 2017, 6:21 a.m. UTC | #1
Hi Ross,

Thanks for the fixup!
Here are v5 for testing and reviewing. And I need your
permission to add you in the signed-off list :)

---
common/rc         : requires SCRATCH_DEV support DAX
src/t_mmap_dio.c  : intro mmap and O_DIRECT rw through files
tests/generic/405 : IO between DAX/non-DAX mountpoints
tests/xfs/138     : IO between DAX/non-DAX xfs files(per-inode flag)

v2 :
  Merge helper function changes into the first patch;
  Rewrite _require_dax, check options for sure;
  Print msg in t_mmap_dio.c to show which test going wrong;
  Empty mount options and check after mount to ensure we
wont mount with wrong option;
  Remove unnecessary leading underscore and _fail;
  Use xfs_io instead of dd;
  Other minor fixes.

v3:
 close fds in C test programme for clean up.

v4:
 Test both buffered and O_DIRECT IO;
 Fix arg numbers in C test programme;
 Fix fs options check after mount.
 Cc Jeff Moyer since this test is based on his code.
 (Sorry for the late cc!)

v5:
 Mainly from Ross Zwisler <ross.zwisler@linux.intel.com>
 Add mkfs options to make fs 2M aligned, to hit PMD faults;
 Use falloc instead of pwrite to init test file aviding 4k
alignment;
 64M test file instead of 1G;
 Bumping test seq numners;
 Other minor fixes.

Test status:
  Both cases not run on normal block device;
  Both cases PASS on ramdisk based pmem devices;
  Both cases PASS on nvdimm(memory namespace) devices;
  DIO in both cases FAIL on brd based ramdisk with:
  DIO in both cases FAIL on nvdimm(raw namespace) devices with:
    +write(Bad address) len 1024 dio dax to nondax
    +write(Bad address) len 4096 dio dax to nondax
    +write(Bad address) len 16777216 dio dax to nondax
    +write(Bad address) len 67108864 dio dax to nondax
  (expected behavior)
  https://lists.01.org/pipermail/linux-nvdimm/2017-January/008600.html

Xiong Zhou (2):
  xfs: test per-inode DAX flag by IO
  generic: test mmap io through DAX and non-DAX

 .gitignore            |   1 +
 common/rc             |  13 ++++++
 src/Makefile          |   2 +-
 src/t_mmap_dio.c      | 107 ++++++++++++++++++++++++++++++++++++++++++
 tests/generic/407     | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/generic/407.out |   2 +
 tests/generic/group   |   1 +
 tests/xfs/196         | 124 +++++++++++++++++++++++++++++++++++++++++++++++++
 tests/xfs/196.out     |   2 +
 tests/xfs/group       |   1 +
 10 files changed, 377 insertions(+), 1 deletion(-)
 create mode 100644 src/t_mmap_dio.c
 create mode 100755 tests/generic/407
 create mode 100644 tests/generic/407.out
 create mode 100755 tests/xfs/196
 create mode 100644 tests/xfs/196.out
diff mbox

Patch

diff --git a/tests/xfs/138 b/tests/xfs/138
index 9822441..4762534 100755
--- a/tests/xfs/138
+++ b/tests/xfs/138
@@ -79,22 +79,21 @@  do_tests()
 	# page size
 	t_dax_flag_mmap_dio `src/feature -s`
 	# bigger sizes, for PMD faults
-	t_dax_flag_mmap_dio 16777216
-	t_dax_flag_mmap_dio 67108864
+	t_dax_flag_mmap_dio $((16 * 1024 * 1024))
+	t_dax_flag_mmap_dio $((64 * 1024 * 1024))
 }
 
+export MKFS_OPTIONS="-d su=2m,sw=1"
 _scratch_mkfs > /dev/null 2>&1
 
 # mount with dax option
 _scratch_mount "-o dax"
 
 psize=`src/feature -s`
-tsize=$((1024 * 1024 * 1024))
+tsize=$((64 * 1024 * 1024))
 
-$XFS_IO_PROG -f -c "pwrite -W -b $psize 0 $tsize" \
-	$SCRATCH_MNT/tf_s >> $seqres.full 2>&1
-$XFS_IO_PROG -f -c "pwrite -W -b $psize 0 $tsize" \
-	$SCRATCH_MNT/tf_d >> $seqres.full 2>&1
+$XFS_IO_PROG -f -c "falloc 0 $tsize" $SCRATCH_MNT/tf_s >> $seqres.full 2>&1
+$XFS_IO_PROG -f -c "falloc 0 $tsize" $SCRATCH_MNT/tf_d >> $seqres.full 2>&1
 
 do_tests
 _scratch_unmount