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-
