Sharing

2012年6月19日 星期二

Centos 設定 筆記

Build Python 2.7.3 on Centos 5.7

http://toey.tc20.net/2010/08/04/install-python-2-7-gevent-on-centos-5-x86_64/

CentOS 預設安裝的是 Python 2.4, 實在是太老了...

[root@centos ~]$ yum install gcc gcc-c++.x86_64 compat-gcc-34-c++.x86_64 openssl-devel.x86_64 zlib*.x86_64
[root@centos ~]$ wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
[root@centos ~]$ tar xzvf Python-2.7.3.tgz
[root@centos ~]$ cd Python-2.7.3
[root@centos Python-2.7.3]$ ./configure --prefix=/opt/python27
[root@centos Python-2.7.3]$ make
[root@centos Python-2.7.3]$ make install

安裝要一陣子, 好了之後要設定環境路徑

[root@centos ~]$ cat ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

# 把 /opt/python27/bin 加上去
PATH=$PATH:$HOME/bin:/opt/python27/bin

export PATH
unset USERNAME

[root@centos ~]$ source ~/.bash_profile
[root@centos ~]$ echo "/opt/python27/lib" > /etc/ld.so.conf.d/python27.conf
[root@centos ~]$ ldconfig

接下來把 setuptools 也裝上去, 你就可以安裝其它所有的 project 了

[root@centos ~]$ wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
[root@centos ~]$ sh setuptools-0.6c11-py2.7.egg

裝好後, 你會發現在 /opt/python27/bin/ 下有一個 easy_install-2.7, 你可以用它來裝其它 package, 以 pip 為例

[root@centos ~]$ easy_install-2.7 pip
Searching for pip
Reading http://pypi.python.org/simple/pip/
Reading http://pip.openplans.org
Reading http://www.pip-installer.org
Best match: pip 1.1
Downloading http://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#md5=62a9f08dd5dc69d76734568a6c040508
Processing pip-1.1.tar.gz
Running pip-1.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-fchPYD/pip-1.1/egg-dist-tmp-ztv_Wk
warning: no files found matching '*.html' under directory 'docs'
warning: no previously-included files matching '*.txt' found under directory 'docs/_build'
no previously-included directories found matching 'docs/_build/_sources'
Adding pip 1.1 to easy-install.pth file
Installing pip script to /opt/python27/bin
Installing pip-2.7 script to /opt/python27/bin

Installed /opt/python27/lib/python2.7/site-packages/pip-1.1-py2.7.egg
Processing dependencies for pip
Finished processing dependencies for pip

要記得執行程式要用 python2.7

[root@centos  ~]$ python2.7
Python 2.7.3 (default, Jun 19 2012, 11:11:42)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-52)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>


2012年6月16日 星期六

RabbitMQ & ZeroMQ 筆記



http://wiki.python.org/moin/ParallelProcessing

ZMQ
http://learning-0mq-with-pyzmq.readthedocs.org/en/latest/index.html
http://zeromq.github.com/pyzmq/index.html
http://zguide.zeromq.org/
http://www.slideshare.net/fcrippa/europycon2011-implementing-distributed-application-using-zeromq
http://blog.garambrogne.net/post/2010/10/23/simple-python-work-queue-with-zeromq

ZMQ & Openstack
http://eric.windisch.us/2012/04/18/openstack-nova-distributed-rpc-with-zeromq/

RabbitMQ
http://www.rabbitmq.com/tutorials/tutorial-one-python.html
http://nathanborror.com/posts/2009/may/20/working-django-and-rabbitmq/
http://blog.springsource.org/2010/08/19/building-rabbitmq-apps-using-python/
http://www.laurentluce.com/posts/distributed-messaging-using-rabbitmq-and-python/


compare

