fs: zms: multiple fixes from previous PR review

This resolves some addressed comments in this PR
https://github.com/zephyrproject-rtos/zephyr/pull/77930

It adds as well a section in the documentation about some
recommendations to increase ZMS performance.

Signed-off-by: Riadh Ghaddab <rghaddab@baylibre.com>
This commit is contained in:
Riadh Ghaddab 2024-10-23 18:09:14 +02:00 committed by Mahesh Mahadevan
commit 46e1635773
7 changed files with 273 additions and 181 deletions

View file

@ -233,8 +233,7 @@ ZTEST_F(zms, test_zms_gc)
int len;
uint8_t buf[32];
uint8_t rd_buf[32];
const uint16_t max_id = 10;
const uint8_t max_id = 10;
/* 21st write will trigger GC. */
const uint16_t max_writes = 21;
@ -243,7 +242,7 @@ ZTEST_F(zms, test_zms_gc)
err = zms_mount(&fixture->fs);
zassert_true(err == 0, "zms_mount call failure: %d", err);
for (uint32_t i = 0; i < max_writes; i++) {
for (int i = 0; i < max_writes; i++) {
uint8_t id = (i % max_id);
uint8_t id_data = id + max_id * (i / max_id);
@ -253,11 +252,11 @@ ZTEST_F(zms, test_zms_gc)
zassert_true(len == sizeof(buf), "zms_write failed: %d", len);
}
for (uint32_t id = 0; id < max_id; id++) {
for (int id = 0; id < max_id; id++) {
len = zms_read(&fixture->fs, id, rd_buf, sizeof(buf));
zassert_true(len == sizeof(rd_buf), "zms_read unexpected failure: %d", len);
for (uint16_t i = 0; i < sizeof(rd_buf); i++) {
for (int i = 0; i < sizeof(rd_buf); i++) {
rd_buf[i] = rd_buf[i] % max_id;
buf[i] = id;
}
@ -268,11 +267,11 @@ ZTEST_F(zms, test_zms_gc)
err = zms_mount(&fixture->fs);
zassert_true(err == 0, "zms_mount call failure: %d", err);
for (uint32_t id = 0; id < max_id; id++) {
for (int id = 0; id < max_id; id++) {
len = zms_read(&fixture->fs, id, rd_buf, sizeof(buf));
zassert_true(len == sizeof(rd_buf), "zms_read unexpected failure: %d", len);
for (uint16_t i = 0; i < sizeof(rd_buf); i++) {
for (int i = 0; i < sizeof(rd_buf); i++) {
rd_buf[i] = rd_buf[i] % max_id;
buf[i] = id;
}
@ -286,7 +285,7 @@ static void write_content(uint32_t max_id, uint32_t begin, uint32_t end, struct
uint8_t buf[32];
ssize_t len;
for (uint32_t i = begin; i < end; i++) {
for (int i = begin; i < end; i++) {
uint8_t id = (i % max_id);
uint8_t id_data = id + max_id * (i / max_id);
@ -303,11 +302,11 @@ static void check_content(uint32_t max_id, struct zms_fs *fs)
uint8_t buf[32];
ssize_t len;
for (uint32_t id = 0; id < max_id; id++) {
for (int id = 0; id < max_id; id++) {
len = zms_read(fs, id, rd_buf, sizeof(buf));
zassert_true(len == sizeof(rd_buf), "zms_read unexpected failure: %d", len);
for (uint16_t i = 0; i < ARRAY_SIZE(rd_buf); i++) {
for (int i = 0; i < ARRAY_SIZE(rd_buf); i++) {
rd_buf[i] = rd_buf[i] % max_id;
buf[i] = id;
}
@ -322,7 +321,6 @@ static void check_content(uint32_t max_id, struct zms_fs *fs)
ZTEST_F(zms, test_zms_gc_3sectors)
{
int err;
const uint16_t max_id = 10;
/* 41st write will trigger 1st GC. */
const uint16_t max_writes = 41;
@ -410,7 +408,6 @@ ZTEST_F(zms, test_zms_corrupted_sector_close_operation)
uint32_t *flash_write_stat;
uint32_t *flash_max_write_calls;
uint32_t *flash_max_len;
const uint16_t max_id = 10;
/* 21st write will trigger GC. */
const uint16_t max_writes = 21;
@ -423,7 +420,7 @@ ZTEST_F(zms, test_zms_corrupted_sector_close_operation)
err = zms_mount(&fixture->fs);
zassert_true(err == 0, "zms_mount call failure: %d", err);
for (uint32_t i = 0; i < max_writes; i++) {
for (int i = 0; i < max_writes; i++) {
uint8_t id = (i % max_id);
uint8_t id_data = id + max_id * (i / max_id);
@ -465,7 +462,7 @@ ZTEST_F(zms, test_zms_full_sector)
int err;
ssize_t len;
uint32_t filling_id = 0;
uint32_t i, data_read;
uint32_t data_read;
fixture->fs.sector_count = 3;
@ -493,7 +490,7 @@ ZTEST_F(zms, test_zms_full_sector)
zassert_true(len == sizeof(filling_id), "zms_write failed: %d", len);
/* sanitycheck on ZMS content */
for (i = 0; i <= filling_id; i++) {
for (int i = 0; i <= filling_id; i++) {
len = zms_read(&fixture->fs, i, &data_read, sizeof(data_read));
if (i == 1) {
zassert_true(len == -ENOENT, "zms_read shouldn't found the entry: %d", len);
@ -511,8 +508,10 @@ ZTEST_F(zms, test_delete)
{
int err;
ssize_t len;
uint32_t filling_id, data_read;
uint32_t ate_wra, data_wra;
uint32_t filling_id;
uint32_t data_read;
uint32_t ate_wra;
uint32_t data_wra;
fixture->fs.sector_count = 3;
@ -570,7 +569,9 @@ ZTEST_F(zms, test_delete)
*/
ZTEST_F(zms, test_zms_gc_corrupt_close_ate)
{
struct zms_ate ate, close_ate, empty_ate;
struct zms_ate ate;
struct zms_ate close_ate;
struct zms_ate empty_ate;
uint32_t data;
ssize_t len;
int err;
@ -642,7 +643,8 @@ ZTEST_F(zms, test_zms_gc_corrupt_close_ate)
*/
ZTEST_F(zms, test_zms_gc_corrupt_ate)
{
struct zms_ate corrupt_ate, close_ate;
struct zms_ate corrupt_ate;
struct zms_ate close_ate;
int err;
close_ate.id = 0xffffffff;
@ -685,10 +687,10 @@ ZTEST_F(zms, test_zms_gc_corrupt_ate)
#ifdef CONFIG_ZMS_LOOKUP_CACHE
static size_t num_matching_cache_entries(uint64_t addr, bool compare_sector_only, struct zms_fs *fs)
{
size_t i, num = 0;
size_t num = 0;
uint64_t mask = compare_sector_only ? ADDR_SECT_MASK : UINT64_MAX;
for (i = 0; i < CONFIG_ZMS_LOOKUP_CACHE_SIZE; i++) {
for (int i = 0; i < CONFIG_ZMS_LOOKUP_CACHE_SIZE; i++) {
if ((fs->lookup_cache[i] & mask) == addr) {
num++;
}
@ -759,20 +761,19 @@ ZTEST_F(zms, test_zms_cache_collission)
{
#ifdef CONFIG_ZMS_LOOKUP_CACHE
int err;
uint32_t id;
uint16_t data;
fixture->fs.sector_count = 4;
err = zms_mount(&fixture->fs);
zassert_true(err == 0, "zms_mount call failure: %d", err);
for (id = 0; id < CONFIG_ZMS_LOOKUP_CACHE_SIZE + 1; id++) {
for (int id = 0; id < CONFIG_ZMS_LOOKUP_CACHE_SIZE + 1; id++) {
data = id;
err = zms_write(&fixture->fs, id, &data, sizeof(data));
zassert_equal(err, sizeof(data), "zms_write call failure: %d", err);
}
for (id = 0; id < CONFIG_ZMS_LOOKUP_CACHE_SIZE + 1; id++) {
for (int id = 0; id < CONFIG_ZMS_LOOKUP_CACHE_SIZE + 1; id++) {
err = zms_read(&fixture->fs, id, &data, sizeof(data));
zassert_equal(err, sizeof(data), "zms_read call failure: %d", err);
zassert_equal(data, id, "incorrect data read");
@ -846,7 +847,7 @@ ZTEST_F(zms, test_zms_cache_hash_quality)
/* Write ZMS IDs from 0 to CONFIG_ZMS_LOOKUP_CACHE_SIZE - 1 */
for (uint16_t i = 0; i < CONFIG_ZMS_LOOKUP_CACHE_SIZE; i++) {
for (int i = 0; i < CONFIG_ZMS_LOOKUP_CACHE_SIZE; i++) {
id = i;
data = 0;
@ -869,7 +870,7 @@ ZTEST_F(zms, test_zms_cache_hash_quality)
/* Write CONFIG_ZMS_LOOKUP_CACHE_SIZE ZMS IDs that form the following series: 0, 4, 8... */
for (uint16_t i = 0; i < CONFIG_ZMS_LOOKUP_CACHE_SIZE; i++) {
for (int i = 0; i < CONFIG_ZMS_LOOKUP_CACHE_SIZE; i++) {
id = i * 4;
data = 0;