[PATCH blktests] tests/nvme: add NVMe test group and tracepoint test

Johannes Thumshirn jthumshirn at suse.de
Fri Feb 16 06:21:04 PST 2018


Add a NVMe test group and a tracepoint test as the first test case.

Signed-off-by: Johannes Thumshirn <jthumshirn at suse.de>
---
 common/nvme        | 28 +++++++++++++++++++++++
 tests/nvme/001     | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/nvme/001.out | 12 ++++++++++
 tests/nvme/group   | 28 +++++++++++++++++++++++
 4 files changed, 134 insertions(+)
 create mode 100644 common/nvme
 create mode 100755 tests/nvme/001
 create mode 100644 tests/nvme/001.out
 create mode 100644 tests/nvme/group

diff --git a/common/nvme b/common/nvme
new file mode 100644
index 000000000000..ec3986f43e21
--- /dev/null
+++ b/common/nvme
@@ -0,0 +1,28 @@
+#!/bin/bash
+#
+# Default helper functions for NVMe devices.
+#
+# Copyright (C) 2018 Johannes Thumshirn
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+shopt -s extglob
+
+_test_dev_is_nvme() {
+	if ! readlink -f "$TEST_DEV_SYSFS/device" | grep -q nvme; then
+		SKIP_REASON="$TEST_DEV is not a NVMe device"
+		return 1
+	fi
+	return 0
+}
diff --git a/tests/nvme/001 b/tests/nvme/001
new file mode 100755
index 000000000000..ff4a9047c884
--- /dev/null
+++ b/tests/nvme/001
@@ -0,0 +1,66 @@
+#!/bin/bash
+#
+# Regression test for commit 3d030e41d96f ("nvme: add tracepoint for
+# nvme_setup_cmd")
+#
+# Copyright (C) 2018 Johannes Thumshirn
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+DESCRIPTION="enable nvme_setup_nvm_cmd trace point and submit I/O to the
+device"
+
+QUICK=1
+
+# This function normalizes the variable parts of the trace on the individual
+# test system so the known good result in test/nvme/001.out matches if all is
+# OK.
+# If anyone finds a readable way of definig this filter I'm all ears.
+filter_trace() {
+	sed -r "s/dd-[0-9]+\s+\[[0-9]+\]\s+\.{4}\s+[0-9]+\.[0-9]+: nvme_setup_nvm_cmd:\s+qid=[0-9]+, nsid=[0-9]+, cmdid=[0-9]+, flags=0x0, meta=0x0, cmd=\(nvme_cmd_read slba=0, len=31, ctrl=0x0, dsmgmt=0, reftag=0\)/dd-XXX   [XXX] ....     X.XXXXXX: nvme_setup_nvm_cmd: qid=X, nsid=X, cmdid=X, flags=0x0, meta=0x0, cmd=(nvme_cmd_read slba=0, len=31, ctrl=0x0, dsmgmt=0, reftag=0)/"
+}
+
+test_device() {
+	echo "Running ${TEST_NAME}"
+	cleanup_debugfs=0
+	cleanup_tracefs=0
+
+	if ! grep -q debugfs /proc/mounts; then
+		mount -t debugfs none /sys/kernel/debug
+		cleanup_debugfs=1
+	fi
+
+	if ! grep -q tracefs /proc/mounts; then
+		mount -t tracefs none /sys/kernel/debug/tracing
+		cleanup_tracefs=1
+	fi
+
+	echo 1 > /sys/kernel/debug/tracing/events/nvme/nvme_setup_nvm_cmd/enable
+
+	dd if=${TEST_DEV} of=/dev/null bs=512 count=1 >>$FULL 2> /dev/null
+
+	cat /sys/kernel/debug/tracing/trace | filter_trace
+
+	echo 0 > /sys/kernel/debug/tracing/events/nvme/nvme_setup_nvm_cmd/enable
+
+	if [[ $cleanup_tracefs == 1 ]]; then
+		umount /sys/kernel/debug/tracing
+	fi
+
+	if [[ $cleanup_debugfs == 1 ]]; then
+		umount /sys/kernel/debug
+	fi
+
+	echo "Test complete"
+}
diff --git a/tests/nvme/001.out b/tests/nvme/001.out
new file mode 100644
index 000000000000..bca1d0fc27b1
--- /dev/null
+++ b/tests/nvme/001.out
@@ -0,0 +1,12 @@
+Running nvme/001
+# tracer: nop
+#
+#                              _-----=> irqs-off
+#                             / _----=> need-resched
+#                            | / _---=> hardirq/softirq
+#                            || / _--=> preempt-depth
+#                            ||| /     delay
+#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
+#              | |       |   ||||       |         |
+              dd-XXX   [XXX] ....     X.XXXXXX: nvme_setup_nvm_cmd: qid=X, nsid=X, cmdid=X, flags=0x0, meta=0x0, cmd=(nvme_cmd_read slba=0, len=31, ctrl=0x0, dsmgmt=0, reftag=0)
+Test complete
diff --git a/tests/nvme/group b/tests/nvme/group
new file mode 100644
index 000000000000..5e4e65c922c7
--- /dev/null
+++ b/tests/nvme/group
@@ -0,0 +1,28 @@
+#!/bin/bash
+#
+# Test specific to NVMe devices
+#
+# Copyright (C) 2018 Johannes Thumshirn
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+. common/nvme
+
+group_requires() {
+	_have_root
+}
+
+group_device_requires() {
+	_test_dev_is_nvme
+}
-- 
2.13.6




More information about the Linux-nvme mailing list