Linux and 4096-Byte Sector Hard Drives
Posted by mazet on Feb 14 2010 in Systeme
New hard drives uses 4k-byte sector but devices cheat on linux and say that they're using 512-byte sector as usual. If partitions are not aligned to 8 blocks, there's a huge throughput degradation. Use the 'expert' menu [x] on fdisk to move beginning of data in a partition [b] and align it to 8 blocks.
Test program:
Code
#define _LARGEFILE64_SOURCE | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <fcntl.h> | |
#include <unistd.h> | |
| |
#define N 4096 | |
char buffer[N]; | |
| |
int main(int argc, char *argv[]) | |
{ | |
int fd, i, j; | |
| |
char *file = "test.dat"; | |
int size = 2048; | |
| |
printf ("usage: %s <file> <#blocs>\n", argv[0]); | |
if (argc > 1) file = argv[1]; | |
if (argc > 2) size = atoi (argv[2]); | |
| |
fd = open(file, O_WRONLY | O_CREAT | O_TRUNC | O_SYNC); | |
printf ("open %s (fd=%d)\n", file, fd); | |
if (fd <= 0) return 1; | |
| |
printf ("write %dx%d=%d data\n", size, N, size * N); | |
for (i = 0; i < size; i++) { | |
int rand = random (); | |
for (j = 0; j < N; j++, rand = (rand << 1) ^ (rand >> sizeof (int))) | |
buffer[j] ^= rand; | |
write(fd, buffer, N); | |
} | |
| |
close(fd); | |
| |
return 0; | |
} |
This entry was posted by mazet and filed under Systeme.