磁盘测速

一、写在测试之前的

程序测试磁盘速度应该考虑到几点:

  1. 首先是内存的存在。内存作为读写的缓冲区,写入一个文件到磁盘时fflush() 会将写入数据从用户态转为核态,只有核态命令fsync() 才能够将数据真正的刷新的硬盘。内存作为缓存在读时可能影响更大。
  2. 其次是磁盘缓存,磁盘缓存是非易失性的,速度接近于内存,但容量一般在16MB~64MB 之间。会对写入速度的测试有较大影响。比如对于64MB 缓存硬盘,只写入一个小于64MB 文件后计算速度会非常大。
  3. 不同磁道上扇区密度不同。如下左图是比较旧磁盘采用的磁道上扇区分法,这样的在同样一圈磁道上扇区数相同,内外径不同磁道上磁头旋转一圈读取的数据量相同,缺点就在于外径扇区没有充分利用较大的磁道。而右边采用的近似等线密度的扇区分区,外径上磁道比内径上磁道具有更多的扇区,也就是说磁头在外径磁道上旋转一周的时间会读取更多的数据,这点在后面的实验中也有证实。
  4. 还有一个需要考虑到得是文件系统的影响,文件系统决定了文件的放置,很大程度上决定了测试的读写性能,比如Linux ext 文件系统就和windows 的文件系统不同(因为不需要碎片整理了)。在下面大部分测试中都使用的是打开文件、写文件、关闭文件,然后对同一个文件重复同样流程。

  1  2

继续阅读

HTTP 协议

一、HTTP 协议特点

  1. 支持客户端/服务器模式
  2. 客户端请求时,只需发送请求方式和路径,请求的方法有GET/HEAD/POST 等方式
  3. HTTP 允许传输任何类型数据对象。正在传输的数据类型为Content-type 定义
  4. 无连接,每次连接仅处理一个请求,Server 处理完Client 的请求,收到Client 的回复后断开连接
  5. 无状态,对于事务处理没有记忆能力

继续阅读

Python 之ConfigParser

一、ConfigParser简介

ConfigParser 是用来读取配置文件的包。配置文件的格式如下:中括号“[ ]”内包含的为section。section 下面为类似于key-value 的配置内容。

   1: [db]

   2: db_host = 127.0.0.1

   3: db_port = 22

   4: db_user = root

   5: db_pass = rootroot

   6:  

   7: [concurrent]

   8: thread = 10

   9: processor = 20

中括号“[ ]”内包含的为section。紧接着section 为类似于key-value 的options 的配置内容。

 

二、ConfigParser 初始工作

使用ConfigParser 首选需要初始化实例,并读取配置文件:

   1: cf = ConfigParser.ConfigParser()

   2: cf.read("配置文件名")

 

三、ConfigParser 常用方法

1. 获取所有sections。也就是将配置文件中所有“[ ]”读取到列表中:

   1: s = cf.sections()

   2: print 'section:', s

将输出(以下将均以简介中配置文件为例):

   1: section: ['db', 'concurrent']

2. 获取指定section 的options。即将配置文件某个section 内key 读取到列表中:

   1: o = cf.options("db")

   2: print 'options:', o

将输出:

   1: options: ['db_host', 'db_port', 'db_user', 'db_pass']

3. 获取指定section 的配置信息

   1: v = cf.items("db")

   2: print 'db:', v

将输出:

   1: db: [('db_host', '127.0.0.1'), ('db_port', '22'), ('db_user', 'root'), ('db_pass', 'rootroot')]

4. 按照类型读取指定section 的option 信息

同样的还有getfloat、getboolean。

   1: #可以按照类型读取出来

   2: db_host = cf.get("db", "db_host")

   3: db_port = cf.getint("db", "db_port")

   4: db_user = cf.get("db", "db_user")

   5: db_pass = cf.get("db", "db_pass")

   6:  

   7: # 返回的是整型的

   8: threads = cf.getint("concurrent", "thread")

   9: processors = cf.getint("concurrent", "processor")

  10:  

  11: print "db_host:", db_host

  12: print "db_port:", db_port

  13: print "db_user:", db_user

  14: print "db_pass:", db_pass

  15: print "thread:", threads

  16: print "processor:", processors

将输出:

   1: db_host: 127.0.0.1

   2: db_port: 22

   3: db_user: root

   4: db_pass: rootroot

   5: thread: 10

   6: processor: 20

5. 设置某个option 的值。(记得最后要写回)

   1: cf.set("db", "db_pass", "zhaowei")

   2: cf.write(open("test.conf", "w"))

6.添加一个section。(同样要写回)

   1: cf.add_section('liuqing')

   2: cf.set('liuqing', 'int', '15')

   3: cf.set('liuqing', 'bool', 'true')

   4: cf.set('liuqing', 'float', '3.1415')

   5: cf.set('liuqing', 'baz', 'fun')

   6: cf.set('liuqing', 'bar', 'Python')

   7: cf.set('liuqing', 'foo', '%(bar)s is %(baz)s!')

   8: cf.write(open("test.conf", "w"))

7. 移除section 或者option 。(只要进行了修改就要写回的哦)

   1: cf.remove_option('liuqing','int')

   2: cf.remove_section('liuqing')

   3: cf.write(open("test.conf", "w"))

