LINUX.ORG.RU
ФорумAdmin

Сравнение производительности php: FreeBSD vs Gentoo Linux

 


7

8

Доброго времени суток,

Имеется два идентичных сервера: Xeon E3-1270v2, 32Gb RAM, RAID10. На одном из них стоит Gentoo Linux запиленная под железо, на другом FreeBSD 10-STABLE. Стало интересно сравнить производительность фри c Linux-ом на типичных серверных задачах: nginx+uwsgi_php55, mariadb-galera, redis. Все кроме php работает замечательно. По результатам теста, php под FreeBSD жрет на 30% больше проца и при этом существенно проигрывает в скорости по сравнению с Linux-ом. Сразу скажу, что на обеих ОСях php собран одной версией компилятора, одинаковыми модулями и с теми же CFLAGS. Прослойка uwsgi никакого влияния не оказывает, пробовал php-fpm - результат тот же. В сетевом стеке или nginx затыка тоже нет (настройки nginx одинаковые). Для уверенности в этом, результат выполнения скрипта клал в htm файл и тащил по сети в 16 потоков, трафик забил гигобитный линк до отказа. Скорость отдачи статики через nginx практически одинаковые на обеих серверах. В итоге получилось, что на Linux php скрипт (банальный phpinfo()) выполнился за 1 msec, а на фре примерно за 8 msec. Ниже трейсы с временными метками.

Gentoo Linux:

