-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tests/perf: Test lseek influence on qcow2 block-status
Block layer may recursively check block_status in file child of qcow2, if qcow2 driver returned DATA. There are several test cases to check influence of lseek on block_status performance. To see real difference run on tmpfs. Tests originally created by Kevin, I just refactored and put them together into one executable file with simple output. Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]> Signed-off-by: Kevin Wolf <[email protected]>
- Loading branch information
Showing
1 changed file
with
71 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
#!/bin/bash | ||
# | ||
# Test lseek influence on qcow2 block-status | ||
# | ||
# Block layer may recursively check block_status in file child of qcow2, if | ||
# qcow2 driver returned DATA. There are several test cases to check influence | ||
# of lseek on block_status performance. To see real difference run on tmpfs. | ||
# | ||
# Copyright (c) 2019 Virtuozzo International GmbH. All rights reserved. | ||
# | ||
# Tests originally written by Kevin Wolf | ||
# | ||
# 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 2 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/>. | ||
# | ||
|
||
if [ "$#" -lt 1 ]; then | ||
echo "Usage: $0 SOURCE_FILE" | ||
exit 1 | ||
fi | ||
|
||
ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../../../.." >/dev/null 2>&1 && pwd )" | ||
QEMU_IMG="$ROOT_DIR/qemu-img" | ||
QEMU_IO="$ROOT_DIR/qemu-io" | ||
|
||
size=1G | ||
src="$1" | ||
|
||
# test-case plain | ||
|
||
( | ||
$QEMU_IMG create -f qcow2 "$src" $size | ||
for i in $(seq 16384 -1 0); do | ||
echo "write $((i * 65536)) 64k" | ||
done | $QEMU_IO "$src" | ||
) > /dev/null | ||
|
||
echo -n "plain: " | ||
/usr/bin/time -f %e $QEMU_IMG convert -n "$src" null-co:// | ||
|
||
# test-case forward | ||
|
||
( | ||
$QEMU_IMG create -f qcow2 "$src" $size | ||
for i in $(seq 0 2 16384); do | ||
echo "write $((i * 65536)) 64k" | ||
done | $QEMU_IO "$src" | ||
for i in $(seq 1 2 16384); do | ||
echo "write $((i * 65536)) 64k" | ||
done | $QEMU_IO "$src" | ||
) > /dev/null | ||
|
||
echo -n "forward: " | ||
/usr/bin/time -f %e $QEMU_IMG convert -n "$src" null-co:// | ||
|
||
# test-case prealloc | ||
|
||
$QEMU_IMG create -f qcow2 -o preallocation=metadata "$src" $size > /dev/null | ||
|
||
echo -n "prealloc: " | ||
/usr/bin/time -f %e $QEMU_IMG convert -n "$src" null-co:// |