Date: Tue, 18 Feb 2003 19:01:14 -0800 From: "Mooneer Salem" <mooneer@translator.cx> To: "FreeBSD Hackers" <freebsd-hackers@freebsd.org> Subject: RE: Per-jail CPU limits? Message-ID: <FHEMJMOKKMJDGKFOHHEPMEEBFAAA.mooneer@translator.cx> In-Reply-To: <FHEMJMOKKMJDGKFOHHEPKEDKFAAA.mooneer@translator.cx>
next in thread | previous in thread | raw e-mail | index | archive | help
Hello, An update: * I changed a block of code in kse_reassign() to the following: if ((td = kg->kg_last_assigned)) { do { td = TAILQ_NEXT(td, td_runq); } while (td && jail_check_cpu(td)); } else { td = TAILQ_FIRST(&kg->kg_runq); } * jail_check_cpu() has been placed in kern_jail.c and looks like the following: int jail_check_cpu(td) struct thread *td; { struct prison *pr = td->td_ucred->cr_prison; u_int totalcpu = td->td_ksegrp->kg_estcpu; if (!pr) { /* Not in jail; don't care about its CPU. */ return 0; } printf("cpu debug: %d\n", totalcpu); /* By default, return 0. */ return 0; } jail_check_cpu() is a passthrough function that accepts by default and is supposed to print the total CPU used to the console. After recompiling the kernel and rebooting, I tried to start a jail. Unfortunately, I didn't see the message that should have been printed. I believe kse_reassign() might only be called under certain circumstances (e.g. when SMP is involved). If that's the case, another function will need to be found to insert the code in. Thanks, -- Mooneer Salem GPLTrans: http://www.translator.cx/ lifeafterking.org: http://www.lifeafterking.org/ -----Original Message----- From: owner-freebsd-hackers@FreeBSD.ORG [mailto:owner-freebsd-hackers@FreeBSD.ORG]On Behalf Of Mooneer Salem Sent: Tuesday, February 18, 2003 5:07 PM To: FreeBSD Hackers Subject: Per-jail CPU limits? Hello, I've been looking at the kernel source, in particular the scheduler in the past few weeks. I found a place in kern_switch.c where per-jail CPU controls could be added (in particular, in the kse_reassign() function). >From looking at that function, I could loop through td_runq until I either: 1. Found a thread that isn't jailed, 2. Found a jailed thread, but determine it's safe to let it run because it does not go over sysctl-defined limits, or 3. Find no usable thread, in which case the KSE would theoretically switch over to the idle process until it's time to repeat the process again. This should allow the use of the standard FreeBSD scheduler, except for the jail limits. The question is, how do we determine the total CPU used by the jail? I found the kg_estcpu entry in struct ksegrp, which the thread has a pointer to, but would that be enough? Is there a different approach we could take that would solve this problem? Thanks, -- Mooneer Salem GPLTrans: http://www.translator.cx/ lifeafterking.org: http://www.lifeafterking.org/ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?FHEMJMOKKMJDGKFOHHEPMEEBFAAA.mooneer>