12:46:32.578393 accept4(6, {sa_family=AF_INET, sin_port=htons(59528), sin_addr=inet_addr("192.168.3.7")}, [16], SOCK_NONBLOCK) = 10
12:46:32.578527 read(10, "\0167\2\0\17\0SCRIPT_FILENAME+\0/home/htt"..., 4100) = 574
12:46:32.578678 lstat("/home", {st_mode=S_IFDIR|0755, st_size=256, ...}) = 0
12:46:32.578779 lstat("/home/httpd", {st_mode=S_IFDIR|0755, st_size=80, ...}) = 0
12:46:32.578917 lstat("/home/httpd/www", {st_mode=S_IFDIR|0755, st_size=120, ...}) = 0
12:46:32.578966 lstat("/home/httpd/www/system", {st_mode=S_IFDIR|0755, st_size=208, ...}) = 0
12:46:32.579035 lstat("/home/httpd/www/system/web", {st_mode=S_IFDIR|0755, st_size=440, ...}) = 0
12:46:32.579078 stat("/home/httpd/www/system/web", {st_mode=S_IFDIR|0755, st_size=440, ...}) = 0
12:46:32.579124 lstat("/home", {st_mode=S_IFDIR|0755, st_size=256, ...}) = 0
12:46:32.579161 lstat("/home/httpd", {st_mode=S_IFDIR|0755, st_size=80, ...}) = 0
12:46:32.579177 lstat("/home/httpd/www", {st_mode=S_IFDIR|0755, st_size=120, ...}) = 0
12:46:32.579225 lstat("/home/httpd/www/system", {st_mode=S_IFDIR|0755, st_size=208, ...}) = 0
12:46:32.579261 lstat("/home/httpd/www/system/web", {st_mode=S_IFDIR|0755, st_size=440, ...}) = 0
12:46:32.579296 lstat("/home/httpd/www/system/web/info.php", {st_mode=S_IFREG|0644, st_size=20, ...}) = 0
12:46:32.579321 stat("/home/httpd/www/system/web/info.php", {st_mode=S_IFREG|0644, st_size=20, ...}) = 0
12:46:32.579373 setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={60, 0}}, NULL) = 0
12:46:32.579417 rt_sigaction(SIGPROF, {0x7f67b9b1a0b0, [PROF], SA_RESTORER|SA_RESTART, 0x3654634d10}, {0x7f67b9b1a0b0, [PROF], SA_RESTORER|SA_RESTART, 0x3654634d10}, 8) = 0
12:46:32.579464 rt_sigprocmask(SIG_UNBLOCK, [PROF], NULL, 8) = 0
12:46:32.579517 lstat("/home/httpd/www/system/web", {st_mode=S_IFDIR|0755, st_size=440, ...}) = 0
12:46:32.579535 lstat("/home/httpd/www/system", {st_mode=S_IFDIR|0755, st_size=208, ...}) = 0
12:46:32.579565 lstat("/home/httpd/www", {st_mode=S_IFDIR|0755, st_size=120, ...}) = 0
12:46:32.579588 lstat("/home/httpd", {st_mode=S_IFDIR|0755, st_size=80, ...}) = 0
12:46:32.579608 lstat("/home", {st_mode=S_IFDIR|0755, st_size=256, ...}) = 0
12:46:32.579627 stat("/home/httpd/www/system/web", {st_mode=S_IFDIR|0755, st_size=440, ...}) = 0
12:46:32.579647 setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={30, 0}}, NULL) = 0
12:46:32.579662 lstat("/home/httpd/www/system/web/info.php", {st_mode=S_IFREG|0644, st_size=20, ...}) = 0
12:46:32.579679 lstat("/home/httpd/www/system/web", {st_mode=S_IFDIR|0755, st_size=440, ...}) = 0
12:46:32.579698 lstat("/home/httpd/www/system", {st_mode=S_IFDIR|0755, st_size=208, ...}) = 0
12:46:32.579715 lstat("/home/httpd/www", {st_mode=S_IFDIR|0755, st_size=120, ...}) = 0
12:46:32.579731 lstat("/home/httpd", {st_mode=S_IFDIR|0755, st_size=80, ...}) = 0
12:46:32.579772 lstat("/home", {st_mode=S_IFDIR|0755, st_size=256, ...}) = 0
12:46:32.579800 stat("/home/httpd/www/system/web/info.php", {st_mode=S_IFREG|0644, st_size=20, ...}) = 0
12:46:32.579816 lstat("/home/httpd/www/system/web/info.php", {st_mode=S_IFREG|0644, st_size=20, ...}) = 0
12:46:32.579831 lstat("/home/httpd/www/system/web", {st_mode=S_IFDIR|0755, st_size=440, ...}) = 0
12:46:32.579864 lstat("/home/httpd/www/system", {st_mode=S_IFDIR|0755, st_size=208, ...}) = 0
12:46:32.579882 lstat("/home/httpd/www", {st_mode=S_IFDIR|0755, st_size=120, ...}) = 0
12:46:32.579899 lstat("/home/httpd", {st_mode=S_IFDIR|0755, st_size=80, ...}) = 0
12:46:32.579917 lstat("/home", {st_mode=S_IFDIR|0755, st_size=256, ...}) = 0
12:46:32.579944 uname({sys="Linux", node="node1", ...}) = 0
12:46:32.581114 write(10, "HTTP/1.1 200 OK\r\nContent-type: t"..., 44) = 44
12:46:32.581141 write(10, "<!DOCTYPE html PUBLIC \"-//W3C//D"..., 95544) = 95544
12:46:32.581178 lstat("/home/httpd/www/system", {st_mode=S_IFDIR|0755, st_size=208, ...}) = 0
12:46:32.581195 lstat("/home/httpd/www", {st_mode=S_IFDIR|0755, st_size=120, ...}) = 0
12:46:32.581213 lstat("/home/httpd", {st_mode=S_IFDIR|0755, st_size=80, ...}) = 0
12:46:32.581232 lstat("/home", {st_mode=S_IFDIR|0755, st_size=256, ...}) = 0
12:46:32.581249 stat("/home/httpd/www/system", {st_mode=S_IFDIR|0755, st_size=208, ...}) = 0
12:46:32.581268 setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0
12:46:32.581298 setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0
12:46:32.581313 open("/proc/self/stat", O_RDONLY) = 13
12:46:32.581333 fstat(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
12:46:32.581369 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f67b87bf000
12:46:32.581390 read(13, "5295 (uwsgi) R 5292 5291 5291 0 "..., 1024) = 309
12:46:32.581415 close(13)               = 0
12:46:32.581435 munmap(0x7f67b87bf000, 4096) = 0
12:46:32.581452 close(10)               = 0
12:46:32.581475 writev(2, [{"{address space usage: 313401344 "..., 78}, {"[pid: 5295|app: -1|req: -1/20] 1"..., 207}], 2) = 285
12:46:32.581516 epoll_wait(8, ^CProcess 5295 detached
 <detached ...>

FreeBSD:

13518: 4.569934535 4.569699769 kevent(7,0x0,0,{0x6,EVFILT_READ,0x0,0,0x1,0x0},1,0x0) = 1 (0x1)
13518: 4.570825352 0.000052122 accept(6,{ AF_INET 192.168.3.8:27225 },0x800751104) = 9 (0x9)
13518: 4.571227700 0.000080451 read(9,"\^N7\^B\0\^O\0SCRIPT_FILENAME+\0"...,4100) = 574 (0x23e)
13518: 4.572505836 0.000127551 lstat("/home",{ mode=drwxr-xr-x ,inode=4,size=6,blksize=4096 }) = 0 (0x0)
13518: 4.572865713 0.000085512 lstat("/home/httpd",{ mode=drwxr-xr-x ,inode=8,size=3,blksize=4096 }) = 0 (0x0)
13518: 4.573190386 0.000084730 lstat("/home/httpd/www",{ mode=drwxr-xr-x ,inode=11,size=7,blksize=4096 }) = 0 (0x0)
13518: 4.573510820 0.000085387 lstat("/home/httpd/www/system",{ mode=drwxr-xr-x ,inode=14,size=8,blksize=4096 }) = 0 (0x0)
13518: 4.573830457 0.000086490 lstat("/home/httpd/www/system/web",{ mode=drwxr-xr-x ,inode=110568,size=15,blksize=4096 }) = 0 (0x0)
13518: 4.574463050 0.000112191 stat("/home/httpd/www/system/web",{ mode=drwxr-xr-x ,inode=110568,size=15,blksize=4096 }) = 0 (0x0)
13518: 4.574776573 0.000074341 lstat("/home",{ mode=drwxr-xr-x ,inode=4,size=6,blksize=4096 }) = 0 (0x0)
13518: 4.575283320 0.000147897 lstat("/home/httpd",{ mode=drwxr-xr-x ,inode=8,size=3,blksize=4096 }) = 0 (0x0)
13518: 4.575610283 0.000083883 lstat("/home/httpd/www",{ mode=drwxr-xr-x ,inode=11,size=7,blksize=4096 }) = 0 (0x0)
13518: 4.575931248 0.000084239 lstat("/home/httpd/www/system",{ mode=drwxr-xr-x ,inode=14,size=8,blksize=4096 }) = 0 (0x0)
13518: 4.576285572 0.000108849 lstat("/home/httpd/www/system/web",{ mode=drwxr-xr-x ,inode=110568,size=15,blksize=4096 }) = 0 (0x0)
13518: 4.576609324 0.000111585 lstat("/home/httpd/www/system/web/info.php",{ mode=-rw-r--r-- ,inode=102419,size=20,blksize=4096 }) = 0 (0x0)
13518: 4.576934252 0.000087095 stat("/home/httpd/www/system/web/info.php",{ mode=-rw-r--r-- ,inode=102419,size=20,blksize=4096 }) = 0 (0x0)
13518: 4.578137551 0.000044300 setitimer(2,{0.000000, 60.000000 },0x0) = 0 (0x0)
13518: 4.578890119 0.000065843 sigprocmask(SIG_SETMASK,SIGHUP|SIGINT|SIGQUIT|SIGILL|SIGTRAP|SIGABRT|SIGEMT|SIGFPE|SIGKILL|SIGBUS|SIGSEGV|SIGSYS|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)
13518: 4.579187695 0.000043938 sigaction(SIGPROF,{ 0x8008c4f10 SA_RESTART|SA_SIGINFO ss_t },{ SIG_DFL SA_RESTART ss_t }) = 0 (0x0)
13518: 4.579462247 0.000041825 sigprocmask(SIG_SETMASK,0x0,0x0) = 0 (0x0)
13518: 4.579911068 0.000042550 sigprocmask(SIG_UNBLOCK,SIGPROF,0x0) = 0 (0x0)
13518: 4.590744228 0.000042902 getpid()		 = 13518 (0x34ce)
13518: 4.591336110 0.000120646 lstat("/home/httpd/www/system/web",{ mode=drwxr-xr-x ,inode=110568,size=15,blksize=4096 }) = 0 (0x0)
13518: 4.591654258 0.000083637 lstat("/home/httpd/www/system",{ mode=drwxr-xr-x ,inode=14,size=8,blksize=4096 }) = 0 (0x0)
13518: 4.591972362 0.000081378 lstat("/home/httpd/www",{ mode=drwxr-xr-x ,inode=11,size=7,blksize=4096 }) = 0 (0x0)
13518: 4.592261019 0.000077203 lstat("/home/httpd",{ mode=drwxr-xr-x ,inode=8,size=3,blksize=4096 }) = 0 (0x0)
13518: 4.592546414 0.000053455 lstat("/home",{ mode=drwxr-xr-x ,inode=4,size=6,blksize=4096 }) = 0 (0x0)
13518: 4.593027172 0.000087156 stat("/home/httpd/www/system/web",{ mode=drwxr-xr-x ,inode=110568,size=15,blksize=4096 }) = 0 (0x0)
13518: 4.593343938 0.000042315 setitimer(2,{0.000000, 30.000000 },0x0) = 0 (0x0)
13518: 4.593741569 0.000111314 lstat("/home/httpd/www/system/web/info.php",{ mode=-rw-r--r-- ,inode=102419,size=20,blksize=4096 }) = 0 (0x0)
13518: 4.594713138 0.000122570 open("/home/httpd/www/system/web/info.php",O_RDONLY,00) = 11 (0xb)
13518: 4.595143348 0.000071575 fstat(11,{ mode=-rw-r--r-- ,inode=102419,size=20,blksize=4096 }) = 0 (0x0)
13518: 4.595421016 0.000066014 lseek(11,0x0,SEEK_CUR) = 0 (0x0)
13518: 4.595870293 0.000074647 read(11,"<?php\nphpinfo();\n?>\n",8192) = 20 (0x14)
13518: 4.596238890 0.000046159 read(11,0x7dc8e8,8192) = 0 (0x0)
13518: 4.596512268 0.000044300 read(11,0x7dc8e8,8192) = 0 (0x0)
13518: 4.596948686 0.000071119 close(11)	 = 0 (0x0)
13518: 4.600002706 0.000046740 break(0xd44000)	 = 0 (0x0)
13518: 4.604407899 0.000144809 open("/home/httpd/www/system/web/info.php",O_RDONLY,00) = 11 (0xb)
13518: 4.604657610 0.000047382 fstat(11,{ mode=-rw-r--r-- ,inode=102419,size=20,blksize=4096 }) = 0 (0x0)
13518: 4.604905881 0.000046504 __sysctl(0x7fffffffb380,0x2,0x7fffffffb37c,0x7fffffffb388,0x0,0x0) = 0 (0x0)
13518: 4.605218127 0.000046154 fstat(11,{ mode=-rw-r--r-- ,inode=102419,size=20,blksize=4096 }) = 0 (0x0)
13518: 4.605494952 0.000044314 fstat(11,{ mode=-rw-r--r-- ,inode=102419,size=20,blksize=4096 }) = 0 (0x0)
13518: 4.605771958 0.000076125 mmap(0x0,20,PROT_READ,MAP_SHARED,11,0x0) = 34367475712 (0x800761000)
13518: 4.607110165 0.000039308 getpid()		 = 13518 (0x34ce)
13518: 4.609585731 0.000076692 munmap(0x800761000,20) = 0 (0x0)
13518: 4.609831733 0.000072562 close(11)	 = 0 (0x0)
13518: 4.610278029 0.000047472 __sysctl(0x7fffffffbfe0,0x2,0x7fffffffc130,0x7fffffffbfd8,0x0,0x0) = 0 (0x0)
13518: 4.610554860 0.000044264 __sysctl(0x7fffffffbfe0,0x2,0x7fffffffc230,0x7fffffffbfd8,0x0,0x0) = 0 (0x0)
13518: 4.610830052 0.000066649 __sysctl(0x7fffffffbfe0,0x2,0x7fffffffc330,0x7fffffffbfd8,0x0,0x0) = 0 (0x0)
13518: 4.611107379 0.000067807 __sysctl(0x7fffffffbfe0,0x2,0x7fffffffc430,0x7fffffffbfd8,0x0,0x0) = 0 (0x0)
13518: 4.611396603 0.000042516 __sysctl(0x7fffffffbfe0,0x2,0x7fffffffc530,0x7fffffffbfd8,0x0,0x0) = 0 (0x0)
13518: 4.616492616 0.000155860 open("/usr/share/locale/en_US.UTF-8/LC_CTYPE",O_CLOEXEC,0666) = 11 (0xb)
13518: 4.616764816 0.000070753 fstat(11,{ mode=-r--r--r-- ,inode=132288,size=76132,blksize=65536 }) = 0 (0x0)
13518: 4.617088612 0.000069731 fstat(11,{ mode=-r--r--r-- ,inode=132288,size=76132,blksize=65536 }) = 0 (0x0)
13518: 4.617405293 0.000064435 lseek(11,0x0,SEEK_CUR) = 0 (0x0)
13518: 4.617650067 0.000043323 lseek(11,0x0,SEEK_SET) = 0 (0x0)
13518: 4.618217554 0.000365490 read(11,"RuneMag1UTF-8\0\0\0\0\0\0\0\0\0"...,65536) = 65536 (0x10000)
13518: 4.619179546 0.000082154 read(11,"@\^D\b\0@\^D\b\0@\^D\b\0@\^D\b\0"...,65536) = 10596 (0x2964)
13518: 4.620830499 0.000050112 close(11)	 = 0 (0x0)
13518: 4.624148825 0.000068403 break(0xe44000)	 = 0 (0x0)
13518: 4.630655933 0.000126919 open("/usr/share/locale/en_US.UTF-8/LC_CTYPE",O_CLOEXEC,0666) = 11 (0xb)
13518: 4.630926550 0.000070057 fstat(11,{ mode=-r--r--r-- ,inode=132288,size=76132,blksize=65536 }) = 0 (0x0)
13518: 4.631176742 0.000045122 fstat(11,{ mode=-r--r--r-- ,inode=132288,size=76132,blksize=65536 }) = 0 (0x0)
13518: 4.631422162 0.000043784 lseek(11,0x0,SEEK_CUR) = 0 (0x0)
13518: 4.631664936 0.000042445 lseek(11,0x0,SEEK_SET) = 0 (0x0)
13518: 4.632011403 0.000119448 read(11,"RuneMag1UTF-8\0\0\0\0\0\0\0\0\0"...,65536) = 65536 (0x10000)
13518: 4.632747574 0.000079103 read(11,"@\^D\b\0@\^D\b\0@\^D\b\0@\^D\b\0"...,65536) = 10596 (0x2964)
13518: 4.633894601 0.000069425 close(11)	 = 0 (0x0)
13518: 4.638873827 0.000109916 write(9,"HTTP/1.1 200 OK\r\nContent-type:"...,44) = 44 (0x2c)
13518: 4.639321908 0.000170057 write(9,"<!DOCTYPE html PUBLIC "-//W3C//D"...,85600) = 81616 (0x13ed0)
13518: 4.640090226 0.000052438 poll({9/POLLOUT},1,4000) = 1 (0x1)
13518: 4.640748743 0.000099664 write(9,"ance, Johann Hanne, Boris Lytoch"...,3984) = 3984 (0xf90)
13518: 4.641393844 0.000129956 stat("/home/httpd/www/system/web",{ mode=drwxr-xr-x ,inode=110568,size=15,blksize=4096 }) = 0 (0x0)
13518: 4.641877614 0.000042891 setitimer(2,{0.000000, 0.000000 },0x0) = 0 (0x0)
13518: 4.642830145 0.000041974 getpid()		 = 13518 (0x34ce)
13518: 4.643472691 0.000042961 setitimer(2,{0.000000, 0.000000 },0x0) = 0 (0x0)
13518: 4.644000590 0.000077829 __sysctl(0x7fffffffd3d8,0x2,0x8027e0db0,0x7fffffffd3e0,0x0,0x0) = 0 (0x0)
13518: 4.644593565 0.000113284 open("/dev/null",O_CLOEXEC,00) = 11 (0xb)
13518: 4.645078362 0.000070653 fstat(11,{ mode=crw-rw-rw- ,inode=25,size=0,blksize=4096 }) = 0 (0x0)
13518: 4.645558775 0.000077133 open("/dev/null",O_CLOEXEC,00) = 12 (0xc)
13518: 4.645971445 0.000092082 __sysctl(0x7fffffffd470,0x4,0x0,0x7fffffffd460,0x0,0x0) = 0 (0x0)
13518: 4.646439044 0.000119022 __sysctl(0x7fffffffd470,0x4,0x7e9900,0x7fffffffd460,0x0,0x0) = 0 (0x0)
13518: 4.646921601 0.000071426 close(11)	 = 0 (0x0)
13518: 4.647215820 0.000041939 close(12)	 = 0 (0x0)
13518: 4.647561215 0.000079659 close(9)		 = 0 (0x0)
13518: 4.648209339 0.000112332 writev(0x2,0x7fffffffb470,0x2,0x8ad8d7b1a524b1c9,0x7fffffb93526,0x8025b0de0) = 286 (0x11e)
Не совсем понятно зачем php под фрей запрашивает кучу sysctl да еще и зачем-то в /dev/null лезет. Можно ли это как-то выпилить?

Подскажите пожалуйста куда копать. Если нужна доп. инфа о настройках FreeBSD - пишите.

Заранее благодарен!

★★★★★
Ответ на: комментарий от iron

Вообще я фрю не щупал с 4-й версии. В то время столкнулся с тупняками в ней по всем фронтам, плюнул и пересел на Gentoo с момента рождения этого дистриба. Тут вашла 10-ка, ChangeLog ее заинтересовал. На многих сайтах BSD-шники брызгали слюной о том, насколько идеально в ней работает мультипоточность и kqueue нету равных. Судя по всему, до лампочки эта мультипоточность если откровенный дибилизм в самом корне этой OS. Вы уж извините за столь резкое мое ИМХО. Теперь я снова разочарован как и почти 10 лет назад. :)

Ну что же, подождем еще лет 10 (если конечно она доживет) вдруг что-то изменится. Правда, как только портируют ZFS так сразу фре и кирдык настанет. Правда портирование ZFS даст очень большой плюс - разработчики btrfs начнут репу чесать, авось допилят до юзабельного состояния в продакшине. Тоже самое было и с Firefox когда вышел Chromium. Почесали то, что зачесалось, и начали шевелиться. Ну а это не удивительно, так как продуктивнее всего на большинство людей действует метод кнута, а не пряника. В итоге имеем два качественных продукта, выбирай какой душе угодно.

Аминь.

iron ★★★★★
() автор топика
Ответ на: комментарий от blackst0ne

Даже интересно, что ответили бы в списке рассылки freebsd по данному вопросу.

Во первых сказали бы, что тест - полная кака. Во вторых - дергание sysctl связано с выгребанием переменных с ограничениями с последующей проверкой их по отношению к процессу. BSD же аля безопасная система. В третьих - рассказали бы сказочку, что каждый сискол выполняется супер-изолирванно и по этому такой медленный. Ну и четвертое - данная разница с линуксом не существенная и сопоставима с погрешностью измерения.

iron ★★★★★
() автор топика
Ответ на: комментарий от iron

Во-первых, сказали бы, что Gentoo никто в продакшен не пустит — надо было тестировать на Red Hat, Ubuntu или Debian. И сравнивать их результаты с FreeBSD. ;)

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от iron

Епт...2014 год на носу а мы во фре sysctl деграем при каждом запросе и тратим кучу вычислительных ресурсов впустую.

Зачем PHP дёргать sysctl?

iZEN ★★★★★
()
Ответ на: комментарий от iZEN

Во-первых, сказали бы, что Gentoo никто в продакшен не пустит

Не стоит все продакшины сгребать в одну кучу. Начнем с того, что задачи у всех разные. И следовательно инструменты тоже. Чтоб развернуть сервер на генте мне достаточно rsync-нуть файлы с файловой системы работающего сервера, подправить айпишники и вуаля - получаю готовый сервер за 10 минут со всеми тюнингами, настройками и прочими изначально установленными/написанными фишками. Если собирать систему ручками, кропотливо и бережно, тогда предсказуемы и устранены большинство проблем которые могут возникнуть. По сему еще раз повторюсь: Gentoo/RedHat/Ubuntu/Debian - это не религия или стандарты. Это инструмент, который каждый специалист выбирает под себя. У каждого решения есть свои плюсы и минуса. Личной мой выбор обусловлен тем, что я привык изначально потратить время, построить универсальный и быстрый инструмент и забыть о большинстве проблем. Мне нравится выдавливать из железа максимум. И это мое мини-хобби резонирует с требованиями предъявляемыми к моей должности в проекте, над которым я работаю. К тому же, данный подхот и результаты моего труда приветствуются оцениваются по достоинству моим работодателем.
Кому то больше по душе поставить сервак в два клика и потом тратить много времени на оптимизацию и вырезание всего не нужного. Тормозит? Пофиг! Купим еще железяку. Разные компании, разные требования. В конце концов, фломастеры же разные... :)

