From f941e8bcd38698061804775a93a598bace0bfded Mon Sep 17 00:00:00 2001 From: Charles Manning Date: Fri, 20 Aug 2010 11:56:12 +1200 Subject: [PATCH] yaffs: Add yaffs direct code for tracking flash traffic Helps for accessing gc overheads. Signed-off-by: Charles Manning --- direct/basic-test/dtest.c | 70 +++++++++++++++++++++++++++------ direct/basic-test/yaffsnewcfg.c | 2 +- direct/yaffsfs.c | 8 ++++ direct/yaffsfs.h | 4 ++ 4 files changed, 70 insertions(+), 14 deletions(-) diff --git a/direct/basic-test/dtest.c b/direct/basic-test/dtest.c index b9fc0ea..3ac5604 100644 --- a/direct/basic-test/dtest.c +++ b/direct/basic-test/dtest.c @@ -22,6 +22,9 @@ #include "yaffsfs.h" +#include "yaffs_guts.h" /* Only for dumping device innards */ + +extern int yaffs_traceMask; void dumpDir(const char *dname); @@ -177,21 +180,22 @@ void create_file_of_size(const char *fn,int syze) int h; int n; int result; - + int iteration = 0; char xx[200]; - - int iterations = (syze + strlen(fn) -1)/ strlen(fn); - + h = yaffs_open(fn, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE); - while (iterations > 0) + while (syze > 0) { - sprintf(xx,"%s %8d",fn,iterations); + sprintf(xx,"%s %8d",fn,iteration); n = strlen(xx); result = yaffs_write(h,xx,n); - if(result != n) - printf("Wrote %d, should have been %d\n",result,n); - iterations--; + if(result != n){ + printf("Wrote %d, should have been %d. syze is %d\n",result,n,syze); + syze = 0; + } else + syze-=n; + iteration++; } yaffs_close (h); } @@ -2639,7 +2643,48 @@ void big_xattr_test(const char *mountpt) list_xattr(name); } + + +void dump_dev_stats(yaffs_Device *dev, const char * str) +{ + printf("%s\n",str); + printf( "space free %d erased %d " + "nand reads %d writes %d erases %d " + "gc all %d passive %d oldestdirty %d blocks %d copies %d \n", + dev->nFreeChunks, dev->nErasedBlocks * dev->param.nChunksPerBlock, + dev->nPageReads, dev->nPageWrites, dev->nBlockErasures, + dev->allGCs, dev->passiveGCs, dev->oldestDirtyGCs, dev->nGCBlocks, dev->nGCCopies); +} + +void test_flash_traffic(const char *mountpt) +{ + char name0[100]; + char name1[100]; + int i; + yaffs_Device *dev; + + yaffs_traceMask = 0; + + yaffs_StartUp(); + + yaffs_mount(mountpt); + dev = yaffs_getdev(mountpt); + + strcpy(name0,mountpt); + strcat(name0,"/x"); + + strcpy(name1,mountpt); + strcat(name1,"/y"); + + dump_dev_stats(dev,"start"); + create_file_of_size(name0,32 * 1024 * 1024); + dump_dev_stats(dev,"32MB written"); + for(i = 0; i < 20; i++) + create_file_of_size(name1,1024 * 1024); + dump_dev_stats(dev,"20x 1MB files written"); + +} int random_seed; int simulate_power_failure; @@ -2693,9 +2738,6 @@ int main(int argc, char *argv[]) //link_test("/flash/flash"); - - - // cache_bypass_bug_test(); //free_space_check(); @@ -2705,7 +2747,9 @@ int main(int argc, char *argv[]) //basic_xattr_test("/yaffs2"); //big_xattr_test("/yaffs2"); - null_name_test("yaffs2"); + //null_name_test("yaffs2"); + + test_flash_traffic("yaffs2"); return 0; diff --git a/direct/basic-test/yaffsnewcfg.c b/direct/basic-test/yaffsnewcfg.c index 6ee43b7..fa99342 100644 --- a/direct/basic-test/yaffsnewcfg.c +++ b/direct/basic-test/yaffsnewcfg.c @@ -101,7 +101,7 @@ int yaffs_StartUp(void) // Stuff to configure YAFFS // Stuff to initialise anything special (eg lock semaphore). yaffsfs_LocalInitialisation(); - yramsim_CreateRamSim("yaffs2",1,200,0,0); + yramsim_CreateRamSim("yaffs2",1,1000,0,0); yramsim_CreateRamSim("p0",0,0x400,1,0xff); yramsim_CreateRamSim("p1",0,0x400,1,0); diff --git a/direct/yaffsfs.c b/direct/yaffsfs.c index b93f295..d9be490 100644 --- a/direct/yaffsfs.c +++ b/direct/yaffsfs.c @@ -1660,6 +1660,14 @@ int yaffs_mkdir(const YCHAR *path, mode_t mode) return retVal; } +void * yaffs_getdev(const YCHAR *path) +{ + yaffs_Device *dev=NULL; + YCHAR *dummy; + dev = yaffsfs_FindDevice(path,&dummy); + return (void *)dev; +} + int yaffs_mount2(const YCHAR *path,int readOnly) { int retVal=-1; diff --git a/direct/yaffsfs.h b/direct/yaffsfs.h index 7961dff..4b2ebe9 100644 --- a/direct/yaffsfs.h +++ b/direct/yaffsfs.h @@ -164,6 +164,10 @@ void yaffs_AddDevice(struct yaffs_DeviceStruct *dev); int yaffs_StartUp(void); + +/* Function only for debugging */ +void * yaffs_getdev(const YCHAR *path); + #endif -- 2.30.2