Kết quả benchmark memcacheq
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ố:
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:
Sau đó compile theo như hướng dẫn:
Ở đâ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:
* Đọ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ố:
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.
Ở đâ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)
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.
Đầu tiên ta khởi tạo consumer.php chạy nền.
Thử với 1 process.
Kiểm tra test.log để có kết quả.
Tương tự vậy với 2, 4 process.
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.
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
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.