надо было тестировать на Red Hat, Ubuntu или Debian. И сравнивать их результаты с FreeBSD. ;)

Ога, нужно было сравнивать с Generic дистрибом. Тогда тормознутость фри не будет особо выделяться и можно будет сослаться на погрешность измерения и прочие побочные факторы. :)

Зачем PHP дёргать sysctl?

Наверно ответят вам на этот вопрос лишь исходники ядра фри :)

iron ★★★★★
() автор топика
Ответ на: комментарий от iron

Поделюсь рабочим конфигом 10-ки /etc/src.conf:

WITHOUT_AMD=true
WITHOUT_ASSERT_DEBUG=true
WITHOUT_ATF=true
WITHOUT_ATM=true
WITHOUT_BLUETOOTH=true
WITHOUT_CTM=true
WITHOUT_EXAMPLES=true
WITHOUT_FLOPPY=true
WITHOUT_FREEBSD_UPDATE=true
WITHOUT_GAMES=true
WITHOUT_GDB=true
WITHOUT_HTML=true
WITHOUT_INFO=true
WITHOUT_IPFILTER=true
WITHOUT_IPFW=true
WITHOUT_IPX=true
WITHOUT_IPX_SUPPORT=true
WITHOUT_KDUMP=true
WITHOUT_LDNS=true
WITH_LIBICONV_COMPAT=true
WITHOUT_LPR=true
WITHOUT_MAIL=true
WITHOUT_MAILWRAPPER=true
WITHOUT_NCP=true
WITHOUT_NDIS=true
WITHOUT_NETCAT=true
WITHOUT_NETGRAPH=true
WITHOUT_NETGRAPH_SUPPORT=true
WITHOUT_PC_SYSINSTALL=true
WITHOUT_PKGBOOTSTRAP=true
WITHOUT_PMC=true
WITHOUT_PPP=true
WITHOUT_PROFILE=true
WITHOUT_RCS=true
WITHOUT_ROUTED=true
WITHOUT_SENDMAIL=true
WITHOUT_SHAREDOCS=true
WITHOUT_SSP=true
WITH_SVN=true
WITHOUT_SYSINSTALL=true
WITHOUT_TELNET=true
WITHOUT_UNBOUND=true
WITHOUT_WIRELESS=true
WITHOUT_WIRELESS_SUPPORT=true
WITHOUT_WPA_SUPPLICANT_EAPOL=true
/etc/rc.conf:
hostname="comp"
#-ifconfig_re0="DHCP"
ifconfig_re0="inet 192.168.1.2 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
font8x14="cp866-8x14"
font8x16="cp866-8x16"
font8x8="cp866-8x8"
keymap="ru.koi8-r"
keyrate="fast"
moused_enable="YES"
scrnmap="koi8-r2cp866"
saver="blank"
blanktime="300"
apm_enable="YES"
dumpdev="NO"
mixer_enable="YES"
sendmail_enable="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
clear_tmp_enable="YES"
cleanvar_enable="YES"
clear_tmp_X="YES"
virecover_enable="NO"
devd_enable="YES"
dbus_enable="YES"
polkitd_enable="YES"
Может это поспособствует ускорению.

