磁盘I/O那些事

2017-5-19 杜世伟 架构

背景

计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的CPU主频早已超过3GHz,内存也进入了普及DDR4的时代。然而传统硬盘虽然在存储容量上增长迅速,但是在读写性能上并无明显提升,同时SSD硬盘价格高昂,不能在短时间内完全替代传统硬盘。传统磁盘的I/O读写速度成为了计算机系统性能提高的瓶颈,制约了计算机整体性能的发展。

硬盘性能的制约因素是什么?如何根据磁盘I/O特性来进行系统设计?针对这些问题,本文将介绍硬盘的物理结构和性能指标,以及操作系统针对磁盘性能所做的优化,最后讨论下基于磁盘I/O特性设计的技巧。

硬盘的物理结构

硬盘内部主要部件为磁盘盘片、传动手臂、读写磁头和主轴马达。实际数据都是写在盘片上,读写主要是通过传动手臂上的读写磁头来完成。实际运行时,主轴让磁盘盘片转动,然后传动手臂可伸展让读取头在盘片上进行读写操作。磁盘物理结构如下图所示:

磁盘结构

由于单一盘片容量有限,一般硬盘都有两张以上的盘片,每个盘片有两面,都可记录信息,所以一张盘片对应着两个磁头。盘片被分为许多扇形的区域,每个区域叫一个扇区,硬盘中每个扇区的大小固定为512字节。盘片表面上以盘片中心为圆心,不同半径的同心圆称为磁道,不同盘片相同半径的磁道所组成的圆柱称为柱面。磁道与柱面都是表示不同半径的圆,在许多场合,磁道和柱面可以互换使用。磁盘盘片垂直视角如下图所示:

阅读全文>>

标签: io.system

评论(0) 浏览(1785)

error: command 'gcc' failed with exit status 1

2017-5-1 杜世伟 Python

错误:error: command 'gcc' failed with exit status 1

在 centons 使用pip安装Python模块出现error: command 'gcc' failed with exit status 1 ,明明装了gcc的,怎么会不行呢,然后发觉是failed不是not found,这说明这个错误个gcc没多大关系,应该是缺少某些功能模块,然后谷歌了一下,先后安装了python-devel,libffi-devel后还是不行,最后发觉要安装openssl-devel才行

可如下命令行安装:

yum install gcc libffi-devel python-devel openssl-devel

阅读全文>>

标签: linux gcc python pip

评论(0) 浏览(17726)

ImportErrorNomodulenamedCrypto.Cipher问题解决方案

2017-4-24 杜世伟 Linux

今天在安装mycli命令行工具,运行mycli --help的时候出现以下问题
from Crypto import Random 问题

from Crypto.Cipher import AES 问题

在导入以上两条语句中,出现问题,显示出现无法找到crypto包,按照提示,
pip install Crypto 
pip install Crypto.Cipher
加入crypto包之后,然后还是出现这个问题。

问题解决参考以下链接:

http://stackoverflow.com/questions/19623267/importerror-no-module-named-crypto-cipher

阅读全文>>

标签: linux pip mycli crypto pycrypto

评论(0) 浏览(9941)

go 简介与安装

2017-4-24 杜世伟 go

Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。

Go 语言特色
简洁、快速、安全
并行、有趣、开源
内存管理、v数组安全、编译迅速
Go 语言用途
Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。

对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

各种版本的下载地址:
https://golang.org/dl/

Go环境安装:
1、wget方式下载并解压
wget https://dl.google.com/go/go1.9.3.linux-amd64.tar.gz
sudo tar -xzf go1.9.3.linux-amd64.tar.gz -C /usr/local/lib
2、添加配置

阅读全文>>

标签: linux centos go export

评论(0) 浏览(5622)

Python四种逐行读取文件内容的方法

2017-3-27 杜世伟 Python

下面是四种Python逐行读取文件内容的方法, 并分析了各种方法的优缺点及应用场景,以下代码在python3中测试通过, python2中运行部分代码已注释,稍加修改即可。
方法一:readline函数

#-*- coding: UTF-8 -*- 
f = open("./code.txt")             # 返回一个文件对象  
line = f.readline()             # 调用文件的 readline()方法  
while line:  
    #print line,                 # 在 Python 2中,后面跟 ',' 将忽略换行符  
    print(line, end = '')       # 在 Python 3中使用
    line = f.readline()
f.close()
优点:节省内存,不需要一次性把文件内容放入内存中
缺点:速度相对较慢

阅读全文>>

标签: python open fileinput readline readlines

评论(0) 浏览(14198)

Python 快速实现 FTP 服务器

2017-2-16 杜世伟 Python

有时当你想快速搭建一个 FTP 服务器来临时实现文件上传下载时,这是特别有用的。我们这里利用 Python 的 Pyftpdlib 模块可以快速的实现一个 FTP 服务器的功能。

