In execute_populate, wtperf computes the total number of items to populate as:
max_key = (uint64_t)opts->icount + (uint64_t)opts->scan_icount;
So max_key is the total number of items that will be inserted during the populate phase. The populate for-loop in that function keeps populating until the item count reaches max_key.
However, when reporting the progress during the populate phase, wtperf prints, something like:
X populate inserts (Y of Z) in K secs (M total secs).
Z should be equal to max_key, but in fact Z is printed as opts->icount by this code line:
lprintf(wtperf, 0, 1, "%" PRIu64 " populate inserts (%" PRIu64 " of %" PRIu32 ") in %" PRIu32 " secs (%" PRIu32 " total secs)", wtperf->insert_ops - last_ops, wtperf->insert_ops, opts->icount, opts->report_interval, wtperf->totalsec);
As a result, for workloads where scan_icount is not equal to zero, wtperf prints
X populate inserts (Y of Z) in K secs (M total secs).
with Y > Z, which is confusing.