iZEN ★★★★★
()
Ответ на: комментарий от iZEN

«WITH_LIBICONV_COMPAT=true» в /etc/src.conf можно не указывать — сейчас этот флаг отсутствует.

iZEN ★★★★★
()
Ответ на: комментарий от iZEN

Может это поспособствует ускорению.

Не думаю, что настройки шрифтов, звука, крысы, вайфая и прочего как-то повлияют на производительность сервера. У меня и так я ядре включено только то, что используется. Ну и выключено все лишнее.

iron ★★★★★
() автор топика
Ответ на: комментарий от blackst0ne

Воспроизводится ли это поведение во FreeBSD предыдущей ветки?

Я же не переживу еще одного многочасового совокупления с фрей. Если у вас есть под рукой 9-ка, запустите пых через uwsgi или fpm, найдите его pid, запустите truss -dD -f -p <pid>, обратитесь через веб-сервер к скрипту в котором «<?php phpinfo(); ?>» и бросьте сюда полученный трейс. Можно будет интерполировать полученные значения временных меток и получить картину как пых ведет себя под 9-кой. Вдруг выше описанное мракобесие только в 10-ке.

iron ★★★★★
() автор топика

А что десятка уже релизнулась? На сайте бета4.

ritsufag ★★★★★
()
Ответ на: комментарий от iron

Я повторю, у тебя какая-то глупая мелочь.

Вот для примера php 5.5.5 из портов с дефолтным конфигом, кроме --enable-embed, uwsgi 1.9.20 из портов, модуль php_plugin.so собран там же python uwsgiconfig.py --plugin plugins/php, старый четырехядерный AMD:

8.509671764 0.134036901 kevent(4,0x0,0,{0x3,EVFILT_READ,0x0,0,0x1,0x0},1,0x0) = 1 (0x1)
8.509821355 0.000021021 accept(3,{ AF_INET 127.0.0.1:53516 },0x800879104) = 6 (0x6)
8.509882463 0.000012711 clock_gettime(4,{2987889.228490538 }) = 0 (0x0)
8.509946992 0.000017110 read(6,"\^N\M-E\^B\0\f\0QUERY_STRING\0\0"...,4100) = 713 (0x2c9)
8.510144492 0.000038131 lstat("/usr",{ mode=drwxr-xr-x ,inode=4,size=15,blksize=4096 }) = 0 (0x0)
8.510208044 0.000020532 lstat("/usr/local",{ mode=drwxr-xr-x ,inode=4,size=21,blksize=4096 }) = 0 (0x0)
8.510271596 0.000021999 lstat("/usr/local/www",{ mode=drwxr-xr-x ,inode=3816,size=5,blksize=4096 }) = 0 (0x0)
8.510330259 0.000019554 lstat("/usr/local/www/php",{ mode=drwxr-xr-x ,inode=181998,size=3,blksize=131072 }) = 0 (0x0)
8.510395767 0.000019066 stat("/usr/local/www/php",{ mode=drwxr-xr-x ,inode=181998,size=3,blksize=131072 }) = 0 (0x0)
8.510451986 0.000015155 lstat("/usr",{ mode=drwxr-xr-x ,inode=4,size=15,blksize=4096 }) = 0 (0x0)
8.510508205 0.000016621 lstat("/usr/local",{ mode=drwxr-xr-x ,inode=4,size=21,blksize=4096 }) = 0 (0x0)
8.510564913 0.000017110 lstat("/usr/local/www",{ mode=drwxr-xr-x ,inode=3816,size=5,blksize=4096 }) = 0 (0x0)
8.510621621 0.000017599 lstat("/usr/local/www/php",{ mode=drwxr-xr-x ,inode=181998,size=3,blksize=131072 }) = 0 (0x0)
8.510677840 0.000017110 lstat("/usr/local/www/php/info.php",{ mode=-rw-r--r-- ,inode=182000,size=14,blksize=4096 }) = 0 (0x0)
8.510728192 0.000015154 stat("/usr/local/www/php/info.php",{ mode=-rw-r--r-- ,inode=182000,size=14,blksize=4096 }) = 0 (0x0)
8.510779523 0.000007822 setitimer(2,{0.000000, 30.000000 },0x0) = 0 (0x0)
8.510837208 0.000007821 sigprocmask(SIG_SETMASK,SIGHUP|SIGINT|SIGQUIT|SIGILL|SIGTRAP|SIGABRT|SIGEMT|SIGFPE|SIGKILL|SIGBUS|SIGSEGV|SIGSYS|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0)
8.510886095 0.000008311 sigaction(SIGPROF,{ 0x800a0b300 SA_RESTART|SA_SIGINFO ss_t },{ 0x800a0b300 SA_RESTART|SA_SIGINFO ss_t }) = 0 (0x0)
8.510943291 0.000007333 sigprocmask(SIG_SETMASK,0x0,0x0) = 0 (0x0)
8.510989244 0.000007333 sigprocmask(SIG_UNBLOCK,SIGPROF,0x0) = 0 (0x0)
8.511056218 0.000011732 __getcwd("/usr/local/www/php",4095) = 0 (0x0)
8.511117326 0.000015155 chdir("/usr/local/www/php") = 0 (0x0)
8.511157901 0.000008310 clock_gettime(13,{1386110752.000000000 }) = 0 (0x0)
8.511218520 0.000019066 open("/usr/local/www/php/info.php",O_RDONLY,00) = 8 (0x8)
8.511263006 0.000008799 fstat(8,{ mode=-rw-r--r-- ,inode=182000,size=14,blksize=4096 }) = 0 (0x0)
8.511307004 0.000011733 __sysctl(0x7fffffffb370,0x2,0x7fffffffb38c,0x7fffffffb380,0x0,0x0) = 0 (0x0)
8.511353935 0.000008800 fstat(8,{ mode=-rw-r--r-- ,inode=182000,size=14,blksize=4096 }) = 0 (0x0)
8.511393532 0.000007821 fstat(8,{ mode=-rw-r--r-- ,inode=182000,size=14,blksize=4096 }) = 0 (0x0)
8.511441441 0.000016133 mmap(0x0,14,PROT_READ,MAP_SHARED,8,0x0) = 34368724992 (0x800892000)
8.511514281 0.000012710 munmap(0x800892000,14)   = 0 (0x0)
8.511557790 0.000010266 close(8)                 = 0 (0x0)
8.511607165 0.000009778 __sysctl(0x7fffffffad70,0x2,0x7fffffffadd0,0x7fffffffad68,0x0,0x0) = 0 (0x0)
8.511653117 0.000008799 __sysctl(0x7fffffffad70,0x2,0x7fffffffaed0,0x7fffffffad68,0x0,0x0) = 0 (0x0)
8.511698582 0.000007822 __sysctl(0x7fffffffad70,0x2,0x7fffffffafd0,0x7fffffffad68,0x0,0x0) = 0 (0x0)
8.511744046 0.000008800 __sysctl(0x7fffffffad70,0x2,0x7fffffffb0d0,0x7fffffffad68,0x0,0x0) = 0 (0x0)
8.511789999 0.000008311 __sysctl(0x7fffffffad70,0x2,0x7fffffffb1d0,0x7fffffffad68,0x0,0x0) = 0 (0x0)
8.511837907 0.000007333 clock_gettime(13,{1386110752.000000000 }) = 0 (0x0)
8.512593686 0.000010266 gettimeofday({1386110752.068086 },0x0) = 0 (0x0)
8.513042461 0.000030799 write(6,"HTTP/1.1 200 OK\r\nX-Powered-By:"...,69) = 69 (0x45)
8.513125078 0.000036176 write(6,"<!DOCTYPE html PUBLIC "-//W3C//D"...,61930) = 57119 (0xdf1f)
8.513176408 0.000010754 poll({6/POLLOUT},1,4000) = 1 (0x1)
8.513250226 0.000028842 write(6,"i Ahto, Zeev Suraski, Yasuo Ohga"...,4811) = 4811 (0x12cb)
8.513410084 0.000042531 chdir("/usr/local/www/php") = 0 (0x0)
8.513461415 0.000010267 setitimer(2,{0.000000, 0.000000 },0x0) = 0 (0x0)
8.513571897 0.000026887 madvise(0x803f26000,0x41000,0x5,0x325,0x7fffffffc350,0xffffffff) = 0 (0x0)
8.513679447 0.000009778 setitimer(2,{0.000000, 0.000000 },0x0) = 0 (0x0)
8.513728822 0.000011244 clock_gettime(4,{2987889.232338363 }) = 0 (0x0)
8.513783574 0.000020532 close(6)                 = 0 (0x0)
8.513860814 0.000018088 writev(0x2,0x7fffffffd210,0x1,0xcd,0x7fffffa8e82b,0x7fffffffae8f) = 205 (0xcd)

На FreeBSD получается 8.513860814-8.509671764 — четыре миллисекунды. У тебя на Линуксе (с E3-1270, который новее и в разы быстрее) 32.581475-32.578393 = три миллисекунды.

При этом твои трейсы заставляют задуматься: не видно, как на Линуксе открывается info.php. Значит приложение загружается один раз при старте. Не используешь ли ты uwsgi на FreeBSD в динамическом режиме? Конфиг и строки запуска nginx и uwsgi не покажешь?

PS. Ядро GENERIC?

baka-kun ★★★★★
()
Последнее исправление: baka-kun (всего исправлений: 1)
Ответ на: комментарий от baka-kun

Кстати, если посмотреть внимательно, сам скрипт от открытия файла до начала передачи результата выполнялся у меня на FreeBSD всего 0.6 мс против минимум 1.17 мс у тебя на Линуксе.

Остальное время — uwsgi.

baka-kun ★★★★★
()
Ответ на: комментарий от baka-kun

не видно, как на Линуксе открывается info.php

Не видно скорее всего потому, что на линуксе трасируется через strace, а на фре через truss.

Не используешь ли ты uwsgi на FreeBSD в динамическом режиме? Конфиг и строки запуска nginx и uwsgi не покажешь?

Конфиги запуска одинаковые. uwsgi.ini:

[uwsgi]
socket = 192.168.3.8:7000
master = true
master-as-root = false

; drop privileges
uid = web
gid = web

pcre-jit = true

project_dir = /home/httpd/www/system/web

; chdir to it (just for fun)
chdir = %(project_dir)
; check for static files in it
check-static = %(project_dir)
; ...but skip .php and .inc extensions
static-skip-ext = .php
static-skip-ext = .inc
; search for index.html when a dir is requested
static-index = index.html

processes  = 32
threads = 4
cheaper = 2
cheaper-overload = 40
cheaper-algo = busyness
cheaper-initial = 4

;Reload workers after the specified amount of managed requests (avoid memory leaks).
max-requests = 10240

;disable-logging = yes
;log-format = %(status) "%(method) %(host)%(uri) %(proto) %(addr) %(user) [%(ltime)] %(size) "%(referer)" "%(uagent)"
;logger = rsyslog:192.168.3.3:514,system-node2

;php-ini = /usr/local/etc/php.ini

ignore-sigpipe = yes

http-modifier1 = 14
worker-reload-mercy = 60

http-keepalive = 1

;stats = /tmp/stats.socket
threaded-logger = true

;post-buffering = 32768
memory-report
backtrace-depth=100

tmp = /tmp

; Listen queue
listen = 4096

;harakiri = 60

PS. Ядро GENERIC?

Нет. Но сборка GENERIC никакой погоды не делает.

iron ★★★★★
() автор топика
Последнее исправление: iron (всего исправлений: 2)
Ответ на: комментарий от baka-kun

Кстати, если посмотреть внимательно, сам скрипт от открытия файла до начала передачи результата выполнялся у меня на FreeBSD всего 0.6 мс против минимум 1.17 мс у тебя на Линуксе.

Может быть не показывается в трейте еще из за того, что в линуксе оно читается из файлового кеша, а во фре из ARC. Методы доступа к кешам разные и из за этого и разница. Результат не меняется если даже поместить файл в tmpfs - это раз. Два - я не тресирую самый первый запрос в обеих ОСях, чтоб файл заведомо прочитался из кеша и чтение с винта не оказывало влияния на скорость выполнения самого кода.

Выполните тест ab с параметрами, которые бросал выше.

iron ★★★★★
() автор топика
Ответ на: комментарий от iron

Выполните тест ab с параметрами, которые бросал выше.

Легко:

% ab -n 10000 -c 16 http://192.168.0.59/info.php
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.0.59 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        nginx/1.5.7
Server Hostname:        192.168.0.59
Server Port:            80

Document Path:          /info.php
Document Length:        11009 bytes

Concurrency Level:      16
Time taken for tests:   2.931 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      111550000 bytes
HTML transferred:       110090000 bytes
Requests per second:    3412.31 [#/sec] (mean)
Time per request:       4.689 [ms] (mean)
Time per request:       0.293 [ms] (mean, across all concurrent requests)
Transfer rate:          37172.15 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.6      0       5
Processing:     1    4   1.2      4      11
Waiting:        0    4   1.2      4      11
Total:          1    5   1.3      4      12

Percentage of the requests served within a certain time (ms)
  50%      4
  66%      5
  75%      5
  80%      6
  90%      6
  95%      7
  98%      8
  99%      9
 100%     12 (longest request)

baka-kun ★★★★★
()
Ответ на: комментарий от iron

Но сборка GENERIC никакой погоды не делает.

В предрелизных сборках FreeBSD ядро всегда собрано со всевозможной отладкой: всякие WITNESS, *_DEBUG, FULL_PREEMPTION, INVARIANTS, DIAGNOSTIC…

Это тормозит местами в десятки раз. Поэтому если у тебя не RELEASE, как минимум ядро нужно пересобрать, отключив всю отладку. Разница с GENERIC должна быть заметна сразу.

baka-kun ★★★★★
()
Ответ на: комментарий от baka-kun

как минимум ядро нужно пересобрать

Я уже писал, что ядро пересобрал как указано в хендбуке. Вот конфиг: http://pastebin.com/xmGGEU42

iron ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Там тесты handshake tcp, это, конечно, важная величина, но и ответы в секунду - не менее важная. А то так можно пожать ручки за 1 мс и генерить страницу все 60 мс, и по тем тестам это будет супер, а по моим тестам - это время не впечатлит, и фреймворк будет тормозом, если на простой странице выдаёт так долго результат. Сейчас, кстати, разрабатываем с американским заказчиком соц. сеть на ноде - никаких проблем, разве что немного напрягает тотальная асинхронка в коде :)

menangen ★★★★★
()
Ответ на: комментарий от menangen

Там тесты handshake tcp

Попробуй посмотреть на все столбцы таблицы.

Deleted
()
Ответ на: комментарий от iron

truss -dD -f -p <pid>

this. use dtrace, luke. truss при каждом сисколе переключает контекст и вообще много лишнего делает. тут смотри подробнее.

EvgGad_303 ★★★★★
()
Последнее исправление: EvgGad_303 (всего исправлений: 1)
Ответ на: комментарий от EvgGad_303

Мне пофиг сколько и как truss переключает. Мне важно чтоб php по скорости не сильно отставал от линуксового :)

