import os
import time

def write_large_file(file_path, size_mb):
    """写入大文件"""
    with open(file_path, 'wb') as f:
        f.write(os.urandom(size_mb * 1024 * 1024))  # 写入指定大小的随机数据

def read_large_file(file_path):
    """读取大文件"""
    with open(file_path, 'rb') as f:
        f.read()  # 读取文件内容

def write_small_files(dir_path, num_files, file_size):
    """写入小文件"""
    for i in range(num_files):
        file_path = os.path.join(dir_path, f'small_file_{i}.txt')
        with open(file_path, 'wb') as f:
            f.write(os.urandom(file_size))  # 写入指定大小的随机数据

def read_small_files(dir_path, num_files):
    """读取小文件"""
    for i in range(num_files):
        file_path = os.path.join(dir_path, f'small_file_{i}.txt')
        with open(file_path, 'rb') as f:
            f.read()  # 读取文件内容

def measure_io(test_type, *args):
    """测量IO性能"""
    start_time = time.time()
    if test_type == 'large_write':
        write_large_file(*args)
    elif test_type == 'large_read':
        read_large_file(*args)
    elif test_type == 'small_write':
        write_small_files(*args)
    elif test_type == 'small_read':
        read_small_files(*args)
    end_time = time.time()
    return end_time - start_time

def main():
    dir_path = '/var/lib/docker/'  # 修改为你的测试目录
    large_file_size_mb = 10240  # 大文件大小（MB）
    small_file_size = 1024  # 小文件大小（字节）
    num_small_files = 100  # 小文件数量

    # 大文件测试
    print("开始大文件写入测试...")
    large_write_time = measure_io('large_write', os.path.join(dir_path, 'large_file.bin'), large_file_size_mb)
    print(f"大文件写入时间: {large_write_time:.2f}秒")
    
    print("开始大文件读取测试...")
    large_read_time = measure_io('large_read', os.path.join(dir_path, 'large_file.bin'))
    print(f"大文件读取时间: {large_read_time:.2f}秒")

    # 小文件测试
    print("开始小文件写入测试...")
    small_write_time = measure_io('small_write', dir_path, num_small_files, small_file_size)
    print(f"小文件写入时间: {small_write_time:.2f}秒")

    print("开始小文件读取测试...")
    small_read_time = measure_io('small_read', dir_path, num_small_files)
    print(f"小文件读取时间: {small_read_time:.2f}秒")

if __name__ == '__main__':
    main()
