What is the rationale for having auto index on _id field for capped collections by default? We can find in the docs that:
Without this indexing overhead, capped collections can support higher insertion throughput.
There was a post about capped collection insert performance and my own tests also show that for inserts capped collection without an index is the fastest option, then the normal collection goes, and the slowest option is capped collection with an index. So why auto index was added along with _id fields in version 2.2 if it hits performance while capped collections are proposed as fast alternatives to normal collections in certain scenarios?
Well, we certainly can't rule out benefits of _id in capped collection too. It help you and in fact required for replication.
MongoDB turned it on by default since deployment of MongoDB in replica set configuration is very normal now a days. You can find more information in documentation, please look for autoIndexId
I believe, the reason of slowness is Index, not _id field itself. So if your requirements warrant special needs, you can always disable auto index.
But...
you still need to supply _id field with zero (0) value.
e.g. 2 GB capped collection with auto index disabled.
I'm sure this trick will bring insertion speed back.