http://stackoverflow.com/questions/731233/activemq-or-rabbitmq-or-zeromq-or
http://bhavin.directi.com/selecting-a-message-queue-amqp-or-zeromq/
http://www.maartendamen.com/2011/10/byebye-rabbitmq-hello-0mq/
http://mikehadlow.blogspot.tw/2011/04/message-queue-shootout.html
http://lists.openamq.org/pipermail/openamq-dev/2010-March/001598.html

Kombu
http://packages.python.org/kombu/introduction.html


Clery
http://celery.readthedocs.org/en/latest/index.html
http://digitheadslabnotebook.blogspot.tw/2010/10/message-queues-with-python.html


兩個都看完後, 覺得 ZeroMQ 取錯了名字, 而且這兩個不應該放在一起比較

RabbitMQ 是完整的 Message Queue, 有 Broker, 如果你希望你的 Message 有個中控中心, 以確保即使當你沒空時, 所有的訊息都還是能夠保留起來, 那就可以應該考慮使用 RabbitMQ/ActiveMQ/Qpid, 所以當你使用 AMQP 架構下的產品時, 你一定會有個收發中心, 必須煩惱這個收發中心該放在那邊, 會不會死掉之類的問題.

但 ZeroMQ 他只是高級的 Socket Library, 他沒有實作收發中心, 如果你的訊息是屬於丟掉也沒什麼關係, 而且可能會很大量的狀況下 (ex: log) , 就應該考慮 ZeroMQ, 因為他是點對點的通訊, network latency 會降到最低.  所以其實網路上也有人把 RabbitMQ 內部的溝通改寫成使用 ZeroMQ 來做, 兩個實作的 scope 是不一樣的! 拿來一起比較的確會怪怪的, 但只能怪 ZeroMQ 的作者太想要挑戰 AMQP , 故意把名字取的很類似, 硬是要大家拿來比較.

RabbitMQ 主要是用 Erlang 實作, Kombu 則是架在這之上的 Python Message Framework, 底下除了可以接 RabbitMQ 之外, 也可以直接把回傳的結果寫到 Database, 而 Clery 則又是架在 Kombu 之上的 Python RPC

ZeroMQ 方面, pyzmq 是他的 python binding 不過還很新, 功能沒有像 kombu 這麼齊全, 所以也還稱不上是 Message Framework. 如果真的很中意 ZeroMQ 這樣輕量級的設計的人, 可能還要再等等, 目前 RabbitMQ 的發展還是比較齊全


iperf 筆記


其實就一個網址而己, 內容很完整

http://benjr.tw/node/369


KVM Guest with virtio network driver loses network connectivity


最近開始使用 Ubuntu 12.04, Kernel 是 3.2.0, 但發現如果用這版來裝的 VM, 會三不五時遇到網路斷掉的狀況, 系統沒有 Crash, 也只要重啟網路就可以繼續使用, 但老是這樣, 總是讓人感到不方便, 而且後來發現只要流量一大就會發生這個問題, 那影響就很大了. 找了一下網路, 發現這個問題也很多人 遇到, 似乎是 KVM 的 virtio 有 bug.

http://www.mail-archive.com/kvm@vger.kernel.org/msg68530.html

一路測到 3.2.0-26 , 這個問題也都還存在


virsh # version
Compiled against library: libvir 0.9.8
Using library: libvir 0.9.8
Using API: QEMU 0.9.8
Running hypervisor: QEMU 1.0.0

目前有找到兩個暫解

1. turn off event_idx parameter in qemu driver for virtio
  
       a. use libvirt xml
         
             
         

       b. use kvm command
          -device virtio-net-pci,event_idx=off
 
2. turn on vhost

       a. use libvirt
          modprobe vhost_net
          service libvirtd restart
          restart your vm

       b. use kvm command
          -netdev tap,vhost=on

兩個方案都是可行的, 不過第二個方案看起來是比較好的選擇, 因為根據文件還可以加強 Performance. 我用 iperf 測試的結果, 如果是從 vm 從資料到 host 端, 可以達到 13Gbits/sec, 如果不用 virtio, 預設的網卡設定, 大概都只有 150 Mbits/sec, 實在是很慢

