チェックサムの計算速度をベンチマークできるツールをpythonスクリプトで作成してみた
以下ファイル .py にベンチを取りたいファイルをD&D
※ただし異なるハッシュ形式を連続して計測するためディスクキャッシュなどの影響で正しいベンチが取れない可能性が高い
Pythonスクリプト例
import os
import hashlib
import time
import argparse
# ハッシュ計算の関数(キャッシュを回避)
def calculate_hash(file_path, algorithm):
hash_func = None
# 使用するハッシュアルゴリズムを決定
if algorithm == "md5":
hash_func = hashlib.md5()
elif algorithm == "sha1":
hash_func = hashlib.sha1()
elif algorithm == "sha256":
hash_func = hashlib.sha256()
elif algorithm == "sha512":
hash_func = hashlib.sha512()
else:
raise ValueError(f"Unsupported algorithm: {algorithm}")
# ファイルを読み込み、ハッシュ計算
with open(file_path, "rb") as f:
while chunk := f.read(8192): # バッファサイズを指定
hash_func.update(chunk)
# キャッシュをリセット
f.flush() # ファイルの内容をディスクに書き込む
return hash_func.hexdigest()
# ベンチマーク関数(ファイル読み込みのキャッシュを強制的に避ける)
def benchmark(file_path):
algorithms = ["sha1","sha256" , "sha512", "md5"]
results = {}
# 各アルゴリズムで計算速度を測定
for algo in algorithms:
start_time = time.time()
calculate_hash(file_path, algo)
end_time = time.time()
elapsed_time = end_time - start_time
results[algo] = elapsed_time
return file_path, results
# 引数の設定
def parse_arguments():
parser = argparse.ArgumentParser(description="ハッシュ計算のベンチマークを実行します")
parser.add_argument("file_path", help="ベンチマーク対象のファイルパス")
return parser.parse_args()
# メイン実行部分
if __name__ == "__main__":
# 引数を解析してファイルパスを取得
args = parse_arguments()
file_path = args.file_path
# ファイルが存在するか確認
if not os.path.isfile(file_path):
print(f"指定されたファイルが存在しません: {file_path}")
else:
print(f"ベンチマーク開始: {file_path}")
# ベンチマークを実行
file_path, results = benchmark(file_path)
# 結果を表示
print(f"\nベンチマーク結果: {file_path}")
for algo, elapsed_time in results.items():
print(f"{algo.upper()}: {elapsed_time:.6f}秒")
# ウィンドウを保持するためにinput()を使用
input("\n処理が完了しました。任意のキーを押して終了します...")
計算結果の傾向としては?(Core i7-4790K環境)
前述の通りキャッシュの影響こそあるが同じSHA系のチェックサムだけで比較した場合でもSHA256よりSHA512のほうが早いことがわかった
これは4790Kに搭載されている拡張命令がSHA512に適しているんだろう






コメントを残す