Multithreaded digests
The rpmio subsystem permits multiple digests to
be computed from I/O buffers. Its essentially
a post/pre (depending on read or write) method
that loops over digests (if any) and updates the
digest as a side-effect of performing I/O operations.
The digest update loop is/was quite simple to parallelize
using OpenMP #pragmas, and the rpmdigest tool permitted
an easy measurement of the benefits of parallelization.
A 7x speedup was measure on a 4-way SMP machine using
--alldigests (which computes >100 hashes/digests) on an I/O
stream.
The accuracy of the results was verified by inspection for several
of the common hashes run singly (but the addition of a #pragma
is not very intrusive).
Digest algorithms per-se are not parallelizable: only the loop
over multiple digests/hashes can be parallelized.
RPM itself is CPU limited by the cost of computing/verifying digests
for all installed content. However there are only a few code paths
that have more than a single digest being computed at any one
point in time in the current implementation.
Blueprint information
- Status:
- Complete
- Approver:
- Jeff Johnson
- Priority:
- Low
- Drafter:
- Jeff Johnson
- Direction:
- Approved
- Assignee:
- Jeff Johnson
- Definition:
- Review
- Series goal:
- Accepted for 5.3
- Implementation:
-
Implemented
- Milestone target:
-
5.3.0
- Started by
- Jeff Johnson
- Completed by
- Jeff Johnson
Related branches
Related bugs
Sprints
Whiteboard
Work Items
Dependency tree

* Blueprints in grey have been implemented.