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 --
| Thomas Gleixner | Re: Linux 2.6.23-rc9 and a heads-up for the 2.6.24 series.. |
| Karl Meyer | PROBLEM: 2.6.23-rc "NETDEV WATCHDOG: eth0: transmit timed out" |
| Mark Weber | hdparm standby timeout not working for WD raptors? |
| Robin Lee Powell | NFS hang + umount -f: better behaviour requested. |
git: | |
| Adam Roben | Equivalent of `svn switch` for git-svn? |
| Linus Torvalds | Re: On Tabs and Spaces |
| Adam Mercer | git cvsimport error |
| Sam Song | Fwd: [OT] Re: Git via a proxy server? |
| Antti Harri | Re: wine question |
| Paul Pruett | anyone using zoneminder.com on OpenBSD? |
| Josh | Re: removing sendmail |
| Sevan / Venture37 | wpi(4) not working in -CURRENT |
| Bill Day | telnet: Unable to connect to remote host: Network is unreachable |
| Dong Liu | Re: CXterm for LINUX |
| Framstag | ftp-error: bind: Address already in use? |
| Theodore Ts'o | RESULT: comp.os.linux passes: 858: 5 |
| SMDK2410 LCD Framebuffer driver | 5 hours ago | Linux kernel |
| Resetting the bios password for Toshiba Laptop | 5 hours ago | Hardware |
| Problem booting a barebone kernel in VMWare | 8 hours ago | Linux kernel |
| IP layer send packet | 12 hours ago | Linux kernel |
| PID to ELF image full path | 15 hours ago | Linux kernel |
| types of kernel | 1 day ago | Linux kernel |
| magical mounts | 2 days ago | Linux kernel |
| Problem in scim in Fedora 9 | 2 days ago | Linux general |
| The new Western Digital power saving drives | 2 days ago | Hardware |
| Battery Maximizer Software | 3 days ago | Linux kernel |
