co`i blog

just another trash

Kết quả benchmark memcacheq

written by root, on 4/16/10 5:17 PM.

Xem thông tin về memcacheq tại http://memcachedb.org/memcacheq/


Base để build hệ thống là Gentoo 64bits (Xeon 3.2Ghz, 4GB RAM) với các thông số:
CFLAGS="-O2 -pipe -march=athlon64 -fforce-addr"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"

Các bạn có thể đọc theo cách INSTALL tại trang chủ của memcacheq. Đối với Gentoo, kiểm tra các gói sau:
Server10 ~ # emerge -pv libevent db

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R   ] dev-libs/libevent-1.4.13  0 kB
[ebuild     U ] sys-libs/db-4.8.26 [4.8.24] USE="-doc -java -nocxx -tcl -test" 22,362 kB

Total: 2 packages (1 upgrade, 1 reinstall), Size of downloads: 22,362 kB

Sau đó compile theo như hướng dẫn:
Server10 ~ # cd /usr/src
Server10 src # wget http://memcacheq.googlecode.com/files/memcacheq-0.2.0.tar.gz
Server10 src # tar xfz memcacheq-0.2.0.tar.gz
Server10 src # cd memcacheq-0.2.0
Server10 memcacheq-0.2.0 # ./configure --prefix=/usr/local/memcacheq --enable-threads
Server10 memcacheq-0.2.0 # make
Server10 memcacheq-0.2.0 # make install

Ở đây, tôi sử dụng thư mục data nằm tại: /data
Tôi có tweak một số thông số BerkeleyDB cho phù hợp bằng cách tạo file DB_CONFIG nằm trong /data với nội dung sau:
set_cachesize 1 500 0
set_lg_regionmax 64000000
set_lg_bsize 7680000
* Đọc thêm về các thông số:
set_cachesize
set_lg_regionmax
set_lg_bsize


Chạy memcacheq với thông số:
/usr/local/memcache/bin/memcacheq -r -H /data -N -R -v -L 1024 -B 1280 -u root -p 29000 -c 30000 -m 128MB -U 29000 -t 4 -C 1m -T 15 -S 15 -d

Thông tin về các tham số, các bạn tự tìm hiểu nhé.

Benchmark với PHP (môi trường thực tế)
Cài đặt module memcache cho PHP.
Server11 ~ # emerge -pv dev-php5/pecl-memcache

Ở đây, tôi dùng 2 script
Script đầu tiên là consumer.php có nhiệm vụ đọc và marked data được đưa vào (tuy vậy tôi không xóa)
<?php
set_time_limit (0);
$memcache_obj = memcache_connect('Server10', 29000);
$i = 0;
while (1) {
        memcache_get($memcache_obj, 'demoqueuea')."\n";
        //usleep(1000);
}
memcache_close($memcache_obj);
?>

Script thứ 2 là give.php, có nhiệm vụ ghi data vào. Mỗi lần chạy sẽ ghi 1 triệu record.
<?php
$bgtime = time();
$memcache_obj = memcache_connect('Server10', 29000);
$i = 0;
while ($i < 1000000) {
        memcache_set($memcache_obj, 'demoqueuea', 'message body here-'.$data.'-'.$i, 0, 0);
        $i = $i + 1;
}
memcache_close($memcache_obj);
echo "Execute time: ".(time()-$bgtime);
?>

Đầu tiên ta khởi tạo consumer.php chạy nền.
Server11 ~ # nohup php consumer.php > consumer.log 2>&1 &

Thử với 1 process.
Server11 ~ #  cat mass.sh
#!/bin/bash
        for i in `seq 1 10`;
        do
                php give.php >> test.log
        done
Server11 ~ # /bin/bash ./mass.sh

Kiểm tra test.log để có kết quả.
Tương tự vậy với 2, 4 process.
Server11 ~ #  cat mass4.sh
#!/bin/bash
        for i in `seq 1 10`;
        do
                php give.php >> test4.log&
                php give.php >> test4.log&
                php give.php >> test4.log&
                php give.php >> test4.log
        done
Server11 ~ # /bin/bash ./mass.sh



Kết quả nhận được:

Hình: Bảng so sánh.


Hình: Kết quả với 1 và 2 thread.


Hình: Kết quả với 4 thread.

Comments

  • thank, mr quan, ket qua thuc nghiem rat chi tiet cu the va rat chuyen nghiem, hi vong co nhieu thoi gian ranh de co them nhieu bai viet huu ich nua.

    Comment by nhancm — 7/29/10 12:27 PM | # - re

  • Hi nhancm,

    Tren thuc te doi voi ket qua test nhu vay, minh chua that su hai long va ti le loi sinh ra qua lon. Loi mot phan do php khong support scale lon. Trong moi truong thuc te minh su dung python de lam consumer & giver.

    Comment by root — 8/27/10 8:55 PM | # - re

Leave a Reply