iron ★★★★★
() автор топика
Ответ на: комментарий от reprimand

как ты там считал время выполнения, расскажи-ка?

Если задаете вопрос, то либо пишите кому, либо процитируйте текст, если вы только не сам с собой...

iron ★★★★★
() автор топика
Ответ на: комментарий от iron

если над сообщением нет надписи «Ответ на: комментарий от ...», то это означает, что вопрос адресован автору темы. С таким кол-вом звезд пора бы уже знать это...

reprimand ★★★★★
()
Ответ на: комментарий от iron

не то что бы меня сильно волновала фрибсд, но если truss на тест натравливать, то он может некисло замедлять процесс. или я посреди ночи прочитал по диагонали и ты не каждый тест смотрел трэйс? Ж)

EvgGad_303 ★★★★★
()
Ответ на: комментарий от EvgGad_303

или я посреди ночи прочитал по диагонали и ты не каждый тест смотрел трэйс? Ж)

Я столько не выпью, чтоб одновременно truss-ить процесс и тестировать скорость выполнения :)

iron ★★★★★
() автор топика
Ответ на: комментарий от reprimand

если над сообщением нет надписи «Ответ на: комментарий от ...», то это означает, что вопрос адресован автору темы.

Если я поинтересовался о том, кому был задан вопрос, это не значит что я считаю, что вопрос адресовался мне.

