Sun, Jan 29, 2012 at 21:34:56, ml wrote about "Re: [freebsd] exfat/freebsd": 

> >> (http://www.freebsd.org/cgi/query-pr.cgi?pr=164473). Вроде бы как все
> > #define DEVBSIZE 512 // better get from the device
> > - а если принесут внешний диск с 4k sectors? ;-)
> > Я, правда, таких пока не видел (где настоящие 4k, а не 4k=>512translation)

4K SATA ещё нет, а вот с честными 2K на SCSI я видел dmesg в дискуссии вокруг
новых размеров.

> > но, наверное, все же они где-то есть?
> То скорее всего все будет работать, т.к. оно кратно 512.

Не будет, кратность тут ни при чём. Если спецификация требует обращения
с блоками согласно тому, что диск рапортовал про размер логического
блока у себя, то обращение с ним как с 512-байтным даст гадость,
например, при подходах типа "первый блок пропускается". А это сплошь и
рядом, начиная с GPT.

В свежих фряхах этот размер надо узнавать через ioctl DIOCGSECTORSIZE
из <sys/disk.h> и только при отказе этого опознавания падать в fallback
512. Кроме того DIOCGSTRIPESIZE говорит про оптимальный размер обмена
(если напрямую диск с 4KB блоками, то и будет 4096, а на RAID может быть
и 1MB).

> И да, таких 
> почти нет, из соображений совместимости размер блока обозначается как 
> 512, насколько я помню

Через пару лет уже будут.

> Но что касается данного определения - то это ugly dirty hack, о чем и 
> написано в комментариях. У  меня есть ветка в гите где это поправлено + 
> добавлена поддержка ublio для лучшей производительности, но я  бы хотел 
> дождаться ответа от автора по поводу non aligned pwrites.

Что поправлено - хорошо, а что меняет pwrite не на границу - не думаю,
что фатально, если не O_DIRECT.


-netch-

Ответить