16:52:20 Just saw this and wanted to share: https://mastodon.social/@bcantrill/111840269356297809 18:19:49 Hi, all. Does anyone know where in the source I can look for the NFS client? I'm specifically looking for where it sets up its TCP socket. I'm looking for how the client sets its TCP keepalives. Can anyone point me in the right direction? Many thanks. 18:28:41 [illumos-gate] 16035 ::msgbuf help missing whitespace -- Jason King 18:34:41 A bunch of nfs is in uts/common/fs/nfs and then cmd/fs.d/nfs which has a bit for the libraries, and related. I've not looked at that off hand so I can't speak to where the bit you're looking for is. 18:44:31 For NFS service it's rather complex thanks to very old design decisions. NFS server starts in kernel using TLI/XTI endpoints. $UTS/comnon/fs/nfs/nfs_server.c has this: 18:44:35 /* Create a transport handle. */ 18:44:35 error = svc_tli_kcreate(fp, readsize, buf, &addrmask, &xprt, 18:44:35 sctp, NULL, NFS_SVCPOOL_ID, TRUE); 18:44:55 which deep down should open a TLI endpoint and bind port 2049 to it. 19:12:54 danmcd: question was about the client side. ajk203: look for the "clnt" equivalents of the "svc" things Dan mentioned. start looking around usr/src/uts/common/rpc/clnt_*.c 19:13:45 connmgr_connect() in clnt_cots.c looks relevant.. 19:25:12 so who wants to update the nfs code to use ksocket? :) 19:25:22 (as I take a step or two back) 19:26:26 "not poo" ? 19:26:42 :-) 19:27:13 (unfortunate subject line truncation, no doubt) 19:32:30 jbk: my understanding is that the issue for #16163 isn't the in-flight I/O's but rather a large worklist of block pointers read from metadata blocks. 19:34:02 (the sorted scrub idea is that you scan metadata blocks and accumulate a sorted list of block pointers, and then process them in LBA-ish order to sequentialize scrub I/O) 19:34:11 but I've got to run now.. 20:01:38 oh heh.. when I copied it, it left off the l 20:01:47 as i see it highlighted in the window 20:02:43 do you know from the dumps if the memory is that and not zio_ts? 20:03:11 we've seen the scrub prefetcher basically goes full throttle as it goes through the metadata 20:03:45 so it can generate these absolutely massive bursts of largely prefetch I/Os 20:05:17 it didn't help that the specific model drives from the vendor (whom shall remain nameless) seemed to come down with random bouts of what I dubbed 'tortoise nervosa' 20:05:28 but with no actual errors 20:05:34 in any log pages or anything 20:05:39 just get slow for a bit, then fine 20:06:26 (they also had the fun side effect that right as it would get near finishing resilvering the pool, another disk would fail, triggering more resilvering) 20:07:58 that would exaggerate the bias in how the zios were distributed 20:09:09 there is an openzfs change that will switch the zio scheduler into LIFO mode if the queue depth gets too large (or too old), but that seemed more extensive 21:52:47 @danmcd. thanks. @sommerfeld thanks I'll take a look at the clnt code. many thanks. 22:06:07 jbk: sorry, was off running errands. 22:08:24 see the "Grand Theory Statement" in dsl_scan.c; BP's found in metadata get recorded as a scan_io_t which is " the minimum information needed to reconstruct a 22:08:24 * zio for sequential scanning." 22:09:52 yeah, i was just wondering if those dumps where the actual space being used was -- in the issue we had, we'd routinely see > 100gb of zio_ts queued in the pool, and pretty much all of it was was prefetching 22:10:52 we only saw it with one customer (but it was a $@#$@#$ to root cause for various reasons) and it seems like something that needs a large pool and lots of ram 22:12:14 and probably helped by disk performance dropping for unexplained reasons for stretches at a time during the resilver 22:14:53 i've mentioned it before, but we've seen the same conceptual problem with other bits in zfs (basically generating load w/o any backpressure or throttle and hoping the system can handle it) 22:14:57 e.g. zfs diff 23:01:15 jbk: I didn't look into where the memory was going in those dumps. 23:04:45 taking a look now 23:24:17 ~900MB in the sio_cache_* caches which is where the sorted block pointers go (this is a 24G machine).