From owner-freebsd-hackers@FreeBSD.ORG Thu Mar 6 14:18:22 2008 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AB03A1065677 for ; Thu, 6 Mar 2008 14:18:22 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from elvis.mu.org (elvis.mu.org [192.203.228.196]) by mx1.freebsd.org (Postfix) with ESMTP id 994228FC2B for ; Thu, 6 Mar 2008 14:18:22 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from zion.baldwin.cx (66-23-211-162.clients.speedfactory.net [66.23.211.162]) by elvis.mu.org (Postfix) with ESMTP id EE1CD1A4D7C; Thu, 6 Mar 2008 06:17:56 -0800 (PST) From: John Baldwin To: Andriy Gapon Date: Thu, 6 Mar 2008 09:17:50 -0500 User-Agent: KMail/1.9.7 References: <47B9A359.9080502@icyb.net.ua> <200803060755.04607.jhb@freebsd.org> <47CFF43A.9070704@icyb.net.ua> In-Reply-To: <47CFF43A.9070704@icyb.net.ua> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200803060917.50328.jhb@freebsd.org> Cc: freebsd-hackers@freebsd.org Subject: Re: sched_ule: roundrobin_callout replacement ? X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 Mar 2008 14:18:22 -0000 On Thursday 06 March 2008 08:40:10 am Andriy Gapon wrote: > on 06/03/2008 14:55 John Baldwin said the following: > > On Monday 18 February 2008 10:25:13 am Andriy Gapon wrote: > >> I see that sched_4bsd has a NOP callout with a purpose of forcing a > >> context switch (via softclock), so that something like a preemption > >> could happen (e.g. for threads in a tight calculation loop). > >> What serves the similar purpose for sched_ule? > >> Or, how sched_ule deals with the issue without needing softclock's help? > > > > It's gone in newer versions of 4BSD in HEAD actually. ULE does it by > > checking in sched_clock() to see if the current thread has used up its > > quantum. If so it sets TDF_NEEDRESCHED. > > Thank you. But where/when does actual thread switch happens? > E.g. I have two userland processes that do something like "while(1);", > what is the event that can switch from one to the other? TDF_NEEDRESCHED is checked on return to userland from interrupts, traps, and system calls. The clock interrupt that sets TDF_NEEDRESCHED will check for it on the way back to userland and invoke ast() (sys/kern/subr_trap.c) which will end up forcing a context switch. -- John Baldwin