Messages in this thread | | | From | David Laight <> | Subject | RE: [PATCH 20/22] x86,word-at-a-time: Remove .fixup usage | Date | Wed, 10 Nov 2021 12:20:47 +0000 |
| |
From: Peter Zijlstra > Sent: 10 November 2021 11:10 > > On Wed, Nov 10, 2021 at 10:46:42AM +0000, David Laight wrote: > > From: Peter Zijlstra > > > Sent: 09 November 2021 21:08 > > ... > > > > > > GCC does the same, but I wanted to have the exception stuff be in > > > .text.cold, but alas it doesn't do that. I left the attribute because of > > > it's descriptive value. > > > > > > > Unless the cold attribute is helping move > > > > ("shrink-wrap"?) the basic block to a whole other section > > > > (.text.cold.)? > > > > > > I was hoping it would do that, but it doesn't on gcc-11. > > > > Wouldn't moving part of a function to .text.cold (or .text.unlikely) > > generate the same problems with the stack backtrace code as the > > .text.fixup section you are removing had?? > > GCC can already split a function into func and func.cold today (or > worse: func, func.isra.N, func.cold, func.isra.N.cold etc..). > > I'm assuming reliable unwind and livepatch know how to deal with this.
They'll have 'proper' function labels at the top - so backtrace stands a chance. Indeed you (probably) want it to output "func.irsa.n.cold" rather than just "func" to help show which copy it is in.
I guess that livepatch will need separate patches for each version of the function - which might be 'interesting' if all the copies actually need patching at the same time. You'd certainly want a warning if there seemed to be multiple copies of the function.
I'm waiting for the side-channel attack caused by detecting timing differences caused by TLB misses when speculatively executing code in the .cold/.unlikely sections. ISTR recent x86 cpu speculate unknown conditional branches 'randomly' - rather than (say) assuming backwards taken. So you can't (easily) stop speculative execution into the 'cold' text.
I don't know if speculative execution will load TLB, it would speed a lot of code up - with the same downsides as evicting code from the L1-cache. A 'half-way house' would be to do the page table walk, but hold the read value 'pending' the code being needed.
David
- Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)
| |