co`i blog

just another trash

Entries tagged “vng”

Kết quả benchmark memcacheq

written by co`i , 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.