HyperDU は、高速なディスク使用量分析を目指した Rust 製ツールです。並列処理とOS固有APIの最適化により、従来のツールより高速に動作する可能性があります。
⚠️ 動作確認について: 現在 Windows 環境でのみ動作確認済みです。Linux/macOS での動作は未確認のため、これらの環境では動作しない可能性があります。
- 高速スキャン: 並列処理とプラットフォーム最適化による高速化を目指しています
- du 互換モード:
--compat gnuオプションで GNU du 風の出力形式に対応 - マルチプラットフォーム対応予定: Windows (動作確認済み), Linux (未確認), macOS (未確認)
- 並列処理: ワークスティーリングアルゴリズムによる効率的な並列化
- プラットフォーム最適化:
- Linux:
getdents64システムコール、io_uring(実験的) - Windows:
FindFirstFileExW+ NT Query API - macOS:
getattrlistbulkによる一括取得
- Linux:
- リアルタイムチューニング: 実行中にパフォーマンスパラメータを自動調整
- 多様な出力形式: du互換出力、CSV、JSON、独自の詳細表示
- GUI版も提供: CLI版に加えて、直感的なGUIアプリケーション
本ツールは OS 固有の列挙 API と並列処理を最適化し、高速なスキャンを目指しています。実測の性能はストレージ(NVMe/SSD/HDD/ネットワーク)、ファイル構成、除外条件、オプション設定に大きく依存します。再現可能な比較が必要な場合は、同一環境・同条件で hyperdu-cli --progress と du などを用いてベンチマークを取得してください。
-
プラットフォーム最適化
- Linux:
getdents64システムコール +statx(io_uring は現状実験的で未統合) - Windows:
FindFirstFileExWwithFIND_FIRST_EX_LARGE_FETCH - macOS:
getattrlistbulkによる名称・型・サイズのバルク取得
- Linux:
-
並列処理
- ワークスティーリングによる動的負荷分散
- マルチスレッドでディレクトリを並行スキャン
- 二段キュー(High/Normal)による優先度制御
-
メモリ最適化
mimallocアロケータ(オプション機能)ahashによる高速ハッシュマップ- Aho-Corasick による高速パターンマッチング
以下は GitHub Releases の最新版への直接リンクです。ダウンロードして展開するだけで実行できます。
- Windows (x86_64)
- Linux (x86_64, glibc)
- Linux (x86_64, musl・CLIのみ)
- Linux (aarch64, glibc)
その他のアセット(チェックサム等)は 最新リリース一覧 を参照してください。
# リポジトリのクローン
git clone https://github.com/yourusername/HyperDiskUsage.git
cd HyperDiskUsage
# リリースビルド(最高パフォーマンス)
RUSTFLAGS="-C target-cpu=native" cargo build --release --all
# インストール
cargo install --path hyperdu-cli
cargo install --path hyperdu-gui # GUI版(オプション)- Rust 1.75 以降
- Windows: Visual Studio 2019 以降または MinGW-w64 (動作確認済み)
- Linux: 未確認(io_uring 機能を使用する場合はカーネル 5.6+ が必要)
- macOS: 未確認
# 従来の du を HyperDU に置き換え
alias du='hyperdu-cli --compat gnu'
# du と同じオプションがそのまま使える
hyperdu-cli --compat gnu -sh /var/log
hyperdu-cli --compat gnu -ak /home --max-depth=2
hyperdu-cli --compat gnu -b --time /usr/share
# du 互換の出力形式で高速動作を目指しています# カレントディレクトリをスキャン(デフォルトは高速モード)
hyperdu-cli .
# ターボモードで最速スキャン
hyperdu-cli --perf turbo /large/directory
# 進捗表示とライブチューニング付き
hyperdu-cli /large/directory --progress --tune-log
# 特定のディレクトリを除外して高速化
hyperdu-cli . --exclude ".git,node_modules,target,build"
# CSV/JSON形式で出力
hyperdu-cli . --csv output.csv --json output.jsonUSAGE:
hyperdu-cli [OPTIONS] <ROOT>
ARGS:
<ROOT> スキャンするディレクトリパス
OPTIONS:
-t, --top <N> 上位N個のディレクトリを表示 [default: 30]
-e, --exclude <PATTERNS> 除外するパターン(カンマ区切り)
-d, --max-depth <DEPTH> 最大再帰深度(0 = 無制限)
-m, --min-file-size <BYTES> 最小ファイルサイズ(バイト)
-f, --follow-links シンボリックリンクを追跡
--threads <N> ワーカースレッド数 [default: CPU数]
--csv <PATH> CSV形式で出力
--json <PATH> JSON形式で出力
--progress スキャン進捗を標準出力に表示
--progress-every N 進捗をNファイルごとに表示(既定: 8192)
--no-uring Linuxでio_uringを無効化(WSL/ネットワークFS向け)
--uring-sqpoll io_uringのSQPOLLを有効化
--uring-sqpoll-idle-ms SQPOLLスレッドのアイドル時間(ms)
--uring-sqpoll-cpu SQPOLLスレッドのCPU固定
--uring-coop cooperative taskrun を有効化
--classify MODE 種別分類: basic|deep
--class-report PATH 分類結果をJSONへ出力
--class-report-csv PATH 分類結果をCSVへ出力
--incremental-db PATH スナップショットDB(sled)
--compute-delta DBと比較して差分件数を表示
--update-snapshot 現在状態をDBへ反映し、削除キーを自動prune
--watch 変更監視(create/modify/removeを出力)
--verbose, -v 冗長モード(進捗/ログ詳細 + 既定ファイル名でレポート自動保存)
--tune-log ライブチューニングログを表示
--tune-threshold <N> チューニング閾値(デフォルト: 0.05 = 5%)
--tune-only チューニングのみ実行(推奨値を表示)
--tune-secs <N> チューニング実行時間(秒)
-h, --help ヘルプを表示
-V, --version バージョンを表示
# 1GB以上のファイルのみをカウント
hyperdu-cli / --min-file-size 1073741824
# 3階層までの深さでスキャン
hyperdu-cli . --max-depth 3
# 複数の除外パターンを指定
hyperdu-cli ~/projects --exclude ".git,node_modules,target,build,dist"
# 物理サイズの計算をスキップして高速化(論理サイズのみ)
hyperdu-cli / --logical-only
# 推定サイズモードで高速スキャン(精度とトレードオフ)
hyperdu-cli / --approximate
# ライブチューニングのログを表示しながらスキャン
hyperdu-cli /large/directory --progress --tune-log
# 最適なパラメータを2秒間で測定
hyperdu-cli /large/directory --tune-only --tune-secs 2GUI版は egui フレームワークを使用した直感的なインターフェースを提供:
# GUI版の起動
hyperdu-gui
# 特定のディレクトリを開いて起動
hyperdu-gui ~/Documents- リアルタイムスキャン表示
- インタラクティブなツリービュー
- files/s(平均/直近)とyield値の表示
- ディレクトリのドリルダウン
- 結果のエクスポート
高速化を目指していますが、実際の性能はストレージ種類、ファイルシステム、ファイル構成に大きく依存します。
| 想定環境 | 期待される改善 |
|---|---|
| NVMe SSD (多数の小ファイル) | 大幅な高速化の可能性 |
| HDD (大規模ディレクトリ) | 中程度の高速化 |
| ネットワークドライブ | 環境依存 |
注: 上記は理論値であり、実環境での性能は異なる場合があります。Windows 環境でのみ動作確認済みです。
# 従来の du コマンド
du -sh /path/to/directory
# HyperDU で完全互換動作
hyperdu-cli --compat gnu -sh /path/to/directory
# du 互換の出力形式を目指しています- Linux:
getdents64+statx。io_uring は安定化済みの高速経路(WSL/ネットワークFSでは自動抑制/フォールバック)
- Ext4/XFS/ZFS
- getdents_buf_kb=128、prefetch=1(posix_fadvise+readahead/madvise)
- io_uring: 有効(環境・オプションに依存)
- Btrfs
- compute_physical=false(論理サイズ優先)
- getdents_buf_kb=128、prefetch=0
- io_uring: 有効(環境・オプションに依存)
- DrvFS(WSL)/Network(NFS/SMB/SSHFS/9p/fuse)
- compute_physical=false、getdents_buf_kb=64、prefetch=0
- io_uring: 自動抑制(disable_uring=1)
- 推奨 threads: 4(必要に応じてランタイムチューニングが増減)
適用時は stderr に詳細ログを 1 行出力: 例
fs-auto: fs='ext4' strategy='ext4' reason='fstype=ext4' changes=[getdents_buf_kb=128,prefetch=1] for '/data'
- Windows:
FindFirstFileExW(FIND_FIRST_EX_LARGE_FETCH)による列挙 - macOS:
getattrlistbulkによる名称・型・サイズの一括取得
HyperDiskUsage/
├── hyperdu-core/ # コアスキャンエンジン
├── hyperdu-cli/ # CLIアプリケーション
├── hyperdu-gui/ # GUIアプリケーション
├── scripts/ # ビルド・パッケージングスクリプト
└── Cargo.toml # ワークスペース設定
# mimalloc アロケータを無効化
cargo build --release --no-default-features
# Tracy プロファイラサポート
cargo build --release --features prof-tracy
# Puffin プロファイラサポート
cargo build --release --features prof-puffin
# io_uring サポート(Linux、実験的)
cargo build --release --features uring
# SIMD プリフェッチ(実験的)
cargo build --release --features simd-prefetch簡易パッケージングスクリプトを同梱:
Unix/WSL:
# 基本パッケージング
bash scripts/package_release.sh
# クロスビルドも対応
bash scripts/package_release.sh --targets "linux-musl,windows-gnu"
# CPU最適化オプション
bash scripts/package_release.sh --cpu-flavors "generic,native"
# GUIを省く
bash scripts/package_release.sh --skip-guiWindows (PowerShell):
# 基本パッケージング
powershell -ExecutionPolicy Bypass -File scripts\package_release.ps1
# CPU最適化版
powershell -ExecutionPolicy Bypass -File scripts\package_release.ps1 -CpuFlavor native# すべてのテストを実行
cargo test --all
# ベンチマークを実行
cargo bench
# 特定のテスト実行
cargo test -p hyperdu-core test_name
# Clippy による静的解析
cargo clippy --workspace -- -D warnings
### ベンチと回帰基準
高速化/回帰検知のために簡易ベンチスクリプトを用意しています。
scripts/bench.sh --root /path/to/dir
WITH_RAYON=1 scripts/bench.sh --root /path/to/dir
scripts/bench.sh --root /path/to/dir # classify-basic / classify-deep / incr-update / incr-delta を含む
回帰基準(目安)
- NVMe/ext4: turbo-uring が turbo-off 比で +10% 以上
- WSL/DrvFS, ネットワークFS: turbo-off(--no-uring)が最速。io_uringは自動抑制または `--no-uring` を推奨
### ランタイムチューニング(任意・上級者)
- `hyperdu-cli … --tune` でアダプティブチューナを有効化(dir_yield/uringバッチ/実行スレッド数を動的調整)
- スレッドは `active_threads` を動的に制御([1, threads] 範囲)
- I/O待ちやSQE失敗が多い→縮退
- throughput改善が続く→段階的に増加
プルリクエストを歓迎します!大きな変更の場合は、まず Issue を開いて変更内容について議論してください。
- フォーク
- フィーチャーブランチ作成 (
git checkout -b feature/AmazingFeature) - 変更をコミット (
git commit -m 'Add some AmazingFeature') - ブランチをプッシュ (
git push origin feature/AmazingFeature) - プルリクエストを開く
このプロジェクトは MIT ライセンスの下でライセンスされています - 詳細は LICENSE ファイルを参照してください。
- Linux/macOS での動作確認とテスト
- 各プラットフォームでのベンチマーク測定
- 機械学習によるサイズ推定の実装
- より詳細なドキュメント作成
- Windows: 動作確認済み
- Linux: 未確認(ビルドは可能だが動作未検証)
- macOS: 未確認(ビルドは可能だが動作未検証)
- WSL環境:
/mnt/*(NTFS) でビルド時に一時ディレクトリ削除エラーが出る場合があります。Linux側にリポジトリを配置するか、CARGO_TARGET_DIRを設定してください - シンボリックリンク: デフォルトでは追跡しません。
--follow-linksで有効化できますが、循環参照に注意してください - io_uring (Linux): 実装済みですがテストされていません
HyperDU - ディスク使用量分析を、より速く、より効率的に。