comment réaliser un alignment optimal pour la partition emmc?

Nous avons une carte personnalisée basée sur bbb contenant eMMC.
Et nous avons créé des partitions comme suit,

parted --script -a minimal /dev/mmcblk0 \ mklabel gpt \ mkpart primary 131072B 262143B \ mkpart primary 262144B 393215B \ mkpart primary 393216B 524287B \ mkpart primary 524288B 1572863B \ mkpart primary 1572864B 2621439B \ mkpart primary 2621440B 3145727B \ mkpart primary 3145728B 3276799B \ mkpart primary 3276800B 8519679B \ mkpart primary 8519680B 13762559B \ mkpart primary 13762560B 19005439B \ mkpart primary 19005440B 19267583B \ mkpart primary 19267584B 19529727B \ mkpart primary 19529728B 19791871B \ mkpart primary 20MiB 31MiB \ mkpart primary ext4 32MiB 232MiB \ mkpart primary ext4 232MiB 432MiB \ mkpart primary ext4 432MiB 532MiB \ mkpart primary ext4 532MiB 592MiB \ mkpart primary ext4 592MiB 792MiB \ mkpart primary ext4 792MiB 827MiB \ mkpart primary ext4 827MiB 3650MiB \ 

Avec la command ci-dessus, nous sums en mesure de partitionner eMMC, mais l'alignment est défini sur minimal. Nous voulions vérifier comment pouvons-nous atteindre un alignment optimal? Y a-t-il un avantage à atteindre un alignment optimal? J'ai fait reference à ce lien, mais des solutions comme parted -a opt /dev/sdb mkpart primary 0% 100% ne peuvent pas être utilisées car nous avons besoin de la structure suivante.

 # parted --list Model: MMC MMC04G (sd/mmc) Disk /dev/mmcblk0: 3842MB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 131kB 262kB 131kB 2 262kB 393kB 131kB 3 393kB 524kB 131kB 4 524kB 1573kB 1049kB 5 1573kB 2621kB 1049kB 6 2621kB 3146kB 524kB 7 3146kB 3277kB 131kB 8 3277kB 8520kB 5243kB 9 8520kB 13.8MB 5243kB 10 13.8MB 19.0MB 5243kB 11 19.0MB 19.3MB 262kB 12 19.3MB 19.5MB 262kB 13 19.5MB 19.8MB 262kB 14 21.0MB 32.5MB 11.5MB 15 33.6MB 243MB 210MB ext4 16 243MB 453MB 210MB ext4 17 453MB 558MB 105MB ext4 18 558MB 621MB 62.9MB ext4 19 621MB 830MB 210MB ext4 20 830MB 867MB 36.7MB ext4 21 867MB 3827MB 2960MB ext4 

Avec la command actuelle si nous remplaçons le minimal avec optimal nous voyons les messages suivants de parted,

 Warning: The resulting partition is not properly aligned for best performance. Warning: The resulting partition is not properly aligned for best performance. Warning: The resulting partition is not properly aligned for best performance. Warning: The resulting partition is not properly aligned for best performance. Warning: The resulting partition is not properly aligned for best performance. Warning: The resulting partition is not properly aligned for best performance. Warning: The resulting partition is not properly aligned for best performance. Warning: The resulting partition is not properly aligned for best performance. Warning: The resulting partition is not properly aligned for best performance. Warning: The resulting partition is not properly aligned for best performance. Warning: The resulting partition is not properly aligned for best performance. Warning: The resulting partition is not properly aligned for best performance. 

Tous les pointeurs / suggestions / corrections pour atteindre l'alignment optimal?

comme suggéré dans ce lien, j'ai extrait les valeurs suivantes,

 # cat /sys/class/mmc_host/mmc1/mmc1\:0001/block/mmcblk0/queue/optimal_io_size 0 # cat /sys/class/mmc_host/mmc1/mmc1\:0001/block/mmcblk0/queue/minimum_io_size 512 # cat /sys/class/mmc_host/mmc1/mmc1\:0001/block/mmcblk0/alignment_offset 0 # cat /sys/class/mmc_host/mmc1/mmc1\:0001/block/mmcblk0/queue/physical_block_siz e 512 

