Re: [tip:x86/asm] x86/i386: Make sure stack-protector segment base is cache aligned

Tejun Heo
2009-09-04T03:00:33Z

Tejun Heo wrote:
> Hello,
>
> H. Peter Anvin wrote:
>> On 09/03/2009 01:45 PM, Jeremy Fitzhardinge wrote:
>>> Two problems:
>>>
>>> * gcc generates %gs: references for stack-protector, but we use %fs
>>> for percpu data (because restoring %fs is faster if it's a null
>>> selector; TLS uses %gs). I guess we could use %fs if
>>> !CONFIG_CC_STACKPROTECTOR, or %gs if we are using it (though that
>>> has some fiddly ramifications for things like ptrace).
>> Well, by touching two segments we're getting the worst of both worlds,
>> so at least assuming some significant number of real-world deployments
>> use CC_STACKPROTECTOR, we really don't want to pessimize that case too much.
>
> Yes, this one definitely seems doable. BTW, how much performance does
> CC_STACKPROTECTOR cost? That's an ambiguous question but really any
> number would help to develop a general sense. Considering fedora is
> doing it by default, I assume it isn't too high?

Another question. Other than saving and loading an extra segment
register on kernel entry/exit, whether using the same or different
segment registers doesn't look like would make difference
performance-wise. If I'm interpreting the wording in the optimization
manual correctly, it means that each non-zero segment based memory
access will be costly regardless of which specific segment register is
in use and there's no way we can merge segment based dereferences for
stackprotector and percpu variables.

Thanks.

--
tejun