Recently of my one old customer mailed me asking why this particular odf running forever during the upgrade, after analysis found that the odf was creating an index on one of the key Account Receivables tables which had millions of records. This one odf was skewing the upgrade timings a lot even though the boxes were powerful.
Solution was to use adpatch parallel_index_threshold=<higher value>, i had used this option in my previous upgrade and made a big difference (however it depends on how many parallel_max_servers init.ora parameter you have set)

References