บทความนี้ขอแสดงวิธีการคอมไพล์โปรแกรม sysbench บน Solaris 10 (x86) เพื่อใช้วัดประสิทธิภาพเปรียบเทียบกับ Fedora 10
ในที่นี้ขอใช้แค่เวอร์ชั่น 0.4.10 และเลือกไม่คอมไพล์รวม mysql เพื่อความง่ายในการคอมไพล์และทดสอบ เพราะการที่จะคอมไพล์ sysbench เวอร์ชั่นใหม่กว่านี้ จะติดปัญหาหลายๆ อย่าง เช่นดาวน์โหลดโปรแกรม library มาติดตั้งเพิ่มเติม เพื่อแก้ไขปัญหา libtool ที่มีการเปลี่ยนแปลงได้ อย่างไรก็ตามเรายังสามารถนำผลที่ได้มาเปรียบเทียบแบบคร่าวๆ เพราะวิธีการ benchmark ยังคงเป็นรูปแบบเดียวกัน
ดาวน์โหลดไฟล์
เลือกดาวน์โหลดเวอร์ชั่น 0.4.10 จากเว็บไซต์ Download sysbench – SourceForge.net: System performance benchmark: Files
แตกไฟล์ (extract) ใน /usr/local/src/
โปรแกรมที่นำมาคอมไพล์และติดตั้งเอง แนะนำให้ไว้ใน /usr/local/ เพราะเวลาปรับปรุง หรือติดตั้งใหม่ จะได้สะดวกต่อการอ้างอิงและค้นหา ในที่นี้จะไว้ใน /usr/local/src/ เพื่อเก็บ source file และไฟล์ที่ใช้ระหว่างการคอมไพล์โปรแกรม
# mkdir -p /usr/local/src # cd /usr/local/src/ # ls -l total 928 -rw-r--r-- 1 user1 other 463936 May 23 22:11 sysbench-0.4.10.tar.gz
ใช้คำสั่ง gzip และ tar เพื่อแตกไฟล์
# gzip -dv sysbench-0.4.10.tar.gz sysbench-0.4.10.tar.gz: 78.9% -- replaced with sysbench-0.4.10.tar
# tar xvf sysbench-0.4.10.tar x sysbench-0.4.10, 0 bytes, 0 tape blocks x sysbench-0.4.10/doc, 0 bytes, 0 tape blocks x sysbench-0.4.10/doc/manual.html, 0 bytes, 0 tape blocks x sysbench-0.4.10/doc/manual.xml, 36255 bytes, 71 tape blocks x sysbench-0.4.10/doc/Makefile.am, 672 bytes, 2 tape blocks x sysbench-0.4.10/doc/xsl, 0 bytes, 0 tape blocks x sysbench-0.4.10/doc/xsl/xhtml.xsl, 486 bytes, 1 tape blocks x sysbench-0.4.10/doc/xsl/catalog.xml.in, 729 bytes, 2 tape blocks x sysbench-0.4.10/doc/xsl/xhtml-chunk.xsl, 1815 bytes, 4 tape blocks ... ... ... x sysbench-0.4.10/sysbench/Makefile.in, 21292 bytes, 42 tape blocks x sysbench-0.4.10/COPYING, 17992 bytes, 36 tape blocks x sysbench-0.4.10/install-sh, 7122 bytes, 14 tape blocks x sysbench-0.4.10/configure, 818532 bytes, 1599 tape blocks x sysbench-0.4.10/Makefile.am, 800 bytes, 2 tape blocks x sysbench-0.4.10/configure.ac, 5477 bytes, 11 tape blocks x sysbench-0.4.10/INSTALL, 9240 bytes, 19 tape blocks x sysbench-0.4.10/Makefile.in, 21039 bytes, 42 tape blocks x sysbench-0.4.10/ChangeLog, 9329 bytes, 19 tape blocks x sysbench-0.4.10/acinclude.m4, 16599 bytes, 33 tape blocks
ใช้คำสั่ง cd เข้าไปในไดเร็คทอรี ใช้คำสั่ง ls เพื่อดูไฟล์
# cd sysbench-0.4.10 # ls COPYING Makefile.am TODO autogen.sh configure.ac missing ChangeLog Makefile.in acinclude.m4 config doc mkinstalldirs INSTALL README aclocal.m4 configure install-sh sysbench
รัน ./configure
แล้วรัน ./configure (ไม่เลือกคอมไพล์ mysql) เพื่อตรวจสอบไฟล์ต่างๆ ที่จำเป็นในการคอนไพล์โปรแกรม และสร้าง Makefile สำหรับคอมไพล์โปรแกรม
# ./configure --without-mysql
checking build system type... i386-pc-solaris2.10
checking host system type... i386-pc-solaris2.10
checking target system type... i386-pc-solaris2.10
checking for a BSD-compatible install... config/install-sh -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... config/install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... nawk
checking whether make sets $(MAKE)... no
checking whether to compile with MySQL support... (cached) no
checking whether to compile with Oracle support... (cached) no
checking whether to compile with PostgreSQL support... (cached) no
checking for style of include used by make... none
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.
#
มี error เกิดขึ้น เหตุเพราะ ./configure ไม่สามารถหา gcc compiler ใน PATH ได้
ตรวจสอบ PATH ที่ใช้อยู่
# echo $PATH /usr/sbin:/usr/bin
จากการติดตั้ง Solaris 10 จะมี gcc compiler มาให้อยู่แล้วแต่อยู่ใน /usr/sfw/bin เราจำเป็นต้องเพิ่ม PATH นี้เข้าไป
วิธีการเพิ่ม /usr/sfw/bin เข้าไปใน PATH
# PATH=$PATH:/usr/sfw/bin
# echo $PATH
/usr/sbin:/usr/bin:/usr/sfw/bin
หมายเหตุ โปรดสังเกตการใช้เครื่องหมาย $ ในการกำหนดค่าตัวแปร
รัน ./configure อีกครั้ง หลังจากเพิ่ม PATH /usr/sfw/bin
# ./configure --without-mysql checking build system type... i386-pc-solaris2.10 checking host system type... i386-pc-solaris2.10 checking target system type... i386-pc-solaris2.10 checking for a BSD-compatible install... config/install-sh -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... config/install-sh -c -d checking for gawk... no checking for mawk... no checking for nawk... nawk checking whether make sets $(MAKE)... no checking whether to compile with MySQL support... (cached) no checking whether to compile with Oracle support... (cached) no checking whether to compile with PostgreSQL support... (cached) no checking for style of include used by make... none checking for gcc... gcc ... ... ... configure: creating ./config.status config.status: creating Makefile config.status: creating doc/xsl/Makefile config.status: creating doc/xsl/catalog.xml config.status: creating doc/Makefile config.status: creating sysbench/Makefile config.status: creating sysbench/drivers/Makefile config.status: creating sysbench/drivers/mysql/Makefile config.status: creating sysbench/drivers/oracle/Makefile config.status: creating sysbench/drivers/pgsql/Makefile config.status: creating sysbench/tests/Makefile config.status: creating sysbench/tests/cpu/Makefile config.status: creating sysbench/tests/fileio/Makefile config.status: creating sysbench/tests/memory/Makefile config.status: creating sysbench/tests/threads/Makefile config.status: creating sysbench/tests/mutex/Makefile config.status: creating sysbench/tests/oltp/Makefile config.status: creating config/config.h config.status: executing depfiles commands
ไม่มี error จากการรัน ./configure
รัน make
รัน make เพื่อเริ่มคอมไฟล์โปรแกรม
# make
make: not found
ไม่สามารถรัน make ได้ เพราะหาคำสั่ง make ไม่พบ “make: not found”
เหตุเพราะคำสั่ง make อยู่ในอีก PATH คือ /usr/ccs/bin ต้องเพิ่มเข้าไปใน PATH อีก
# echo $PATH /usr/sbin:/usr/bin:/usr/sfw/bin
# PATH=$PATH:/usr/ccs/bin
# echo $PATH
/usr/sbin:/usr/bin:/usr/sfw/bin:/usr/ccs/bin
รัน make อีกครั้ง
# make Making all in doc Making all in xsl Making all in sysbench Making all in drivers Making all in tests Making all in cpu source='sb_cpu.c' object='libsbcpu_a-sb_cpu.o' libtool=no \ DEPDIR=.deps depmode=none /bin/bash ../../../config/depcomp \ gcc -DHAVE_CONFIG_H -I. -I../../../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -D_REENTRANT -g -O2 -c -o libsbcpu_a-sb_cpu.o `test -f 'sb_cpu.c' || echo './'`sb_cpu.c rm -f libsbcpu.a false cru libsbcpu.a libsbcpu_a-sb_cpu.o *** Error code 255 make: Fatal error: Command failed for target `libsbcpu.a' Current working directory /usr/local/src/sysbench-0.4.10/sysbench/tests/cpu *** Error code 1 The following command caused the error: failcom='exit 1'; \ for f in x $MAKEFLAGS; do \ case $f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo all-recursive | sed s/-recursive//`; \ list='cpu fileio memory threads mutex oltp'; for subdir in $list; do \ echo "Making $target in $subdir"; \ if test "$subdir" = "."; then \ dot_seen=yes; \ local_target="$target-am"; \ else \ local_target="$target"; \ fi; \ (cd $subdir && make $local_target) \ || eval $failcom; \ done; \ if test "$dot_seen" = "no"; then \ make "$target-am" || exit 1; \ fi; test -z "$fail" make: Fatal error: Command failed for target `all-recursive' Current working directory /usr/local/src/sysbench-0.4.10/sysbench/tests *** Error code 1 The following command caused the error: failcom='exit 1'; \ for f in x $MAKEFLAGS; do \ case $f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo all-recursive | sed s/-recursive//`; \ list='drivers tests .'; for subdir in $list; do \ echo "Making $target in $subdir"; \ if test "$subdir" = "."; then \ dot_seen=yes; \ local_target="$target-am"; \ else \ local_target="$target"; \ fi; \ (cd $subdir && make $local_target) \ || eval $failcom; \ done; \ if test "$dot_seen" = "no"; then \ make "$target-am" || exit 1; \ fi; test -z "$fail" make: Fatal error: Command failed for target `all-recursive' Current working directory /usr/local/src/sysbench-0.4.10/sysbench *** Error code 1 The following command caused the error: failcom='exit 1'; \ for f in x $MAKEFLAGS; do \ case $f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo all-recursive | sed s/-recursive//`; \ list='doc sysbench'; for subdir in $list; do \ echo "Making $target in $subdir"; \ if test "$subdir" = "."; then \ dot_seen=yes; \ local_target="$target-am"; \ else \ local_target="$target"; \ fi; \ (cd $subdir && make $local_target) \ || eval $failcom; \ done; \ if test "$dot_seen" = "no"; then \ make "$target-am" || exit 1; \ fi; test -z "$fail" make: Fatal error: Command failed for target `all-recursive'
การรัน make ยังมี error อยู่หลายจุด แปลว่า คอมไพล์โปรแกรมไม่สำเร็จ
ลองรัน ./configure ใหม่อีกครั้ง แล้วค่อยรัน make
# ./configure --without-mysql checking build system type... i386-pc-solaris2.10 checking host system type... i386-pc-solaris2.10 checking target system type... i386-pc-solaris2.10 checking for a BSD-compatible install... config/install-sh -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... config/install-sh -c -d checking for gawk... no checking for mawk... no checking for nawk... nawk checking whether make sets $(MAKE)... yes checking whether to compile with MySQL support... (cached) no checking whether to compile with Oracle support... (cached) no checking whether to compile with PostgreSQL support... (cached) no checking for style of include used by make... GNU checking for gcc... gcc ... ... ... configure: creating ./config.status config.status: creating Makefile config.status: creating doc/xsl/Makefile config.status: creating doc/xsl/catalog.xml config.status: creating doc/Makefile config.status: creating sysbench/Makefile config.status: creating sysbench/drivers/Makefile config.status: creating sysbench/drivers/mysql/Makefile config.status: creating sysbench/drivers/oracle/Makefile config.status: creating sysbench/drivers/pgsql/Makefile config.status: creating sysbench/tests/Makefile config.status: creating sysbench/tests/cpu/Makefile config.status: creating sysbench/tests/fileio/Makefile config.status: creating sysbench/tests/memory/Makefile config.status: creating sysbench/tests/threads/Makefile config.status: creating sysbench/tests/mutex/Makefile config.status: creating sysbench/tests/oltp/Makefile config.status: creating config/config.h config.status: executing depfiles commands
# make Making all in doc Making all in xsl Making all in sysbench Making all in drivers Making all in tests Making all in cpu gcc -DHAVE_CONFIG_H -I. -I../../../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../../../sysbench -D_REENTRANT -g -O2 -MT libsbcpu_a-sb_cpu.o -MD -MP -MF .deps/libsbcpu_a-sb_cpu.Tpo -c -o libsbcpu_a-sb_cpu.o `test -f 'sb_cpu.c' || echo './'`sb_cpu.c mv -f .deps/libsbcpu_a-sb_cpu.Tpo .deps/libsbcpu_a-sb_cpu.Po rm -f libsbcpu.a ar cru libsbcpu.a libsbcpu_a-sb_cpu.o ranlib libsbcpu.a Making all in fileio ... ... ... gcc -DHAVE_CONFIG_H -I. -I../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../sysbench -D_REENTRANT -g -O2 -MT sb_logger.o -MD -MP -MF .deps/sb_logger.Tpo -c -o sb_logger.o sb_logger.c mv -f .deps/sb_logger.Tpo .deps/sb_logger.Po gcc -DHAVE_CONFIG_H -I. -I../config -D_REENTRANT -D_XOPEN_SOURCE=500 -D_GNU_SOURCE -I../sysbench -D_REENTRANT -g -O2 -MT db_driver.o -MD -MP -MF .deps/db_driver.Tpo -c -o db_driver.o db_driver.c mv -f .deps/db_driver.Tpo .deps/db_driver.Po /bin/bash ../libtool --tag=CC --mode=link gcc -D_REENTRANT -g -O2 -lumem -o sysbench sysbench.o sb_timer.o sb_options.o sb_logger.o db_driver.o tests/fileio/libsbfileio.a tests/threads/libsbthreads.a tests/memory/libsbmemory.a tests/cpu/libsbcpu.a tests/oltp/libsboltp.a tests/mutex/libsbmutex.a -lrt -lm mkdir .libs gcc -D_REENTRANT -g -O2 -o sysbench sysbench.o sb_timer.o sb_options.o sb_logger.o db_driver.o -lumem tests/fileio/libsbfileio.a tests/threads/libsbthreads.a tests/memory/libsbmemory.a tests/cpu/libsbcpu.a tests/oltp/libsboltp.a tests/mutex/libsbmutex.a -lrt -lm
เรียบร้อย รัน make แล้วไม่มี error
รัน make install
ถ้ารัน make แล้ว ไม่มีข้อความ error แสดงว่าโปรแกรมคอมไพล์สำเร็จ สามารถใช้คำสั่ง make install เพื่อติดตั้งไฟล์ได้ โดยดีฟอลต์ โปรแกรมที่คอมไฟล์เองจะติดตั้งไฟล์ไว้ใน /usr/local/
# make install Making install in doc Making install in xsl test -z "/usr/local/share/doc/sysbench" || ../config/install-sh -c -d "/usr/local/share/doc/sysbench" ../config/install-sh -c -m 644 'manual.html' '/usr/local/share/doc/sysbench/manual.html' Making install in sysbench Making install in drivers Making install in tests Making install in cpu Making install in fileio Making install in memory Making install in threads Making install in mutex Making install in oltp Making install in . test -z "/usr/local/bin" || ../config/install-sh -c -d "/usr/local/bin" /bin/bash ../libtool --mode=install ../config/install-sh -c 'sysbench' '/usr/local/bin/sysbench' ../config/install-sh -c sysbench /usr/local/bin/sysbench
# ls -l /usr/local/bin total 400 -rwxr-xr-x 1 root root 195312 May 23 23:17 sysbench
รัน CPU Benchmark
เพิ่ม PATH /usr/local/bin ไว้สำหรับรันโปรแกรม
# PATH=$PATH:/usr/local/bin
# echo $PATH
/usr/sbin:/usr/bin:/usr/sfw/bin:/usr/ccs/bin:/usr/local/bin
ทดลองรัน sysbench เพื่อทดสอบ CPU Benchmark บน Solaris
# sysbench --test=cpu --cpu-max-prime=20000 run sysbench 0.4.10: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 1
Doing CPU performance benchmark
Threads started! Done.
Maximum prime number checked in CPU test: 20000
Test execution summary:
total time: 44.6483s
total number of events: 10000
total time taken by event execution: 44.6394
per-request statistics:
min: 4.26ms
avg: 4.46ms
max: 12.42ms
approx. 95 percentile: 4.80ms
Threads fairness: events (avg/stddev): 10000.0000/0.00 execution time (avg/stddev): 44.6394/0.00