mmc utils donne la sortie suivante,

 # ./mmc extcsd read /dev/mmcblk0 ============================================= Extended CSD rev 1.5 (MMC 4.41) ============================================= Card Supported Command sets [S_CMD_SET: 0x01] HPI Features [HPI_FEATURE: 0x03]: implementation based on CMD12 Background operations support [BKOPS_SUPPORT: 0x01] Background operations status [BKOPS_STATUS: 0x02] 1st Initialisation Time after programmed sector [INI_TIMEOUT_AP: 0x7a] Power class for 52MHz, DDR at 3.6V [PWR_CL_DDR_52_360: 0x00] Power class for 52MHz, DDR at 1.95V [PWR_CL_DDR_52_195: 0x00] Minimum Performance for 8bit at 52MHz in DDR mode: [MIN_PERF_DDR_W_8_52: 0x00] [MIN_PERF_DDR_R_8_52: 0x00] TRIM Multiplier [TRIM_MULT: 0x06] Secure Feature support [SEC_FEATURE_SUPPORT: 0x15] Secure Erase Multiplier [SEC_ERASE_MULT: 0x02] Secure TRIM Multiplier [SEC_TRIM_MULT: 0x03] Boot Information [BOOT_INFO: 0x07] Device supports alternative boot method Device supports dual data rate during boot Device supports high speed timing during boot Boot partition size [BOOT_SIZE_MULTI: 0x10] Access size [ACC_SIZE: 0x06] High-capacity erase unit size [HC_ERASE_GRP_SIZE: 0x08] ie 4096 KiB High-capacity erase timeout [ERASE_TIMEOUT_MULT: 0x01] Reliable write sector count [REL_WR_SEC_C: 0x01] High-capacity W protect group size [HC_WP_GRP_SIZE: 0x01] ie 4096 KiB Sleep current (VCC) [S_C_VCC: 0x08] Sleep current (VCCQ) [S_C_VCCQ: 0x08] Sleep/awake timeout [S_A_TIMEOUT: 0x10] Sector Count [SEC_COUNT: 0x00728000] Device is block-addressed Minimum Write Performance for 8bit: [MIN_PERF_W_8_52: 0x08] [MIN_PERF_R_8_52: 0x08] [MIN_PERF_W_8_26_4_52: 0x08] [MIN_PERF_R_8_26_4_52: 0x08] Minimum Write Performance for 4bit: [MIN_PERF_W_4_26: 0x08] [MIN_PERF_R_4_26: 0x08] Power classs registers: [PWR_CL_26_360: 0x00] [PWR_CL_52_360: 0x00] [PWR_CL_26_195: 0x00] [PWR_CL_52_195: 0x00] Partition switching timing [PARTITION_SWITCH_TIME: 0x01] Out-of-interrupt busy timing [OUT_OF_INTERRUPT_TIME: 0x02] Card Type [CARD_TYPE: 0x07] HS Dual Data Rate eMMC @52MHz 1.8V or 3VI/O HS eMMC @52MHz - at rated device voltage(s) HS eMMC @26MHz - at rated device voltage(s) CSD structure version [CSD_STRUCTURE: 0x02] Command set [CMD_SET: 0x00] Command set revision [CMD_SET_REV: 0x00] Power class [POWER_CLASS: 0x00] High-speed interface timing [HS_TIMING: 0x01] Erased memory content [ERASED_MEM_CONT: 0x00] Boot configuration bytes [PARTITION_CONFIG: 0x00] Not boot enable No access to boot partition Boot config protection [BOOT_CONFIG_PROT: 0x00] Boot bus Conditions [BOOT_BUS_CONDITIONS: 0x00] High-density erase group definition [ERASE_GROUP_DEF: 0x01] Boot write protection status registers [BOOT_WP_STATUS]: 0x00 Boot Area Write protection [BOOT_WP]: 0x00 Power ro locking: possible Permanent ro locking: possible ro lock status: not locked User area write protection register [USER_WP]: 0x00 FW configuration [FW_CONFIG]: 0x00 RPMB Size [RPMB_SIZE_MULT]: 0x01 Write reliability setting register [WR_REL_SET]: 0x00 user area: existing data is at risk if a power failure occurs during a write operation partition 1: existing data is at risk if a power failure occurs during a write operation partition 2: existing data is at risk if a power failure occurs during a write operation partition 3: existing data is at risk if a power failure occurs during a write operation partition 4: existing data is at risk if a power failure occurs during a write operation Write reliability parameter register [WR_REL_PARAM]: 0x05 Device supports writing EXT_CSD_WR_REL_SET Device supports the enhanced def. of reliable write Enable background operations handshake [BKOPS_EN]: 0x00 H/W reset function [RST_N_FUNCTION]: 0x00 HPI management [HPI_MGMT]: 0x01 Partitioning Support [PARTITIONING_SUPPORT]: 0x03 Device support partitioning feature Device can have enhanced tech. Max Enhanced Area Size [MAX_ENH_SIZE_MULT]: 0x0001ca ie 1875968 KiB Partitions atsortingbute [PARTITIONS_ATTRIBUTE]: 0x00 Partitioning Setting [PARTITION_SETTING_COMPLETED]: 0x00 Device partition setting NOT complete General Purpose Partition Size [GP_SIZE_MULT_4]: 0x000000 [GP_SIZE_MULT_3]: 0x000000 [GP_SIZE_MULT_2]: 0x000000 [GP_SIZE_MULT_1]: 0x000000 Enhanced User Data Area Size [ENH_SIZE_MULT]: 0x000000 ie 0 KiB Enhanced User Data Start Address [ENH_START_ADDR]: 0x000000 ie 0 bytes offset Bad Block Management mode [SEC_BAD_BLK_MGMNT]: 0x00 

