Recent changes (master)
Jens Axboe <[email protected]> Thu, 23 Jul 2026 06:00:02 -0600
| Newsgroups | org.kernel.vger.fio |
|---|---|
| Message-ID | <[email protected]> |
The following changes since commit cd29b7a64de2d5462a3b72e46d098679ba16b3f1:
ci: drop Ubuntu container test platforms (2026-07-17 11:43:02 -0400)
are available in the Git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to aa079a649f6df4fbda67fe612e74b0c34cea6dea:
ci: consolidate QEMU FDP and verify-trim tests (2026-07-22 12:34:16 -0400)
----------------------------------------------------------------
Vincent Fu (3):
ci: switch QEMU jobs to Debian testing
ci: add t/io_uring_pi.py to QEMU tests
ci: consolidate QEMU FDP and verify-trim tests
.github/actions/create-guest-image/action.yml | 22 ++++++++++++++--------
.github/actions/start-vm/action.yml | 5 +++--
.github/workflows/qemu.yml | 27 ++++++++++-----------------
t/fiotestcommon.py | 8 ++++++++
t/fiotestlib.py | 2 +-
t/io_uring_pi.py | 0
t/run-fio-tests.py | 10 ++++++++++
7 files changed, 46 insertions(+), 28 deletions(-)
mode change 100644 => 100755 t/io_uring_pi.py
---
Diff of recent changes:
diff --git a/.github/actions/create-guest-image/action.yml b/.github/actions/create-guest-image/action.yml
index 77be3a3c..427fb4dd 100644
--- a/.github/actions/create-guest-image/action.yml
+++ b/.github/actions/create-guest-image/action.yml
@@ -2,10 +2,10 @@ name: 'Create guest image'
description: 'Create VM guest image on Ubuntu runner'
inputs:
- distro:
- description: 'Linux distribution to use for guest image'
+ image_link:
+ description: 'Link to qcow2 cloud image file'
required: false
- default: 'debian-12'
+ default: 'https://cloud.debian.org/images/cloud/forky/daily/latest/debian-14-genericcloud-amd64-daily.qcow2'
extra_pkgs:
description: 'Extra packages to install for guest image'
required: false
@@ -23,14 +23,21 @@ runs:
sudo chmod 0666 /dev/kvm
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
shell: bash
- - name: Create Debian image
+ - name: Download cloud image
+ run: wget -q ${{ inputs.image_link }} -O debian.qcow2
+ shell: bash
+ - name: Customize Debian image
run: |
- virt-builder ${{ inputs.distro }} \
+ virt-customize -a debian.qcow2 \
--quiet \
--hostname fio-tester \
--ssh-inject root \
--run-command "ssh-keygen -A" \
- --run-command "sed -i 's/ens2/enp0s2/g' /etc/network/interfaces" \
+ --run-command "echo 'network:' > /etc/netplan/50-cloud-init.yaml" \
+ --run-command "echo ' version: 2' >> /etc/netplan/50-cloud-init.yaml" \
+ --run-command "echo ' ethernets:' >> /etc/netplan/50-cloud-init.yaml" \
+ --run-command "echo ' enp0s2:' >> /etc/netplan/50-cloud-init.yaml" \
+ --run-command "echo ' dhcp4: true' >> /etc/netplan/50-cloud-init.yaml" \
--append-line '/etc/environment:PYTHONUNBUFFERED=1' \
--append-line '/etc/environment:GITHUB_SERVER_URL=${{ github.server_url }}' \
--append-line '/etc/environment:GITHUB_REPOSITORY=${{ github.repository }}' \
@@ -39,7 +46,6 @@ runs:
--append-line '/etc/environment:GITHUB_JOB=${{ github.job }}' \
--append-line '/etc/environment:EXTRA_PKGS=${{ inputs.extra_pkgs }}' \
--append-line '/etc/environment:CI_TARGET_BUILD=${{ env.CI_TARGET_BUILD }}' \
- --append-line '/etc/environment:CI_TARGET_OS=${{ env.CI_TARGET_OS }}'
+ --append-line '/etc/environment:CI_TARGET_OS=${{ env.CI_TARGET_OS }}' \
shell: bash
-
diff --git a/.github/actions/start-vm/action.yml b/.github/actions/start-vm/action.yml
index ab13aa09..a09465ad 100644
--- a/.github/actions/start-vm/action.yml
+++ b/.github/actions/start-vm/action.yml
@@ -6,7 +6,8 @@ inputs:
required: false
default: "qemu-system-x86_64"
image: # VM image file
- required: true
+ required: false
+ default: debian.qcow2
ssh_fwd_port: # forward this host port to the guest's SSH port
required: false
default: 2022
@@ -36,7 +37,7 @@ runs:
run: |
${{ inputs.qemu }} \
-cpu host \
- -drive file=${{ inputs.image }},format=raw,if=virtio \
+ -drive file=${{ inputs.image }},format=qcow2,if=virtio \
-enable-kvm \
-smp $(nproc) \
-nographic \
diff --git a/.github/workflows/qemu.yml b/.github/workflows/qemu.yml
index 16d74e29..0395cc12 100644
--- a/.github/workflows/qemu.yml
+++ b/.github/workflows/qemu.yml
@@ -13,12 +13,12 @@ jobs:
fail-fast: false
matrix:
include:
- - config: basic io_uring_cmd tests
+ - config: basic io_uring_cmd and io_uring PI tests
device: >-
-device nvme,id=nvme0,serial=deadbeef
-drive id=nvm-0,file=nvme0.img,format=raw,if=none,discard=unmap,media=disk
-device nvme-ns,id=nvm-0,drive=nvm-0,bus=nvme0,nsid=1
- test_cmd: "python3 t/run-fio-tests.py --nvmecdev /dev/ng0n1 --run-only 1014 1015 1022 -p '1022:--skip 30 31 32 33 34 40 50 51 53 70'"
+ test_cmd: "python3 t/run-fio-tests.py --nvmebdev /dev/nvme0n1 --nvmecdev /dev/ng0n1 --run-only 1014 1015 1022 1025 -p '1022:--skip 30 31 32 33 34 40 50 51 53 70'"
extra_pkgs: "nvme-cli"
- config: 512 16-bit Guard PI tests (long)
device: >-
@@ -48,41 +48,36 @@ jobs:
-device nvme-ns,id=nvm-2,drive=nvm-2,bus=nvme2,nsid=1,pif=2,ms=64,mset=1,pi=1,pil=0,logical_block_size=4096,physical_block_size=4096
test_cmd: "python3 t/nvmept_pi.py --fio ./fio --dut /dev/ng0n1 --lbaf 7"
extra_pkgs: "nvme-cli"
- - config: FDP
+ - config: FDP and verify-trim
device: >-
-device nvme-subsys,id=nvme-subsys0,fdp=on,fdp.runs=128K,fdp.nrg=8,fdp.nruh=64
-device nvme,id=nvme0,serial=deadbeef,subsys=nvme-subsys0
-drive id=nvm-1,file=nvme0.img,format=raw,if=none,discard=unmap,media=disk
-device nvme-ns,id=nvm-1,drive=nvm-1,bus=nvme0,nsid=1,logical_block_size=4096,physical_block_size=4096,fdp.ruhs=0-63
- test_cmd: "nvme fdp status /dev/ng0n1 && python3 t/nvmept_fdp.py --fio ./fio --dut /dev/ng0n1"
- extra_pkgs: "nvme-cli"
- - config: verify-trim
- device:
- test_cmd: "python3 t/verify-trim.py"
- extra_pkgs: sg3-utils
+ test_cmd: "nvme fdp status /dev/ng0n1 && python3 t/nvmept_fdp.py --fio ./fio --dut /dev/ng0n1 && python3 t/verify-trim.py"
+ extra_pkgs: nvme-cli
- config: ZBD1-5
device:
test_cmd: "./t/zbd/run-tests-against-nullb -s 1 -s 2 -s 3 -s 4 -s 5"
- extra_pkgs: sg3-utils
+ extra_pkgs: sg3-utils util-linux-extra
- config: ZBD6-10
device:
test_cmd: "./t/zbd/run-tests-against-nullb -s 6 -s 7 -s 8 -s 9 -s 10"
- extra_pkgs: sg3-utils
+ extra_pkgs: sg3-utils util-linux-extra
- config: ZBD11-15
device:
test_cmd: "./t/zbd/run-tests-against-nullb -s 11 -s 12 -s 13 -s 14 -s 15"
- extra_pkgs: sg3-utils
+ extra_pkgs: sg3-utils util-linux-extra
- config: ZBD16-20
device:
test_cmd: "./t/zbd/run-tests-against-nullb -s 16 -s 17 -s 18 -s 19 -s 20"
- extra_pkgs: sg3-utils
+ extra_pkgs: sg3-utils util-linux-extra
- config: ZBD21-25
device:
test_cmd: "./t/zbd/run-tests-against-nullb -s 21 -s 22 -s 23 -s 24 -s 25"
- extra_pkgs: sg3-utils
+ extra_pkgs: sg3-utils util-linux-extra
env:
- DISTRO: debian-13
SSHCMD: ssh root@localhost -p 2022
SCPCMD: scp -P 2022
CI_TARGET_BUILD: linux
@@ -100,7 +95,6 @@ jobs:
- name: Create guest VM image
uses: ./.github/actions/create-guest-image
with:
- distro: ${{ env.DISTRO }}
extra_pkgs: ${{ matrix.extra_pkgs }}
- name: Build and install QEMU
@@ -112,7 +106,6 @@ jobs:
- name: Start VM
uses: ./.github/actions/start-vm
with:
- image: ${{ env.DISTRO }}.img
host_key: true
options: ${{ matrix.device }}
diff --git a/t/fiotestcommon.py b/t/fiotestcommon.py
index 04dfb91f..eee9b9ae 100644
--- a/t/fiotestcommon.py
+++ b/t/fiotestcommon.py
@@ -65,6 +65,7 @@ class Requirements():
_unittests = False
_cpucount4 = False
_nvmecdev = False
+ _nvmebdev = False
def __init__(self, fio_root, args):
Requirements._not_macos = platform.system() != "Darwin"
@@ -107,6 +108,7 @@ class Requirements():
Requirements._cpucount4 = multiprocessing.cpu_count() >= 4
Requirements._nvmecdev = args.nvmecdev if hasattr(args, 'nvmecdev') else False
+ Requirements._nvmebdev = args.nvmebdev if hasattr(args, 'nvmebdev') else False
req_list = [
Requirements.linux,
@@ -120,6 +122,7 @@ class Requirements():
Requirements.unittests,
Requirements.cpucount4,
Requirements.nvmecdev,
+ Requirements.nvmebdev,
]
for req in req_list:
value, desc = req()
@@ -179,3 +182,8 @@ class Requirements():
def nvmecdev(cls):
"""Do we have an NVMe character device to test?"""
return Requirements._nvmecdev, "NVMe character device test target required"
+
+ @classmethod
+ def nvmebdev(cls):
+ """Do we have an NVMe block device to test?"""
+ return Requirements._nvmebdev, "NVMe block device test target required"
diff --git a/t/fiotestlib.py b/t/fiotestlib.py
index 2049e41e..f842cf75 100755
--- a/t/fiotestlib.py
+++ b/t/fiotestlib.py
@@ -430,7 +430,7 @@ def run_fio_tests(test_list, test_env, args):
exe_path = os.path.join(test_env['fio_root'], config['exe'])
parameters = []
if config['parameters']:
- parameters = [p.format(fio_path=test_env['fio_path'], nvmecdev=args.nvmecdev)
+ parameters = [p.format(fio_path=test_env['fio_path'], nvmecdev=args.nvmecdev, nvmebdev=args.nvmebdev)
for p in config['parameters']]
if Path(exe_path).suffix == '.py' and platform.system() == "Windows":
parameters.insert(0, exe_path)
diff --git a/t/io_uring_pi.py b/t/io_uring_pi.py
old mode 100644
new mode 100755
diff --git a/t/run-fio-tests.py b/t/run-fio-tests.py
index 47d1e65e..c2f73edb 100755
--- a/t/run-fio-tests.py
+++ b/t/run-fio-tests.py
@@ -1171,6 +1171,14 @@ TEST_LIST = [
'success': SUCCESS_DEFAULT,
'requirements': [],
},
+ {
+ 'test_id': 1025,
+ 'test_class': FioExeTest,
+ 'exe': 't/io_uring_pi.py',
+ 'parameters': ['-f', '{fio_path}', '--dut', '{nvmebdev}'],
+ 'success': SUCCESS_DEFAULT,
+ 'requirements': [Requirements.linux, Requirements.nvmebdev],
+ },
]
@@ -1196,6 +1204,8 @@ def parse_args():
help='pass-through an argument to an executable test')
parser.add_argument('--nvmecdev', action='store', default=None,
help='NVMe character device for **DESTRUCTIVE** testing (e.g., /dev/ng0n1)')
+ parser.add_argument('--nvmebdev', action='store', default=None,
+ help='NVMe block device for **DESTRUCTIVE** testing (e.g., /dev/nvme0n1)')
parser.add_argument('-c', '--cleanup', action='store_true', default=False,
help='Delete artifacts for passing tests')
args = parser.parse_args()