From owner-freebsd-current Mon Mar 6 23:21:43 1995 Return-Path: current-owner Received: (from majordom@localhost) by freefall.cdrom.com (8.6.10/8.6.6) id XAA07567 for current-outgoing; Mon, 6 Mar 1995 23:21:43 -0800 Received: from ref.tfs.com (ref.tfs.com [140.145.254.251]) by freefall.cdrom.com (8.6.10/8.6.6) with ESMTP id XAA07561 for ; Mon, 6 Mar 1995 23:21:42 -0800 Received: (from phk@localhost) by ref.tfs.com (8.6.8/8.6.6) id XAA24911 for current@freebsd.org; Mon, 6 Mar 1995 23:21:21 -0800 From: Poul-Henning Kamp Message-Id: <199503070721.XAA24911@ref.tfs.com> Subject: the chatterbug categorized To: current@FreeBSD.org Date: Mon, 6 Mar 1995 22:21:44 -0800 (PST) Content-Type: text Content-Length: 1763 Sender: current-owner@FreeBSD.org Precedence: bulk I belive that David and I have understood the chatterbug, now we just need to find it and fix it. What happens is that some vnodes are not properly freed when the vm_object is freed, this has two effects: one is that the list of free vnodes are too short to make the name-cache efficient (the chatter) and the other is that the system will continue to allocate more vnodes, (the gradual loss of available memory) Now to isolate it, we need to know when it happens, I can reproduce it here with: cd /usr/src/release make release CHROOTDIR=<500Mb space> but it takes long time. If any of you have any idea about any specific action or program that makes this happen, we'd like to know. Here is a small piece of C-source, compile it with -lkvm and run as root. It will print a line like desired 1874 vnodes, have 5594 vnodes If you find a way to get the "have" number to increase consistenly above the "desired" number, please tell us. Thanks for your time, Poul-Henning #include #include #include #include #include struct nlist namelist[] = { { "_numvnodes" }, { "_desiredvnodes" }, { NULL } }; kvm_t *kv; main() { int i; u_long l1; kv = kvm_open(NULL,NULL,NULL,O_RDWR,"dnc"); if (!kv) {perror("kvm_open"); exit(1); } i = kvm_nlist(kv,namelist); if (i) {perror("kvm_nlist"); exit(1); } kvm_read(kv,namelist[1].n_value,&l1,sizeof l1); printf("desired %u vnodes, ",l1); kvm_read(kv,namelist[0].n_value,&l1,sizeof l1); printf("have %u vnodes\n",l1); return 0; } -- Poul-Henning Kamp TRW Financial Systems, Inc. I am Pentium Of Borg. Division is Futile. You WILL be approximated.