From owner-freebsd-bugs@FreeBSD.ORG Thu Mar 24 17:20:03 2005 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 81CD316A4CE for ; Thu, 24 Mar 2005 17:20:03 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 4ADD443D5A for ; Thu, 24 Mar 2005 17:20:03 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.3/8.13.3) with ESMTP id j2OHK28R024708 for ; Thu, 24 Mar 2005 17:20:02 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.3/8.13.1/Submit) id j2OHK2ad024690; Thu, 24 Mar 2005 17:20:02 GMT (envelope-from gnats) Resent-Date: Thu, 24 Mar 2005 17:20:02 GMT Resent-Message-Id: <200503241720.j2OHK2ad024690@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Marc Olzheim Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 6934A16A4CE for ; Thu, 24 Mar 2005 17:16:27 +0000 (GMT) Received: from rave.ilse.net (pip0-6.ilse.nl [62.69.162.176]) by mx1.FreeBSD.org (Postfix) with ESMTP id 0A7AF43D4C for ; Thu, 24 Mar 2005 17:16:26 +0000 (GMT) (envelope-from marcolz@rave.ilse.net) Received: from rave.ilse.net (localhost.ilse.nl [127.0.0.1]) by rave.ilse.net (8.13.3/8.13.1) with ESMTP id j2OHGMkJ086632; Thu, 24 Mar 2005 18:16:22 +0100 (CET) (envelope-from marcolz@rave.ilse.net) Received: (from marcolz@localhost) by rave.ilse.net (8.13.3/8.13.1/Submit) id j2OHGMrc086629; Thu, 24 Mar 2005 18:16:22 +0100 (CET) (envelope-from marcolz) Message-Id: <200503241716.j2OHGMrc086629@rave.ilse.net> Date: Thu, 24 Mar 2005 18:16:22 +0100 (CET) From: Marc Olzheim To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 cc: Sven Berkvens Subject: kern/79208: Deadlock or starvation doing heavy NFS writes with writev X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Marc Olzheim List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Mar 2005 17:20:03 -0000 >Number: 79208 >Category: kern >Synopsis: Deadlock or starvation doing heavy NFS writes with writev >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Mar 24 17:20:02 GMT 2005 >Closed-Date: >Last-Modified: >Originator: Marc Olzheim >Release: FreeBSD 5.4-PRERELEASE i386 >Organization: ilse mediz >Environment: System: FreeBSD techno.ilse.net 5.4-PRERELEASE FreeBSD 5.4-PRERELEASE #3: Wed Mar 23 16:18:45 CET 2005 root@rave.ilse.net:/usr/obj/usr/src/sys/SE3DEBUG i386 grep nfs /etc/rc.conf: nfs_client_enable="YES" nfs_reserved_port_only="YES" nfs_server_enable="YES" Boot message is at http://www.stack.nl/~marcolz/FreeBSD/techno.bootlog.txt >Description: Doing 60 MB of writev() over NFS, results in exactly 58638336 bytes (57264K) ariving at the NFS server, _during_ which the machine becomes unresponsive to almost everything but pings... The resposiveness stops before 10 MB are written, maybe even as soon as the writev() starts. Running an "rtprio 0 cat" on console gives me a cat that responds to ^T (stty status ^T) with: load: 0.72 cmd: cat 673 [flswai] 0.00u 0.00s 0% 652k load: 8.87 cmd: cat 673 [flswai] 0.00u 0.29s 0% 652k and that still consumes input, but doesn't output anything anymore. >How-To-Repeat: writev 60 foo on an NFS mounted filesystem. Source: ---------------------------------------------------------------------- /* Copyright (C) 2005 by ilse technology - Marc Olzheim */ #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { int fd, i, iovcnt; struct iovec *iov; char buffer[1048576]; ssize_t written; if (3 != argc) { fprintf(stderr, "Usage: %s \n", argv[0]); return(1); } if (-1 == (fd = open(argv[2], O_WRONLY | O_TRUNC | O_CREAT, S_IWUSR | S_IRUSR))) perror("open()"); iovcnt = atoi(argv[1]); iov = malloc(iovcnt * sizeof(struct iovec)); if (!iov) perror("malloc()"); for (i = 0; i < iovcnt; i++) { iov[i].iov_base = buffer; iov[i].iov_len = sizeof(buffer); } bzero(buffer, sizeof(buffer)); written = writev(fd, iov, iovcnt); if (written == (ssize_t)-1) err(1, "writev()"); if (written != (ssize_t)(iovcnt * sizeof(buffer))) err(1, "Short write (%ld of %lu)", (long)written, (unsigned long)(iovcnt * sizeof(buffer))); if (close(fd)) perror("close()"); return(0); } ---------------------------------------------------------------------- >Fix: >Release-Note: >Audit-Trail: >Unformatted: