ANDROID: dm verity: add minimum prefetch size
- For device like eMMC, it gives better performance to read more hash blocks at a time. - For android, set it to default 128. For other devices, set it to 1 which is the same as now. - saved boot-up time by 300ms in tested device bug: 32246564 Cc: Sami Tolvanen <samitolvanen@google.com> Signed-off-by: Keun-young Park <keunyoung@google.com>
This commit is contained in:
parent
35194db1b7
commit
26a380b3ce
2 changed files with 24 additions and 1 deletions
|
@ -458,6 +458,21 @@ config DM_VERITY
|
|||
|
||||
If unsure, say N.
|
||||
|
||||
config DM_VERITY_HASH_PREFETCH_MIN_SIZE_128
|
||||
bool "Prefetch size 128"
|
||||
|
||||
config DM_VERITY_HASH_PREFETCH_MIN_SIZE
|
||||
int "Verity hash prefetch minimum size"
|
||||
depends on DM_VERITY
|
||||
range 1 4096
|
||||
default 128 if DM_VERITY_HASH_PREFETCH_MIN_SIZE_128
|
||||
default 1
|
||||
---help---
|
||||
This sets minimum number of hash blocks to prefetch for dm-verity.
|
||||
For devices like eMMC, having larger prefetch size like 128 can improve
|
||||
performance with increased memory consumption for keeping more hashes
|
||||
in RAM.
|
||||
|
||||
config DM_VERITY_FEC
|
||||
bool "Verity forward error correction support"
|
||||
depends on DM_VERITY
|
||||
|
@ -510,6 +525,7 @@ config DM_ANDROID_VERITY
|
|||
depends on ASYMMETRIC_KEY_TYPE
|
||||
depends on ASYMMETRIC_PUBLIC_KEY_SUBTYPE
|
||||
depends on MD_LINEAR
|
||||
select DM_VERITY_HASH_PREFETCH_MIN_SIZE_128
|
||||
---help---
|
||||
This device-mapper target is virtually a VERITY target. This
|
||||
target is setup by reading the metadata contents piggybacked
|
||||
|
|
|
@ -501,6 +501,7 @@ static void verity_prefetch_io(struct work_struct *work)
|
|||
container_of(work, struct dm_verity_prefetch_work, work);
|
||||
struct dm_verity *v = pw->v;
|
||||
int i;
|
||||
sector_t prefetch_size;
|
||||
|
||||
for (i = v->levels - 2; i >= 0; i--) {
|
||||
sector_t hash_block_start;
|
||||
|
@ -523,8 +524,14 @@ static void verity_prefetch_io(struct work_struct *work)
|
|||
hash_block_end = v->hash_blocks - 1;
|
||||
}
|
||||
no_prefetch_cluster:
|
||||
// for emmc, it is more efficient to send bigger read
|
||||
prefetch_size = max((sector_t)CONFIG_DM_VERITY_HASH_PREFETCH_MIN_SIZE,
|
||||
hash_block_end - hash_block_start + 1);
|
||||
if ((hash_block_start + prefetch_size) >= (v->hash_start + v->hash_blocks)) {
|
||||
prefetch_size = hash_block_end - hash_block_start + 1;
|
||||
}
|
||||
dm_bufio_prefetch(v->bufio, hash_block_start,
|
||||
hash_block_end - hash_block_start + 1);
|
||||
prefetch_size);
|
||||
}
|
||||
|
||||
kfree(pw);
|
||||
|
|
Loading…
Add table
Reference in a new issue