grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 2/2] disk: increase sector size up to 127 for LBA reads


From: ValdikSS
Subject: Re: [PATCH v3 2/2] disk: increase sector size up to 127 for LBA reads
Date: Tue, 30 Jan 2024 22:34:33 +0300
User-agent: Mozilla Thunderbird

Increase the value from 63 to speed up reading process.

This commit increases two limits: the low-level int 13h reading code
and a high-level reading code with disk cache.
The disk cache imposes an overall limitation of a higher-layer reading
code. The original comment regarding 16K is incorrect, it was
512<<6 = 32768, and now it is 512<<7 = 65536.

According to [Wikipedia][1] and [OSDev][2], the upper safe value for LBA
read using IBM/MS INT13 Extensions is 127 sectors due to the
limitations of some BIOSes.
GRUB [already enforced][3] the limit, but it was no-op due to other
constraints. This value is also used in [syslinux][4].

As we're now reading up to 127 sectors of 512 bytes, we need to be able
to store in the cache up to 65024 bytes. Without this change, GRUB
wouldn't try to read more than 64 sectors at once
(even if the lower reading layer allows it).

[1]: https://en.wikipedia.org/wiki/INT_13H#INT_13h_AH=42h:_Extended_Read_Sectors_From_Drive [2]: https://wiki.osdev.org/Disk_access_using_the_BIOS_(INT_13h)#LBA_in_Extended_Mode [3]: https://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/disk/i386/pc/biosdisk.c?h=grub-2.12-rc1#n430 [4]: https://repo.or.cz/syslinux.git/blob/refs/tags/syslinux-6.03:/core/fs/diskio_bios.c#l349

Signed-off-by: ValdikSS <iam@valdikss.org.ru>
---
 include/grub/disk.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/include/grub/disk.h b/include/grub/disk.h
index fbf23df7f..8bf6c1346 100644
--- a/include/grub/disk.h
+++ b/include/grub/disk.h
@@ -184,14 +184,14 @@ typedef struct grub_disk_memberlist *grub_disk_memberlist_t;
 #define GRUB_MDRAID_MAX_DISKS  4096

 /* The size of a disk cache in 512B units. Must be at least as big as the
-   largest supported sector size, currently 16K.  */
-#define GRUB_DISK_CACHE_BITS   6
+   largest supported sector size, currently 64K.  */
+#define GRUB_DISK_CACHE_BITS   7
 #define GRUB_DISK_CACHE_SIZE   (1 << GRUB_DISK_CACHE_BITS)

#define GRUB_DISK_MAX_MAX_AGGLOMERATE ((1 << (30 - GRUB_DISK_CACHE_BITS - GRUB_DISK_SECTOR_BITS)) - 1)

 /* Maximum number of sectors to read in LBA mode at once. */
-#define GRUB_DISK_MAX_LBA_SECTORS 63
+#define GRUB_DISK_MAX_LBA_SECTORS 127

/* Return value of grub_disk_native_sectors() in case disk size is unknown. */
 #define GRUB_DISK_SIZE_UNKNOWN  0xffffffffffffffffULL
--
2.43.0

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]