EDIT : Atteint l'alignment optimal comme suggéré par "Глеб Майоров", Sauf la première partition 3 (que je ne peux pas changer) d'autres petites partitions sont changées à une taille minimum de 1MiB. Et à l'exception de 3 partitions, toutes les autres partitions semblent être alignées. Voici le dernier script de partitionnement que j'ai utilisé pour eMMC ( attention : dans le script ci-dessous, j'ai changé la taille des partitions par rapport au script ci-dessus)

 parted --script -a optimal /dev/mmcblk0 \ mklabel gpt \ mkpart primary 128KiB 255KiB \ mkpart primary 256KiB 383KiB \ mkpart primary 384KiB 511KiB \ mkpart primary 1MiB 2MiB \ mkpart primary 2MiB 3MiB \ mkpart primary 3MiB 4MiB \ mkpart primary 4MiB 5MiB \ mkpart primary 5MiB 10MiB \ mkpart primary 10MiB 15MiB \ mkpart primary 15MiB 20MiB \ mkpart primary 20MiB 21MiB \ mkpart primary 21MiB 22MiB \ mkpart primary 22MiB 23MiB \ mkpart primary 23MiB 30MiB \ mkpart primary ext4 30MiB 530MiB \ mkpart primary ext4 530MiB 1030MiB \ mkpart primary ext4 1030MiB 1130MiB \ mkpart primary ext4 1130MiB 1190MiB \ mkpart primary ext4 1190MiB 1720MiB \ mkpart primary ext4 1720MiB 1755MiB \ mkpart primary ext4 1755MiB 100% 

    Essayez d'aligner sur la taille de bloc d'effacement eMMC. Il est généralement égal à 0,5, 1, 2, 4, 8 MiB en fonction de la fiche technique eMMC. Si vous constatez que l'alignment de la taille des blocs est trop gourmand en memory, respectez la taille de la page, généralement comprise entre 4 et 16 KiB.

    Essayez de faire en sorte que les tailles de partition et les bordures soient un multiple de la taille du bloc d'effacement. Ainsi, lorsque le système de files écrit dans le premier ou le dernier bloc, la carte memory n'a pas besoin d'effacer et de réécrire le début / la fin de la partition suivante / précédente.

    Ne vous fiez pas aux caractéristiques de parted pour vous aligner, il vous suffit de prendre une calculasortingce, un stylo et une feuille de papier et de countr les limites correctes en secteurs ou en octets.

    Personnellement, je préfère aligner sur la bordure 8 MiB, car il ne gaspille pas trop de memory et toute partition commence et se termine sur la bordure du bloc d'effacement, indépendamment de la taille du bloc d'effacement spécifique.

    Un alignment optimal réduit le facteur d'amplification de l'écriture afin que votre memory dure plus longtime.