คอมไพล์ sysbench บน Solaris 10 (x86)

บทความนี้ขอแสดงวิธีการคอมไพล์โปรแกรม 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

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.