Currently, redistributedata moves all or none of the segment files from one dbroot to another. It makes no attempt to balance the segments of a partition across dbroots.
redistributedata should become segment aware and balance segments better.
In addition, all data movement is done serially. That is one file at a time. Any parallelism available (multiple files at a time) should be used.