ホンダ ジェイド250

Waste Days

バイクとPCと時々のぎ

チェックサムの計算速度をベンチマークできるツールを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に適しているんだろう



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください


2025年4月
 12345
6789101112
13141516171819
20212223242526
27282930  

archives

  • 2026 (1)
  • 2025 (33)
  • 2024 (28)
  • 2023 (15)
  • 2022 (19)
  • 2021 (15)
  • 2020 (16)
  • 2019 (13)
  • 2018 (21)
  • 2017 (40)
  • 2016 (118)
  • 2015 (53)
  • 2014 (31)
  • 2013 (14)
  • 2012 (59)
  • 2011 (89)
  • 2010 (65)
  • 2009 (97)
  • 2008 (22)

Avisynth aviutl BDAV BitLocker BonDriverProxyEx CentOS Collapsing Categories cppcryptfs EDCB FAW2AAC Firefox GoogleDrive HDMIキャプチャ LAST NUMBER openSUSE pCloud Raspberry Pi 2 Techism TvRock TVTest Ubuntu Windows 7 Windows 8.1 Windows 10 Windows10 WordPress WordPressテーマ XFREE Zenfone 10 アカウント凍結 グラディウス2 ゲーム攻略 セキュリティ セキュリティソフト ドライバ関連 乃木坂46 乃木坂46時間TV 卒業 坂道シリーズ 小粋空間 日記 桜井玲香 橋本奈々未 深川麻衣 選抜発表