iron ★★★★★
() автор топика
Последнее исправление: iron (всего исправлений: 1)
Ответ на: комментарий от iron

Решил я протестить сеорость работы перла под флей и линуксом. Скрипт простой, читает из xml файла данные и парсит его регулярками в цикле из 100 итераций. На обеих ОСях файл расположен в tmpfs.

Linux:

real	0m7.337s
user	0m7.170s
sys	0m0.173s

FreeBSD:

real	0m10.496s
user	0m10.297s
sys	0m0.197s

Как видим выше, отставание фри точно такое же как и в тесте работы нашего php проекта. Версии перла одинаковые, собраны одной и той же версией компилятора. Инсталяция фри чистая(FreeBSD 10.0-RC2 r259696), с пересобраным ядром и базовой системой, без каких либо дебагов и прочей фигни.

iron ★★★★★
() автор топика

не совсем понятно для чего фря вообще нужна. более-менее еще вебсервер можно поставить, в остальном слив и некрофилия.

Deleted
()
Ответ на: комментарий от iron

Вот еще забавный момент. Если перед тестом во фре поменять алокатор памяти:

LD_PRELOAD=/usr/local/lib/libtcmalloc_minimal.so
...то результат чуточку меняется:
real	0m9.723s
user	0m9.553s
sys	0m0.158s
Получается, что стандартный фришный jemalloc сливает гугловому tcmalloc.

iron ★★★★★
() автор топика
Ответ на: tl;dr от anonymous

Фряха опять соснула?

Проходите мимо, не задерживайтесь.

iron ★★★★★
() автор топика
Ответ на: комментарий от Deleted

не совсем понятно для чего фря вообще нужна.

Один из лучших Source Based дистрибутивов, в котором есть полная линейка компиляторов и сборник программ движения Open Source. Есть возможность прозрачной эмуляции Linux ABI x86 для запуска бинарников «не-Unix» системы.

iZEN ★★★★★
()
Ответ на: комментарий от anonymous

“В C++ всего 2 вещи получились не так: начальный замысел и реализация”, — сказал как-то Бертран Мейер. На что Бьерн Страуструп обронил: “Есть всего 2 типа языков: те, на которые все жалуются, и те, которыми никто не пользуется”. С чем наблюдающие тихо согласились и продолжили тихонько чесать свою застарелую попаболь.

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.