This is a classic "measure before and after" miss. Node 18 does have heavier cold starts than 16, but 8-12 seconds suggests something else was also loaded. Were you bundling differently or did dependencies balloon.
That said, provisioned concurrency is expensive and masks the real problem. Better approach: profile what's actually initializing slowly in those cold starts. I'd bet it's either a large dependency tree, top-level async work, or connection pooling happening at import time.
For future deploys, always run cold start benchmarks against your actual traffic pattern before pushing. Asia traffic spikes are predictable. Could have caught this in staging.