[fedora-arm] Fedora 20 for Raspberry Pi????

Steve Underwood steveu at coppice.org
Mon Dec 30 11:56:48 UTC 2013


On 12/30/2013 07:41 PM, Gordan Bobic wrote:
> On 12/30/2013 10:08 AM, Steve Underwood wrote:
>> On 12/28/2013 12:27 AM, Gordan Bobic wrote:
>>> On 12/27/2013 04:02 PM, Richard W.M. Jones wrote:
>>>> On Fri, Dec 27, 2013 at 09:53:54AM +0000, Gordan Bobic wrote:
>>>>> How is transparent alignment fixup going to give you back the
>>>>> performance you lose from accesses straddling cache lines?
>>>>
>>>> You can have structs straddling cache lines and causing performance
>>>> problems without alignment issues, or structs being packed too close
>>>> together causing false sharing again w/o alignment being involved.
>>>>
>>>> If alignment problems cause performance issues, then we should deal
>>>> with those performance problems.  If they don't, we shouldn't worry
>>>> about them.
>>>>
>>>> Rich.
>>>>
>>>> ObHack: I once worked with an architecture [68k-based VME hardware]
>>>> that not only faulted on unaligned access, but also on accesses of the
>>>> wrong *size* (eg. using a short-sized read instruction instead of a
>>>> word-sized read instruction).  Dealing with that nonsense involved a
>>>> lot of compiler-specific massaging of code and some inline assembly 
>>>> ...
>>>
>>> I'm very glad you mentioned compilers - this is in fact easily fixable
>>> at compiler level. Intel's ICC has an option to make all arrays and
>>> structs always aligned to a boundary (up to 16 byte, IIRC). If GCC
>>> were to implement such a feature the problem could be made to go away
>>> without actually addressing the underlying cause of the problem. It
>>> might be a bodge, but since complete fix of the underlying problem
>>> isn't going to happen anyway, a good bodge would be a lot better than
>>> doing nothing.
>>>
>>> Gordan
>>>
>> How does this in any way related to the alignment problem? All C
>> compilers align arrays and structures in sensible ways by default. They
>> have to. Its a requirement of the C language. Problems come from things
>> like pointing directly at elements in  communication structures, which
>> may not be naturally aligned. They can also come from overriding the
>> default alignment of arrays and structures, which most compilers permit
>> these days, with a varierty of constructs like "#pragma pack(1)"
>
> It's related because char[] is byte aligned rather than word-aligned. 
> In some cases (e.g. e2fsprogs) a buffer is declared as char[4096], 
> which means that when it's cast into a struct, struct elements won't 
> be suitably aligned. If the compiler were to align all arrays to a 
> 16-byte boundary, this wouldn't be an issue.
>
> I accept that in some cases, having arrays and structures unaligned 
> may be useful (e.g. wire protocol packet parsing), but in most cases 
> it seems to be just lazy or uninformed programming. In those cases the 
> compiler aligning everything to a 16-byte boundary would help.
>
> Gordan
>
Do you know a compiler for anything that isn't really tiny (like an 8 
bit MCU) which doesn't align character arrays to start at a multiple of 
something meaningful (e.g. 4, 8, or 16)? It helps a lot with character 
0, but it doesn't help a whole lot with character 1.

I think its actually quite rare to find a misalignment problem that 
isn't related to working with multi-byte values in a buffer which is an 
image of something external, like a comms buffer or an image of 
something from disk.

Regards,
Steve



More information about the arm mailing list