Sorry for the delay.My mention of a 2-CPU special case was just an off-hand idea. I don't really have any idea if that would be optimal given the tradeoff of increaing signal_struct size. The performance needs be analyzed. I think I misled you about the use of the it_*_expires fields, sorry. The task_struct.it_*_expires fields are used solely as a cache of the head of cpu_timers[]. Despite the poor choice of the same name, the signal_struct.it_*_expires fields serve a different purpose. For an analogous cache of the soonest timer to expire, you need to add new fields. The signal_struct.it_{prof,virt}_{expires,incr} fields hold the setitimer settings for ITIMER_{PROF,VTALRM}. You can't change those in arm_timer. For a quick cache you need a new field that is the sooner of it_foo_expires or the head cpu_timers[foo] expiry time. The shared_utime_sum et al names are somewhat oblique to anyone who hasn't just been hacking on exactly this thing like you and I have. Things like thread_group_*time make more sense. There are now several places where you call both shared_utime_sum and shared_stime_sum. It looks simple because they're nicely encapsulated. But now you have two loops through all CPUs, and three loops in check_process_timers. I think what we want instead is this: struct task_cputime { cputime_t utime; cputime_t stime; unsigned long long schedtime; }; Use one in task_struct to replace the utime, stime, and sum_sched_runtime fields, and another to replace it_*_expires. Use a single inline function thread_group_cputime() that fills a sum struct task_cputime using a single loop. For the places only one or two of the sums is actually used, the compiler should optimize away the extra summing from the loop. Don't use __cacheline_aligned on this struct type itself, because most of the uses don't need that. When using alloc_percpu, you can rely on it to take care of those needs--that's what it's for. If you implement a variant that uses a flat array, you can use a wrapper struct with __cacheline_aligned for that. Thanks, Roland --
| Chuck Ebbert | Why do so many machines need "noapic"? |
| Paul Jackson | Re: cpuset-remove-sched-domain-hooks-from-cpusets |
| FUJITA Tomonori | Re: Integration of SCST in the mainstream Linux kernel |
git: | |
| Jarek Poplawski | [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
| James Morris | Re: [GIT]: Networking |
| Evgeniy Polyakov | Re: [BUG] New Kernel Bugs |
