The problem with syncing is basically because of shit code in the main start_full_node process. This process is not really doing much; however, it is basically single-threaded, so cannot expand beyond the core that it is sitting on. This process basically orchestrates work around peers, blockchain db, and processing blocks. To process those blocks, you have plenty of extra cores, so that is not the issue. However, a single core performance is not that great, and this is where that process chokes.
However, peers and db are closely related. The more peers you have, the more stress that puts on the blockchain db. At the same time, that db needs to do inserts of all new blocks (this comes from those extra cores after they are done). Those inserts are rather expensive.
Blockchain db grows every day, it means that db access gets slower and slower. Also, recently (for the past week), we have a bit elevated mem pool volume, and that doesnât help.
With that said, I assume that you didnât touch your config.yaml as far as the number of connections and are running with the default value - 80 peers. Before you add that NVMe, I would ask you to drop the number of those peers down to 40 (in the config.yaml), if not enough down to 20, and see what it does. As mentioned already, you donât need to worry about âqualityâ of those peers, as basically just one good will be enough to sync.
Dropping those connections doesnât mean not to add that NVMe, rather to the contrary. The NVMe will help a bit, and then you may need/want to play with the number of those peers to fine tune it.
This problem is just getting worst for everyone. Hopefully, v1.3 will address some of those issues, as otherwise, more and more people will be screwed.
In your config.yaml, change that second line (I assume, yours is right now 80):
full_node:
target_peer_count: 40
By the way, to see how much help you get from the NVMe, you could run sqlite vacuum first on your HD (HD to HD), and then on your NVMe (NVMe to NVMe) and compare timings.