summaryrefslogtreecommitdiffstats
path: root/lib/libc
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2015-04-21 10:55:53 +0000
committermav <mav@FreeBSD.org>2015-04-21 10:55:53 +0000
commit1c8b5426f3f10c739d5a27e6db5e0a9f247224e8 (patch)
treed021fc0e68d8917c9df12915eb55409b54cf0c8c /lib/libc
parent5afcf58994ede12fc23de9cefbacf93de140bcf5 (diff)
downloadFreeBSD-src-1c8b5426f3f10c739d5a27e6db5e0a9f247224e8.zip
FreeBSD-src-1c8b5426f3f10c739d5a27e6db5e0a9f247224e8.tar.gz
Rewrite physio() to not allocate pbufs for unmapped I/O.
pbufs is a limited resource, and their allocator is not SMP-scalable. So instead of always allocating pbuf to immediately convert it to bio, allocate bio just here. If buffer needs kernel mapping, then pbuf is still allocated, but used only as a source of KVA and storage for a list of held pages. On 40-core system doing many 512-byte reads from user level to array of raw SSDs this change removes huge lock congestion inside pbuf allocator. It improves peak performance from ~300K to ~1.2M IOPS. On my previous 24-core system this problem also existed, but was less serious. Reviewed by: kib MFC after: 2 weeks
Diffstat (limited to 'lib/libc')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud