perf_testing/scripts/highspeed_create.py (33 lines of code) (raw):
import os
import subprocess
import concurrent.futures
import time
import multiprocessing
import argparse
import json
def create_file(file_index, folder):
timestamp = int(time.time()) # Get current timestamp
filename = os.path.join(folder, f'20GFile_{timestamp}_{file_index}')
command = f"dd if=/dev/zero of={filename} bs=16M count=1280 oflag=direct"
start_time = time.time()
subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
end_time = time.time()
return (filename, end_time - start_time)
def main(folder, num_files):
if not os.path.exists(folder):
os.makedirs(folder)
start_time = time.time()
with concurrent.futures.ThreadPoolExecutor(max_workers=multiprocessing.cpu_count()) as executor:
futures = [executor.submit(create_file, i, folder) for i in range(num_files)]
results = [f.result() for f in concurrent.futures.as_completed(futures)]
end_time = time.time()
total_time = end_time - start_time
total_data_written = num_files * 20 # in GB
speed_gbps = (total_data_written * 8) / total_time # converting GB to Gb and then calculating Gbps
print(json.dumps({"name": "create_10_20GB_file", "total_time": total_time, "speed": speed_gbps / 8, "unit": "GiB/s"}))
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Create multiple 20GB files in parallel.')
parser.add_argument('folder', type=str, help='The folder where the files will be written.')
parser.add_argument('num_files', type=int, help='The number of 20GB files to create.')
args = parser.parse_args()
main(args.folder, args.num_files)