Peter Holm has reported that a 5-hour test of this patch revealed no problems.
I defined a sysctl to create reservations with every 17th page allocated, and then to check for the availability of 16 pages on a 16 page boundary. Ten samples without this change:
cycles/break: 2769630
cycles/break: 2586584
cycles/break: 2585703
cycles/break: 2587762
cycles/break: 2585641
cycles/break: 2587068
cycles/break: 2586093
cycles/break: 2585840
cycles/break: 2587580
cycles/break: 2586152
Ten samples after this change:
cycles/break: 86162
cycles/break: 86456
cycles/break: 85970
cycles/break: 86123
cycles/break: 85898
cycles/break: 86041
cycles/break: 85975
cycles/break: 86733
cycles/break: 85905
cycles/break: 86131
The patch that implements the sysctl is here.{F4661598}