Le ven. 6 oct. 2023, 19:13, ValdikSS via Grub-devel <grub-devel@gnu.org> a écrit :
> 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. > These are 2 independent changes and need to be discussed separately. E.g. it has an unintentional effect of doubling the cache size. I wonder if this alone might explain your speed-up. Yet this might be bad for low RAM scenarios including the cases like sparc64 where only few MiBs of RAM are available to us independently of total RAM size > 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 and OSDev, 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 the limit, but it was no-op due to other > constraints. This value is also used in syslinux. > > 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). > > See: > https://en.wikipedia.org/wiki/INT_13H#INT_13h_AH=42h:_Extended_Read_Sectors_From_Drive > See: > https://wiki.osdev.org/Disk_access_using_the_BIOS_(INT_13h)#LBA_in_Extended_Mode > See: > https://github.com/rhboot/grub2/blob/10f8ffc133553209ec1ddaadc6f4a8a25d3dea4e/grub-core/disk/i386/pc/biosdisk.c#L434 > See: > https://github.com/geneC/syslinux/blob/5e426532210bb830d2d7426eb8d8c154d9dfcba6/core/fs/diskio_bios.c#L349 > > Signed-off-by: ValdikSS <i...@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 be032a72c..608deb034 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.41.0 > > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel >
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel