Skip to content

MkP369/idu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

idu (instant du)

License

A minimal multithreaded (fastest?) du -sh written in C++20


Benchmarks

These are all tested on my 22 core x86 laptop

Hot Cache

Tested on my home directory (~60 GB)

 hyperfine --warmup 3 -i 'idu' 'diskus' 'du -sh' 'gdu -s -c -p'  'dust -d0 -b -n0 -c -P' 'pdu -d1 --no-sort'

Results

Command Mean [ms] Min [ms] Max [ms] Relative
idu 66.1 ± 2.6 60.7 73.0 1.00
diskus 148.5 ± 6.9 138.8 159.7 2.25 ± 0.14
du -sh 533.5 ± 23.6 505.9 571.1 8.07 ± 0.48
gdu -s -c -p 192.4 ± 11.6 173.0 209.4 2.91 ± 0.21
dust -d0 -b -n0 -c -P 246.1 ± 17.6 224.1 270.5 3.72 ± 0.30
pdu -d1 --no-sort 76.5 ± 3.0 68.9 82.0 1.16 ± 0.06

Cold Cache

Tested on linux kernel source (~5.5 GB)

hyperfine --prepare 'sync; echo 3 | sudo tee /proc/sys/vm/drop_caches' \
       'idu' 'diskus' 'du -sh' 'gdu -s -c -p'  'dust -d0 -b -n0 -c -P' 'pdu -d1 --no-sort'

Results

Command Mean [ms] Min [ms] Max [ms] Relative
idu 293.1 ± 7.7 280.5 302.3 1.00
diskus 308.9 ± 8.1 290.1 320.4 1.05 ± 0.04
du -sh 1722.9 ± 110.5 1573.0 1940.4 5.88 ± 0.41
gdu -s -c -p 381.8 ± 8.6 364.5 389.7 1.30 ± 0.05
dust -d0 -b -n0 -c -P 395.1 ± 11.2 383.8 417.7 1.35 ± 0.05
pdu -d1 --no-sort 300.8 ± 12.4 275.6 315.4 1.03 ± 0.05

Usage

Usage:
idu [OPTION...] [PATHS...]

  -i, --ignore-errors           Do not display file-system errors
  -f, --format <FORMAT>         Set the display format [possible values:
                                metric, binary, bytes, kb, kib, mb, mib, gb,
                                gib, tb, tib] (default: binary)
  -j, --threads <NUM>           Set the number of threads (0 means total
                                logical processors) (default: 0)
  -c, --count-items             Display total count of files and
                                sub-directories
  -d, --dir-greater-than <NUM><UNIT>
                                List directories >= a specified size
                                (shallow)
  -l, --file-larger-than <NUM><UNIT>
                                List files >= a specified size
      --paths <PATHS>           The path(s) to query
  -h, --help                    Print usage

Examples

Get du of the current dir

idu

Example output:

"/home/mkp/"
62.07 GiB

Get du of multiple dirs/files with their file and dir counts

idu -c index.html dev/ Documents/

Example output:

"/home/mkp/index.html"
4.00 KiB
Total sub-directories: 0
Total files: 1

"/home/mkp/dev/"
5.94 GiB
Total sub-directories: 7223
Total files: 106597

"/home/mkp/Documents/"
3.00 MiB
Total sub-directories: 0
Total files: 3

Get du in bytes and list files >= some size

idu -f "bytes" -l "300mb" linux/

Example output:

"/home/mkp/dev/linux/"
3.48 GB linux/.git/objects/pack/pack-20b694c5eafaebe6d5d9ef3d4632360563d5dfb3.pack
385.02 MB linux/.git/objects/pack/pack-20b694c5eafaebe6d5d9ef3d4632360563d5dfb3.idx
5849366528 bytes

Installing & Building

Prerequisites

  • Linux
  • GCC 12+
  • CMake 3.20+
  • mold linker

Installing

curl -fsSL https://raw.githubusercontent.com/MkP369/idu/main/install.sh | bash

Building Release Profile

cmake -B build_release -DCMAKE_BUILD_TYPE=Release
cmake --build build_release -j$(nproc)

Building Debug Profile

cmake -B build_debug -DCMAKE_BUILD_TYPE=Debug
cmake --build build_debug -j$(nproc)

TODO

  • batch statx call
  • unit tests
  • add more display options
  • benchmark clang vs gcc?

Other Awesome Disk Usage Tools!

About

instant du -sh and a bit more

Topics

Resources

License

Stars

18 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors