Download the syslet version of acp
Acp is a rough implementation of an optimized filesystem walker. In general, when doing a full read of a directory tree you touch three different groups of objects.
- Directory data
- Inode data (things returned by stat(2))
- File bodies
Acp creates queues corresponding to each of these groups, and tries to do work in bulk in each one. As it finds files and directories the are sorted by either inode number (the default) or by the first block in the file (acp -b). Run acp -h to see the other command line options.
In general, the sorting makes the IO started by acp much closer to the order the filesystems store things on disk. It is especially effective on ext3 when htree is used, because htree causes readdir to return files in random order. This graph shows the performance difference while reading a single kernel tree with tar and with acp.