四、其他

  1. 以 # 和 ; 开头的行将作为注释

Debian 安装

之前在vmware 上安装的Debian 系统因为分区空间太小,重启系统的时候无法进入图形节点,startx 也只能打开twm 管理器。用vmware-vdiskmanager 扩容vmdk 提示有问题,就只有重装了,借鉴之前出现的问题有几点建议给在虚拟机上装Debian 的建议:

  1. 不要装Debian 了,改投ubuntu 吧
  2. 给虚拟机磁盘容量大点吧
  3. home root 都不要单独分区了,整一个分区吧
  4. 不要选择“split virtual disk into multiple files”,这样在vmdk 会被切分2GB 一个文件,扩展似乎有问题

废话少说,做好笔记来装机:

下载系统安装包

有两个选择:1. 在官网上http://www.debian.org/ 。2.在163 镜像上下载http://mirrors.163.com/ 

可能你会在选择CD image 的遇到是 amd64、ia64、i386 的选择,做个说明:

amd64 和ia64 都是64 位系统,ia64 较新需要主机支持安腾架构,一般下amd64 即可

i386 针对的是比较老的一些32 位机器

VMware 安装Debian

VMware 上的new virtual machine 等balabala 的就不说了,中间忽略的过程你可以认为选择默认

  1. 【install】、【graphic install】 随你选,还是图形的好看点吧
  2. 【select a language 】这是安装过程中的语言,母语没得说
  3. 【地区】“中国”,【键盘】“美国英语”
  4. 【配置网络】主机名:看着办吧!别和现有的网络重名了,建议和虚拟机名相同
  5. 【设置用户和密码】你会先输入root 的密码,这也就是你之后sudo 要输入的密码,接着建一个自己喜欢的用户名吧!
  6. 【磁盘分区】如果你知道自己干什么,并且你的磁盘够大,那么选择“手动”吧,图简单“使用整个磁盘–配置LVM”
  7. 【磁盘分区】“将所有文件放在一个分区中”然后“继续”…
  8. 【磁盘分区】“如何使用此分区”中选一个你喜欢的,选择ext4 “继续” “分区设定结束”“分区设定结束并将修改写入磁盘”“是”
  9. 【配置软件包管理】“中国”
  10. 【配置软件包管理器】三选一 mirrors.geekbone.org、www.anheng.com.cn  、cdn.debian.net 建议选择第三个。HTTP 代理一般也不用吧~
  11. 【配置软件包管理器】然后就是漫长的下载安装过程,一刻钟左右(看网速)
  12. 【软件选择】看着喜欢选
  13. 【正在设定man-db】将GRUB 启动引导器安装到主引导记录(MBR)上吗?(如果不是虚拟机且不止一个OS 请选否)
  14. 【结束安装进程】继续重启咯

安装系统后的工作

1. 配置网络,配置文件 /etc/network/interfaces  /etc/resolv.conf  记得最后要/etc/init.d/networking restart

auto eth0 #开机自动激活
       iface eth0 inte static #静态IP
       address 192.168.0.56 #本机IP
       netmask 255.255.255.0 #子网掩码
       gateway 192.168.0.254 #路由网关      

# iface eth0 inet dhcp 如果是自动获取的

2. 这时候的字体可能比较难看,背景也不是我想要的“星球”系列,桌面右键“更改桌面背景”字体可修改

3. 更新源文件,配置文件/etc/apt/sources.list ,更新为:

deb http://mirrors.163.com/debian squeeze main non-free contrib
       deb http://mirrors.163.com/debian squeeze-proposed-updates main contrib non-free
       deb http://mirrors.163.com/debian-security squeeze/updates main contrib non-free
      deb-src http://mirrors.163.com/debian squeeze main non-free contrib
      deb-src http://mirrors.163.com/debian squeeze-proposed-updates main contrib non-free
      deb-src http://mirrors.163.com/debian-security squeeze/updates main contrib non-free
      deb http://http.us.debian.org/debian squeeze main contrib non-free
      deb http://non-us.debian.org/debian-non-US squeeze/non-US main contrib non-free
      deb http://security.debian.org squeeze/updates main contrib non-free

【可选】还有一个方法更新源信息,通过安装apt-spy ,通过其更新软件包列表:

首先 apt-get update 再安装apt-spy

apt-get install apt-spy

使用apy 获取镜像服务器列表

apt-get update

然后使用apy 镜像服务器速度,更新sources.list

apt-spy -d stable -a Asia

4. 接着apt-get update 接着apt-get upgrade  一下吧

5.安装基本的编辑工具吧!(在虚拟机中只有装了gcc 才能安装vmware-tools)

apt-get install gcc
       apt-get install make
       apt-get install automake

6. 每次输入sudo 都要输入密码是不是很麻烦呢?修改/etc/sudoers 在输入sudo 命令的时候不要输入密码

在最后一行添加:

root    ALL=(ALL)       ALL   #让用户可以使用root 用户的权限

xxxxxx ALL=(ALL)NOPASSWD: ALL     #所有用户都不用输入密码

xxxxxx 是你的用户名,最后chmod u -w /etc/sudpers 去掉写权限

 

 

大功告成,还要什么自己添加、修改去吧!