LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 999|回复: 4

哪位兄弟写过针对文件系统的压力测试脚本

[复制链接]
发表于 2007-12-23 16:19:11 | 显示全部楼层 |阅读模式
下面是我自己想的一个思路:
首先创建一个105叉目录树并在这棵树中创建10000个大小为1Kb1Mb的文件,然后复制整棵树,最后删除这两颗树
不知知道这样是否可行,另外这个脚本也不知道怎么去写,哪位兄弟能给点思路,谢谢
发表于 2007-12-24 15:19:56 | 显示全部楼层
建议你参照LTP(Linux Text Project), 网址: http://ltp.sourceforge.net/
自己去看看吧, 肯定能找到你想要的
回复 支持 反对

使用道具 举报

发表于 2007-12-25 14:54:40 | 显示全部楼层
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int mk5dirs(int level)
{
  int i = 1;
  char buffer[4];

  if (level == 0)
    return;

  for (i=1; i<=5; i++)
  {
    sprintf(buffer,"%d",i);
    mkdir(buffer);
    chdir(buffer);
    mk5dirs(level-1);
    chdir("..");
  }

}

int main(int argc, char *argv[])
{
   int level;
   if (argc < 2)
     level = 5; //default level
   else
     level = atoi(argv[1]);

   mk5dirs(level);

   return ;
}

我用上面的代码,建立7级目录,用了35秒(P4 2.4, 512M,linux ext3)
企图建立10级目录,可是时间太长,等不下去中断了,
理论上用时间应该是35 * 5^3 = 4375秒,实际上更长

删除7级目录用了2分40秒(160秒)
10级目录理论上是2000秒,大概要5、6个小时
如果在最底层目录加入10K~1m的文件,那更恐怖了,估计测试得1~2天,没耐心的人测试不了。

10级目录,每级5个目录,需要建立5^10-1个目录,大概1000万个目录。
回复 支持 反对

使用道具 举报

发表于 2007-12-25 15:30:39 | 显示全部楼层
  1. #!/bin/bash

  2. mk5dirs()
  3. {
  4.   level=$1
  5.   echo "level is $level"
  6.   if [ $level -eq 0 ];then
  7.     retrun 0
  8.   fi
  9.   
  10.   for i in `seq -w 5`
  11.   do
  12.    mkdir -p $i
  13.    cd $i
  14.    mk5dirs $[$level-1]
  15.    cd ..
  16.   done
  17. }

  18. mk5dirs 5
复制代码


上面是用bash实现的,可惜bash的递归有点问题,好像不能实现:
就用下面的土办法将就一下:

  1. #!/bin/bash

  2. for i in `seq -w 5`
  3. do
  4.   mkdir -p $i
  5.   cd $i
  6.   for j in `seq -w 5`
  7.   do
  8.     mkdir -p $j
  9.     cd $j
  10.     for k in `seq -w 5`
  11.     do
  12.       mkdir -p $k
  13.       cd $k
  14.       for l in `seq -w 5`
  15.       do
  16.         mkdir -p $l
  17.         cd $l
  18.         for m in `seq -w 5`
  19.         do
  20.           mkdir -p $m
  21.         done
  22.         cd ..
  23.       done
  24.       cd ..
  25.     done
  26.     cd ..
  27.   done
  28.   cd ..
  29. done
复制代码


用python实现:

  1. #!/usr/bin/env python

  2. import os

  3. def mk5dirs(level):
  4.   if level == 0:
  5.     return
  6.   for i in xrange(5):
  7.     os.mkdir(str(i))
  8.     os.chdir(str(i))
  9.     mk5dirs(level-1)
  10.     os.chdir("..")

  11. mk5dirs(10)
复制代码


至于需要加入文件,我不知道你是要在最底层目录加文件,还是每一层都要加文件,自己修改修改吧。应该很容易的。
回复 支持 反对

使用道具 举报

发表于 2007-12-25 15:44:02 | 显示全部楼层
刚才又查了一下资料,原来bash实现递归必须把变量声明为local
修改后就可以了:

  1. #!/bin/bash

  2. mk5dirs()
  3. {
  4.   [color="Red"]local[/color] level=$1
  5.   echo "level is $level"
  6.   if [ $level -eq 0 ];then
  7.     retrun 0
  8.   fi
  9.   
  10.   for i in `seq -w 5`
  11.   do
  12.    mkdir -p $i
  13.    cd $i
  14.    mk5dirs $[$level-1]
  15.    cd ..
  16.   done
  17. }

  18. mk5dirs 5
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表