Re: kqueue - Mailing list pgsql-hackers
From | Heikki Linnakangas |
---|---|
Subject | Re: kqueue |
Date | |
Msg-id | ee3d6589-5d5a-1c70-0833-caf0ede15ec0@iki.fi Whole thread Raw |
In response to | Re: kqueue (Thomas Munro <thomas.munro@enterprisedb.com>) |
Responses |
Re: kqueue
Re: kqueue Re: kqueue |
List | pgsql-hackers |
So, if I've understood correctly, the purpose of this patch is to improve performance on a multi-CPU system, which has the kqueue() function. Most notably, FreeBSD? I launched a FreeBSD 10.3 instance on Amazon EC2 (ami-e0682b80), on a m4.10xlarge instance. That's a 40 core system, biggest available, I believe. I built PostgreSQL master on it, and ran pgbench to benchmark: pgbench -i -s 200 postgres pgbench -M prepared -j 36 -c 36 -S postgres -T20 -P1 I set shared_buffers to 10 GB, so that the whole database fits in cache. I tested that with and without kqueue-v5.patch Result: I don't see any difference in performance. pgbench reports between 80,000 and 97,000 TPS, with or without the patch: [ec2-user@ip-172-31-17-174 ~/postgresql]$ ~/pgsql-install/bin/pgbench -M prepared -j 36 -c 36 -S postgres -T20 -P1 starting vacuum...end. progress: 1.0 s, 94537.1 tps, lat 0.368 ms stddev 0.145 progress: 2.0 s, 96745.9 tps, lat 0.368 ms stddev 0.143 progress: 3.0 s, 93870.1 tps, lat 0.380 ms stddev 0.146 progress: 4.0 s, 89482.9 tps, lat 0.399 ms stddev 0.146 progress: 5.0 s, 87815.0 tps, lat 0.406 ms stddev 0.148 progress: 6.0 s, 86415.5 tps, lat 0.413 ms stddev 0.145 progress: 7.0 s, 86011.0 tps, lat 0.415 ms stddev 0.147 progress: 8.0 s, 84923.0 tps, lat 0.420 ms stddev 0.147 progress: 9.0 s, 84596.6 tps, lat 0.422 ms stddev 0.146 progress: 10.0 s, 84537.7 tps, lat 0.422 ms stddev 0.146 progress: 11.0 s, 83910.5 tps, lat 0.425 ms stddev 0.150 progress: 12.0 s, 83738.2 tps, lat 0.426 ms stddev 0.150 progress: 13.0 s, 83837.5 tps, lat 0.426 ms stddev 0.147 progress: 14.0 s, 83578.4 tps, lat 0.427 ms stddev 0.147 progress: 15.0 s, 83609.5 tps, lat 0.427 ms stddev 0.148 progress: 16.0 s, 83423.5 tps, lat 0.428 ms stddev 0.151 progress: 17.0 s, 83318.2 tps, lat 0.428 ms stddev 0.149 progress: 18.0 s, 82992.7 tps, lat 0.430 ms stddev 0.149 progress: 19.0 s, 83155.9 tps, lat 0.429 ms stddev 0.151 progress: 20.0 s, 83209.0 tps, lat 0.429 ms stddev 0.152 transaction type: <builtin: select only> scaling factor: 200 query mode: prepared number of clients: 36 number of threads: 36 duration: 20 s number of transactions actually processed: 1723759 latency average = 0.413 ms latency stddev = 0.149 ms tps = 86124.484867 (including connections establishing) tps = 86208.458034 (excluding connections establishing) Is this test setup reasonable? I know very little about FreeBSD, I'm afraid, so I don't know how to profile or test that further than that. If there's no measurable difference in performance, between kqueue() and poll(), I think we should forget about this. If there's a FreeBSD hacker out there that can demonstrate better results, I'm all for committing this, but I'm reluctant to add code if no-one can show the benefit. - Heikki
pgsql-hackers by date: