summaryrefslogtreecommitdiff
path: root/tests/generic/273
blob: 54c1999624212723066a63200f4edb4c2b8365c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2011-2012 Fujitsu, Inc.  All Rights Reserved.
#
# FS QA Test No. 273
#
# reservation test with heavy cp workload
#
#creator

. ./common/preamble
_begin_fstest auto rw

status=0	# success is the default!

# Override the default cleanup function.
_cleanup()
{
	cd /
	rm -rf $tmp.*
	_scratch_unmount
}

. ./common/filter

threads=50
count=2

_threads_set()
{
	_cpu_num=`$here/src/feature -o`
	threads=$(($_cpu_num * 50))
	if [ $threads -gt 200 ]
	then
		threads=200
	fi
}

_file_create()
{
	block_size=$1
	_i=0

	if ! mkdir $SCRATCH_MNT/origin
	then
		echo "mkdir origin err"
		status=1
		exit
	fi

	cd $SCRATCH_MNT/origin

	_disksize=$(_get_available_space $SCRATCH_MNT)
	_free_inodes=$(_get_free_inode $SCRATCH_MNT)
	# Some filesystems do not limit number of inodes and return 0
	if [ $_free_inodes -eq 0 ]; then
		# Guess one block per inode
		_free_inodes=$(($_disksize / $block_size))
	fi
	# Leave some slack for directories etc.
	_free_inodes=$(($_free_inodes - $_free_inodes/8))
	_disksize=$(($_disksize / 3))
	_num=$(($_disksize / $count / $block_size))
	if [ $_num -gt $_free_inodes ]; then
		_num=$_free_inodes
	fi
	_num=$(($_num/$threads))
	_count=$count
	while [ $_i -lt $_num ]
	do
		dd if=/dev/zero of=file_$_i bs=$block_size count=$_count >/dev/null 2>&1
		_i=$(($_i + 1))
	done

	cd $here
}

_porter()
{
	_suffix=$1

	if ! mkdir $SCRATCH_MNT/sub_$_suffix
	then
		echo "mkdir sub_xxx err"
		status=1
		exit
	fi

	cp -r $SCRATCH_MNT/origin $SCRATCH_MNT/sub_$_suffix >>$seqres.full 2>&1
	if [ $? -ne 0 ]
	then
		echo "_porter $_suffix not complete"
	fi
	
	sync
}

_do_workload()
{
	_pids=""
	_pid=1
	block_size=$(_get_file_block_size $SCRATCH_MNT)

	_threads_set
	_file_create $block_size

	_threads=$threads

	while [ $_pid -lt $_threads ]
	do
		_porter $_pid &
		_pids="$_pids $!"
		_pid=$(($_pid + 1))
	done

	wait $_pids
}

# real QA test starts here
_supported_fs generic
_require_scratch

echo "------------------------------"
echo "start the workload"
echo "------------------------------"

_scratch_unmount 2>/dev/null
_scratch_mkfs_sized $((2 * 1024 * 1024 * 1024)) >>$seqres.full 2>&1
_scratch_mount

_do_workload

status=0
exit