root/software/fiemap_testing/filler.py @ 7fa2f28e
| be16b11b | dsorber | import os
|
|
import random
|
|||
import subprocess
|
|||
import sys
|
|||
MEGA = 2**20
|
|||
def main():
|
|||
if len(sys.argv) < 6:
|
|||
print 'ERROR: not enough arguments provided'
|
|||
return -1
|
|||
# Assign input arguments
|
|||
write_path = sys.argv[1]
|
|||
min_chunks_per_file = int(sys.argv[2])
|
|||
max_chunks_per_file = int(sys.argv[3])
|
|||
chunk_size = int(sys.argv[4])
|
|||
max_write_amount = int(sys.argv[5])
|
|||
# Do some basic input validation for S&G
|
|||
if min_chunks_per_file > max_chunks_per_file:
|
|||
print 'ERROR: specified minimum chunks per file is larger than '\
|
|||
'specified maximum chunks per file'
|
|||
return -1
|
|||
if chunk_size > max_write_amount:
|
|||
print 'ERROR: specified chunk size is larger than specified maximum '\
|
|||
'write amount'
|
|||
amount_written = 0
|
|||
file_counter = 0
|
|||
chunk_idx_counter = 0
|
|||
total_written = 0
|
|||
keep_running = True
|
|||
while keep_running:
|
|||
# Create the file name and randomly determine the number of blocks
|
|||
file_name = '%08X' % file_counter
|
|||
file_counter += 1
|
|||
chunks_per_file = random.randint(min_chunks_per_file, max_chunks_per_file)
|
|||
file_size = chunks_per_file * chunk_size
|
|||
# Make sure we don't write more than intended
|
|||
if (total_written + file_size) > max_write_amount:
|
|||
chunks_per_file = (max_write_amount - total_written) / chunk_size
|
|||
file_size = chunks_per_file * chunk_size
|
|||
keep_running = False
|
|||
# Print out status
|
|||
sys.stdout.write('Creating file "%s" with %5d chunks - %7d MB ... ' %
|
|||
(file_name, chunks_per_file, file_size))
|
|||
sys.stdout.flush()
|
|||
# Make the "file" directory
|
|||
path = os.path.join(write_path, file_name)
|
|||
os.mkdir(path)
|
|||
# Create each of the actual chunk files
|
|||
for chunk in xrange(chunks_per_file):
|
|||
chunk_name = '%016X' % chunk_idx_counter
|
|||
chunk_idx_counter += 1
|
|||
chunk_path = os.path.join(path, chunk_name)
|
|||
command = 'head -c %d /dev/zero > %s' % (chunk_size * MEGA, chunk_path)
|
|||
subprocess.call(command, shell=True)
|
|||
sys.stdout.write('DONE\n')
|
|||
total_written += file_size
|
|||
print ' Total written: %d MB' % total_written
|
|||
if __name__ == '__main__':
|
|||
sys.exit(main())
|