Why is SECTOR_SIZE = 512 inside kernel ?
Navin P
navinp1912 at gmail.com
Mon Aug 17 14:03:18 EDT 2015
On Mon, Aug 17, 2015 at 10:46 PM, <Valdis.Kletnieks at vt.edu> wrote:
> On Mon, 17 Aug 2015 16:35:59 +0530, Navin P said:
>> Hi,
>> Why is SECTOR_SIZE 512 ?
>
> Because most fixed-block devices presented a logical interface in terms
> of 512 byte sectors. (IBM's count-key-data format is an example of a non-fixed
> block device).
>
>> Is it going to change or is it cast in stone ?
>
> As you have probably figured out, high-capacity devices have often moved
> to 4K physical blocks to avoid wasting so much room between blocks (the hardware
> format includes a preamble to each block and a postamble, and dead space in
> between, it uses more space than you think).
>
> However, as long as there are still devices out there that have 512 byte
> blocks, it's not changing. And it still won't change unless there's a
> good reason to change it (hint - how many places in the kernel have hidden
> assumptions about the size of SECTOR_SIZE being 9 bits worth?)
I posted this to
http://www.mail-archive.com/linux-kernel@vger.kernel.org/msg956881.html
avoided cross posting.
Looks like this is cast in stone at kernel . I was thinking of doing
sectors written * hw_sector_size. But the sectors counters in
/proc/diskstats are actually 512 byte sections even for 4kN disks.
That way userspace programs are immune to underlying sector. Wish that
page_size was also same :)
There are lot of places like 9 bits .
http://lxr.free-electrons.com/source/block/blk-lib.c
bio->bi_iter.bi_size = req_sects << 9;
http://lxr.free-electrons.com/source/include/linux/blkdev.h
sprinkled with 9 . I'm assuming the magic number 9 here is SECTOR_SIZE. :)
The hw_sector_size must be cosmetic in that sense or just to you tell
you that "your drive really is 4kn" or "512e".
More information about the Kernelnewbies
mailing list