首先安装 Pyftpdlib 模块

$ sudo pip install pyftpdlib
The directory '/Users/xiaodu/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/Users/xiaodu/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting pyftpdlib
Installing collected packages: pyftpdlib
Successfully installed pyftpdlib-1.5.3

阅读全文>>

标签: python ftp pyftpdlib

评论(0) 浏览(11705)

通过python快速搭建http服务

2017-2-15 杜世伟 Python

python -m SimpleHTTPServer 快速搭建http服务

有时你需临时搭建一个简单的 Web Server,但你又不想去安装 Apache、Nginx 等这类功能较复杂的 HTTP 服务程序时。这时可以使用 Python 内建的 SimpleHTTPServer 模块快速搭建一个简单的 HTTP 服务器。

使用python -m SimpleHTTPServer 模块可以把你指定目录中的文件和文件夹以一个简单的 Web 页面的方式展示出来。

如我想把目录/Users/xiaodu/python/test目录下的内容通过web共享出来,目录内容如下:

阅读全文>>

标签: http python SimpleHTTPServer

评论(0) 浏览(17902)

Python之Requests模块使用详解

2017-1-17 杜世伟 Python

     Requests模块是一个用于网络访问的模块,其实类似的模块有很多,比如urllib,urllib2,httplib,httplib2,他们基本都提供相似的功能,那为什么Requests模块就能够脱引而出呢?可以打开它的官网看一下,是一个“人类“用的http模块。那么,它究竟怎样的人性化呢?相信如果你之前用过urllib之类的模块的话,对比下就会发现它确实很人性化。
一、导入

下载完成后,导入模块很简单,代码如下:

import requests
二、请求url

这里我们列出最常见的发送get或者post请求的语法。
1.发送无参数的get请求:
r=requests.get("http://pythontab.com/justTest")
现在,我们得到了一个响应对象r,我们可以利用这个对象得到我们想要的任何信息。
上面的例子中,get请求没有任何参数,那如果请求需要参数怎么办呢?


阅读全文>>

标签: linux python request

评论(0) 浏览(13836)

python setuptools 安装

2017-1-15 杜世伟 Python

python下的setuptools带有一个easy_install的工具,在安装python的每三方模块、工具时很有用,也很方便。

安装setuptools前先安装pip,

请参考:linux下pip的安装步骤及使用详解


1. 下载:
在它的官网可以下载到安装包:
https://pypi.python.org/pypi/setuptools

页面最下面的是它的安装链接,如:
$wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-12.0.3.tar.gz#md5=f07e4b0f4c1c9368fcd980d888b29a65

tar -zxvf setuptools-12.0.3.tar.gz
cd setuptools-12.0.3
python setup.py install

如果在安装过程中出现以下错误:
Installed /usr/local/python2.7.3/lib/python2.7/site-packages/supervisor-4.0.0_dev-py2.7.egg
Processing dependencies for supervisor==4.0.0-dev
Searching for meld3>=1.0.0
Reading https://pypi.python.org/simple/meld3/
Download error on https://pypi.python.org/simple/meld3/: [Errno 1] _ssl.c:504: error:14090086:SSL 

阅读全文>>

标签: python pip setuptools

评论(0) 浏览(13850)

module' object has no attribute 'OP_NO_TLSv1_1

2017-1-9 杜世伟 Python

scrapy startproject pachong
Traceback (most recent call last):
  File "/bin/scrapy", line 9, in <module>
    load_entry_point('Scrapy==1.5.0', 'console_scripts', 'scrapy')()
  File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 339, in load_entry_point
    return False    # egg isn't macosx or legacy darwin
  File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 2470, in load_entry_point
    return self.__dep_map
  File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 2184, in load
    part = replace(part,part)
  File "/usr/lib/python2.7/site-packages/scrapy/cmdline.py", line 9, in <module>
    from scrapy.crawler import CrawlerProcess
  File "/usr/lib/python2.7/site-packages/scrapy/crawler.py", line 7, in <module>
    from twisted.internet import reactor, defer
  File "/usr/lib64/python2.7/site-packages/twisted/internet/reactor.py", line 38, in <module>
    from twisted.internet import default
  File "/usr/lib64/python2.7/site-packages/twisted/internet/default.py", line 56, in <module>
    install = _getInstallFunction(platform)
  File "/usr/lib64/python2.7/site-packages/twisted/internet/default.py", line 44, in _getInstallFunction
    from twisted.internet.epollreactor import install
  File "/usr/lib64/python2.7/site-packages/twisted/internet/epollreactor.py", line 24, in <module>

阅读全文>>

标签: python pip scrapy twisted

评论(0) 浏览(11780)

Powered by emlog 沪ICP备2023034538号-1