另外補上 KVM 的 tuning 網頁

如果是用 virt-install, 可以加上以下幾個參數, 做的事情其實是和上面那篇一樣
-v
--cpu host
--disk bus=virtio,cache=writeback 
--accelerate
--network model=virtio

產生的指令會類似下面
kvm -S -M pc-1.0 -cpu core2duo,+lahf_lm,+rdtscp,+pdpe1gb,+aes,+popcnt,+sse4.2,+sse4.1,+dca,+xtpr,+cx16,+tm2,+est,+vmx,+ds_cpl,+pbe,+tm,+ht,+ss,+acpi,+ds -enable-kvm -m 8192 -smp 1,sockets=1,cores=1,threads=1 -name iscsi-server4 -uuid 035b0292-5866-ddac-e088-4cfd04f8af93 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/iscsi-server4.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -drive file=iscsi-server4.qcow2,if=none,id=drive-virtio-disk0,format=qcow2,cache=writeback -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -netdev tap,fd=23,id=hostnet0,vhost=on,vhostfd=24 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:1c:9d:f0,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -usb -vnc 0.0.0.0:5 -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5





2012年6月3日 星期日

SSD Tuning 筆記



最近常常要調校 SSD 的 Performance,   系統裡面有滿多可以設定的, 不過我對 Linux 還是個大外行, 只能收集一堆文章來看囉~


基本知識
http://doc.opensuse.org/products/draft/SLES/SLES-tuning_sd_draft/cha.tuning.io.html
http://www.wmduszyk.com/wp-content/uploads/2011/01/PE23_Braden_Nasypany.pdf
http://www-03.ibm.com/support/techdocs/atsmastr.nsf/WebIndex/TD105745
http://xtremstorage.wordpress.com/2011/04/28/ssd-benchmarking-and-performance-tuning-pitfalls-and-recommendations/

Queue size 的設定
http://yoshinorimatsunobu.blogspot.tw/2009/04/linux-io-scheduler-queue-size-and.html

      Increasing queue size does not have any effect on SSD because no disk seek happens.

Alignment 及 Scheduler 的設定
http://spiralofhope.com/partition-alignment.html

      [5] noop
               Good if you only use SSDs.
      [6] deadline
               The best choice for mixed SSDs and HDDs.

read_ahead_kb 的設定

http://www.fhgfs.com/wiki/wikka.php?wakka=ServerTuning
        echo 4096 > /sys/block/sdX/queue/read_ahead_kb 
        echo 4096 > /sys/block/sdX/queue/nr_requests 



LSI RAID card 設定
http://kb.lsi.com/KnowledgebaseArticle16607.aspx
   
        上面有提到的這篇幾乎都有提到

補充

  • Make the change "permanent" by editing /etc/rc.local and adding the echo line. 


  • If you use GRUB, you can edit /boot/grub/menu.lst and append elevator=deadline to the kernel line that you normally boot up with.
    • kernel (hd0,5)/boot/vmlinuz BOOT_IMAGE=foo root=UUID=foo elevator=deadline

其它
http://lwn.net/Articles/408428/


結論

目前 Ubuntu 12.04 預設


Parameter
Value
/sys/block/$dev/queue/rotational
1
/sys/block/$dev/queue/nr_requests
128
/sys/block/$dev/device/queue_depth
256
/sys/block/$dev/queue/scheduler
cfg


個人的實驗經驗下來,  scheduler  (deadline) 以及 ratational (0) 這兩個影響最大, 設定了之後都可以單顆 SSD 都可以得到 20%+ 的改善, 如果原本是  RAID0/1/5 的狀況下, 甚至可以有  70%+ 的改善. nr_request 及 queue_depth 可以設定大一點的值, 但不一定有很明顯的改善.