Linux: Align fragment size
Linux: Align fragment size

On a 32 bit system, the size header is only 4 bytes; so if we fully use
the rest of the available buffer for payload data, the size of the
latter won't be a multiple of 8 bytes -- and consequently, every second
fragment is read from the source data buffer with poor alignment.

Fixing this by always aligning the payload data size sent per fragment
to 8 byte boundaries.

(On 64 bit systems, this is a no-op. According to my testing, aligning
to more than 8 byte boundaries doesn't benefit either 32 or 64 bit
systems.)

On my 32 bit x86 system, this produces quite a sizeable performance
improvement for large transfers: peaking at 20% or so around 640 KiB,
and staying above 10% for most of the range from 320 KiB to 2 MiB.

test size_00_1    ... bench:       2,250 ns/iter (+/- 42)
test size_01_2    ... bench:       2,279 ns/iter (+/- 46)
test size_02_4    ... bench:       2,335 ns/iter (+/- 53)
test size_03_8    ... bench:       2,351 ns/iter (+/- 67)
test size_04_16   ... bench:       2,357 ns/iter (+/- 46)
test size_05_32   ... bench:       2,327 ns/iter (+/- 64)
test size_06_64   ... bench:       2,308 ns/iter (+/- 39)
test size_07_128  ... bench:       2,277 ns/iter (+/- 43)
test size_08_256  ... bench:       2,453 ns/iter (+/- 35)
test size_09_512  ... bench:       2,402 ns/iter (+/- 57)
test size_10_1k   ... bench:       2,576 ns/iter (+/- 81)
test size_11_2k   ... bench:       3,883 ns/iter (+/- 66)
test size_12_4k   ... bench:       5,492 ns/iter (+/- 75)
test size_13_8k   ... bench:       9,368 ns/iter (+/- 83)
test size_14_16k  ... bench:       8,857 ns/iter (+/- 107)
test size_15_32k  ... bench:      14,132 ns/iter (+/- 140)
test size_16_64k  ... bench:      22,049 ns/iter (+/- 298)
test size_17_128k ... bench:      43,577 ns/iter (+/- 1,947)
test size_18_256k ... bench:     203,597 ns/iter (+/- 34,495)
test size_19_512k ... bench:     407,050 ns/iter (+/- 246,606)
test size_20_1m   ... bench:   1,334,506 ns/iter (+/- 186,923)
test size_21_2m   ... bench:   1,630,275 ns/iter (+/- 481,481)
test size_22_4m   ... bench:   4,826,184 ns/iter (+/- 980,708)
test size_23_8m   ... bench:   9,390,020 ns/iter (+/- 1,655,050)

test size_00_1    ... bench:     223,092 ns/iter (+/- 3,807)
test size_01_2    ... bench:     223,918 ns/iter (+/- 3,535)
test size_02_4    ... bench:     223,102 ns/iter (+/- 4,907)
test size_03_8    ... bench:     230,394 ns/iter (+/- 4,700)
test size_04_16   ... bench:     224,395 ns/iter (+/- 4,482)
test size_05_32   ... bench:     231,436 ns/iter (+/- 4,214)
test size_06_64   ... bench:     225,216 ns/iter (+/- 3,584)
test size_07_128  ... bench:     228,905 ns/iter (+/- 4,260)
test size_08_256  ... bench:     233,108 ns/iter (+/- 2,998)
test size_09_512  ... bench:     236,013 ns/iter (+/- 4,803)
test size_10_1k   ... bench:     248,637 ns/iter (+/- 5,386)
test size_11_2k   ... bench:     383,750 ns/iter (+/- 6,134)
test size_12_4k   ... bench:     542,666 ns/iter (+/- 9,026)
test size_13_8k   ... bench:     934,623 ns/iter (+/- 9,200)
test size_14_16k  ... bench:     894,028 ns/iter (+/- 7,425)
test size_15_32k  ... bench:   1,350,185 ns/iter (+/- 6,316)
test size_16_64k  ... bench:   2,213,693 ns/iter (+/- 24,549)
test size_17_128k ... bench:   4,348,762 ns/iter (+/- 90,784)
test size_18_256k ... bench:   7,825,637 ns/iter (+/- 2,243,873)
test size_19_512k ... bench:  17,792,873 ns/iter (+/- 3,775,904)
test size_20_1m   ... bench:  99,769,568 ns/iter (+/- 8,760,588)
test size_21_2m   ... bench: 126,575,377 ns/iter (+/- 12,528,236)
test size_22_4m   ... bench: 440,368,689 ns/iter (+/- 16,627,208)
test size_23_8m   ... bench: 859,509,896 ns/iter (+/- 21,848,024)

servo/ipc-channel