gallery2 captcha

http://galleryproject.org/node/109994

I recently update my gallery2 server after several years. Along the way I ran into several issues. One of which was that captcha was no longer working to display the image when submitting comments. This has to be a very common issue people are facing even though I’m not seeing it in the forums as the code is broken on new systems. In particular, the arguments to ImageJPEG in modules/captcha/CaptchaImage.inc are wrong:

--- CaptchaImage.inc.orig 2012-11-25 16:12:02.838684229 -0800
+++ CaptchaImage.inc 2012-11-25 16:12:08.733601285 -0800
@@ -88,7 +88,7 @@

/* Output the image and reclaim the memory it used */
/* Use low quality jpeg compression to make the image less OCR-able */
- ImageJPEG($image, '', 50);
+ ImageJPEG($image, NULL, 50);
ImageDestroy($image);

return null;

Рубрика: overminds | Метки: , | Оставить комментарий

nagios man

http://nagiosplugins.org/man/

Рубрика: overminds | Метки: | Оставить комментарий

zfs tuning

http://www.stableit.ru/search/label/ZFS

Рубрика: overminds | Метки: | Оставить комментарий

zfs arc device

zpool add STORAGE cache /dev/mfid1

STORAGE — пул, к которому добавляем устройство

/dev/mfid1 — само устройство.

Рубрика: overminds | Метки: | Оставить комментарий

exim comands

exim -bpc
Считает кол-во сообщений в очереди Exim

exim -M emailID
Принудительная отправка заданного сообщения

exim -bp
Выдает ID сообщений

exim -qf
Принудительный запуск другой очереди

exim -qff
Принудительный запуск другой очереди и попытка удалить замороженные сообщения

exim -Mvl messageID
Просмотр лога сообщения

exim -Mvb messageID
Просмотр тела сообщения

exim -Mvh messageID
Просмотр заголовков сообщения

exim -Mrm messageID
Переместить сообщение (без ошибок)

exim -Mg messageID
Отправить сообщение об ошибке отправителю письма

взято тут: http://spam.sended2.me/2009/06/exim-shell.html

Рубрика: overminds | Метки: | Оставить комментарий

work with ffmpeg

http://sexwithlinux.blogspot.ru/2011/03/ffmpeg.html

http://info-storage.livejournal.com/20784.html

dorway to ffmpeg hints

speedrun:

ffmpeg -i 14-00.avi -sameq -f yuv4mpegpipe - |yuvfps -s 15:1 -r 1:1 | yuvfps -r 25:1 -c |ffmpeg -f yuv4mpegpipe -i - -sameq -y 14.00.speedrun2.avi

Рубрика: overminds | Метки: | Оставить комментарий

zoneminder 127 problem

#Si se agrega un nuevo monitor o se modifica un existente y se quiere usar la funcion Probe muestra un error: Unable to probe network cameras, status is ‘127’
#Para solucionar el error editamos como root el archivo /skins/classic/views/monitorprobe.php y buscamos la linea $command = «arp -a»;
#Esa linea se sustituye con: $command = «/usr/sbin/arp -a»;
#Ya debe funcionar Probe.

Рубрика: overminds | Метки: , | Оставить комментарий

mdadm восстановить рейд на бегу.

http://www.opennet.ru/openforum/vsluhforumID1/85837.html

>Вопрос: как вернуть диск из состояния «faulty spare» в рабочее?

mdadm —manage /dev/md2 —fail /dev/sdb4
mdadm —manage /dev/md2 —remove /dev/sdb4

После этого надо убедиться что /dev/sdb живой:
dd if=/dev/sdb of=/dev/null

Если споткнётся на считывании — надо заменить диск. Если всё пройдёт без проблем — тогда рекомендуется затереть ошмётки рейда на /dev/sdb4:

dd if=/dev/zero of=/dev/sdb4

Это не обязательно, но в принципе помагает избежать днекоторых довольно редко пападающихся граблей с синхронизацией членов массива. Рекомендую.

После этого добавляем диск обратно в массив:

mdadm —manage /dev/md2 —add /dev/sdb4

>Помогает перезагрузка в single mode: добавление проходит,
>начинается синхронизация, но после «telinit 3» диск снова оказывается «faulty spare».
>Ждать сутки, пока в single mode закончится синхронизация, не привлекает.

А вот это очень интересно. И весьма непонятно. Рекомендую убрать автоматическое распознавание и сборку массива на старте системы (просто убив соответствующую запись в /etc/mdadm.conf или /etc/mdadm/mdadm.conf — зависит от того какой у Вас Линух). И только после этого — telinit 3.

После того, как система успешно взлетит, проверяем наличие массивов:

mdadm —examine —scan

Далее — ручная сборка массива:

mdadm —assemble /dev/md2 /dev/sda4

Для начала рекомендую собирать только с 1 диском. Тем, который наверняка живой.

Ну, и контрольный в голову:

mdadm —query —detail /dev/md2

Просто чтоб убедиться, что массив взлетел.

После успешного взлёта массива нужно попытаться добавить второй диск:

mdadm —manage /dev/md2 —add /dev/sdb4

И опять:

mdadm —query —detail /dev/md2

Если всё прошло нормально — массив должен начать ребилдаться.

Когда успешно закончит ребилдаться — обязательно:

fsck /dev/md2

После этого — для очистки совести:

mdadm —stop /dev/md2

и ребут системы (с отключенным автораспознаванием и сборкой массива!).

После ребута — ещё одна ручная сборка, чтоб убедиться что всё пучком, и только после этого
восстанавливать автосборку массива:

mdadm —examine —scan >> /etc/mdadm.conf (или /etc/mdadm/mdadm.conf)

Успехов!

respect,
ronin

Рубрика: overminds | Метки: , , | Оставить комментарий

zoneminder axis m1054

AXIS M1054

Working just fine with my zoneminder setup under Ubuntu 10.04 and 11.04, using MJPEG setup.

My camera setup:
Source type: remote
Function: modect
maximum fps 8.00
alarm fps 30.00
remote protocol: http
remote method: simple
remote host name: the DNS name of the camera (or IP adress I suppose)
remote host port: 80
remote host path: /axis-cgi/mjpg/video.cgi
capture width: 1280
capture height: 800

I just captured some thiefs with this setup, police caught them and used the pictures as proof. High quality pictures for that price of a camera and very reliable (running 1/2 year now without a single crash or disfunction).[1]

взято тут:

http://www.zoneminder.com/wiki/index.php/Axis#AXIS_M1054

Рубрика: overminds | Метки: , | Оставить комментарий

freebsd 9 on zfs my own script with bj an hookers

собственно, для понимания как оно вообще, и для закрепления навыков отредактировал вот этот скрипт:

https://sites.google.com/site/luzanov/freebsd/zfs/root_zfs

под себя.

как использовать:

записать на флешку имидж 9ки фри, подмонтировать флешку к фревой железке, и скопировать в произвольную (я поклал в /custom) папочку скриптик следующего содержания:


#!/bin/sh

# Vars
dev=ada0
tank=zroot
if_wan=em0
hostname=new.corp.filanco.ru

#prepare
echo "preparing environment..."
echo "load modules..."
kldload opensolaris
kldload zfs
echo "ram /tmp creating..."
umount /dev/md1
echo "md1 unmounted..."
mdmfs -s 512M md1 /tmp
echo "md1 ram mounted ..."
chmod 1777 /tmp
echo "1777 priveleges on /tmp granted..."

#clean up

gpart show
echo "zfs cleanup..."
zfs unmount -a
zpool destroy zroot
echo "deleting gpt partitions..."
gpart delete -i 3 ada0
gpart delete -i 2 ada0
gpart delete -i 1 ada0
echo "gpt partitions is deleted..."
echo "destroing gpt provider..."
gpart destroy ada0
echo "provider destroyed..."
echo " "

# gpart
echo "### Create GPT, add partitions...###"

gpart create -s GPT $dev
gpart add -b 34 -s 64k -t freebsd-boot $dev
gpart add -b 2048 -s 4G -t freebsd-swap -l swap $dev
gpart add -t freebsd-zfs -l disk0 $dev

echo "### GPT on $dev created, partitions added. ###"

gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 $dev

gpart show $dev

# Create ZFS pool
echo "### Create ZFS pool...###"

zpool create -f $tank /dev/gpt/disk0
zpool set bootfs=$tank $tank

echo "### zfs tank created, bootcode writed ###"

# Create ZFS-filesystem
echo "### Create filesystem...###"

zfs set atime=off $tank
zfs set checksum=fletcher4 $tank
zfs set mountpoint=/mnt $tank

# Export and import the pool
zpool export $tank
zpool import -o cachefile=/var/tmp/zpool.cache $tank

echo "### zfs cache exported/imported ###"

zfs create -o compression=on -o exec=on -o setuid=off $tank/tmp
chmod 1777 /mnt/tmp

zfs create $tank/usr
zfs create $tank/usr/home

cd /mnt ; ln -s /usr/home home
zfs create -o compression=off -o setuid=off $tank/usr/ports
zfs create -o compression=off -o exec=off -o setuid=off $tank/usr/ports/distfiles
zfs create -o compression=off -o exec=off -o setuid=off $tank/usr/ports/packages

zfs create -o compression=lzjb -o exec=off -o setuid=off $tank/usr/src

zfs create $tank/var
zfs create -o compression=lzjb -o exec=off -o setuid=off $tank/var/crash
zfs create -o exec=off -o setuid=off $tank/var/db
zfs create -o compression=lzjb -o exec=on -o setuid=off $tank/var/db/pkg
zfs create -o exec=off -o setuid=off $tank/var/empty
zfs create -o compression=lzjb -o exec=off -o setuid=off $tank/var/log
zfs create -o compression=gzip -o exec=off -o setuid=off $tank/var/mail
zfs create -o exec=off -o setuid=off $tank/var/run
zfs create -o compression=lzjb -o exec=on -o setuid=off $tank/var/tmp
chmod 1777 /mnt/var/tmp

echo "### ZFS-filesystem structure: ###"

zfs list
sleep 3

# install base system
echo "### Install base system... ###"

cd /usr/freebsd-dist
export DESTDIR=/mnt
for file in base.txz kernel.txz lib32.txz; do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}) ; done

echo "### System has bin installed... ###"

echo "### Copy zpool cache... ###"
cp /var/tmp/zpool.cache /mnt/boot/zfs/zpool.cache

# install base config
echo "### Install base config... ###"

echo "zfs_enable=\"YES\"" > /mnt/etc/rc.conf
echo "hostname=\"$hostname\"" >> /mnt/etc/rc.conf
echo "ifconfig_$if_wan=\"inet 10.20.0.254 netmask 255.255.255.0\"" >> /mnt/etc/rc.conf
echo "defaultrouter=\"10.20.0.1\"" >> /mnt/etc/rc.conf
echo "sshd_enable=\"YES\"" >> /mnt/etc/rc.conf

echo 'zfs_load="YES"' > /mnt/boot/loader.conf
echo 'coretemp_load="YES"' >> /mnt/boot/loader.conf
echo "vfs.root.mountfrom=\"zfs:$tank\"" >> /mnt/boot/loader.conf
echo 'vfs.zfs.prefetch_disable=1' >> /mnt/boot/loader.conf
echo 'vm.kmem_size="1500M"' >> /mnt/boot/loader.conf
echo 'vm.kmem_size_max="1500M"' >> /mnt/boot/loader.conf
echo 'vfs.zfs.arc="1024M"' >> /mnt/boot/loader.conf
echo 'vfs.zfs.arc_max="1024M"' >> /mnt/boot/loader.conf
echo 'vfs.zfs.vdev.cache.size="20M"' >> /mnt/boot/loader.conf
echo 'loader_logo="beastie"' >> /mnt/boot/loader.conf

echo "/dev/gpt/swap none swap sw 0 0" > /mnt/etc/fstab

echo "nameserver 195.128.48.65" > /mnt/etc/resolv.conf
echo "nameserver 8.8.8.8" >> /mnt/etc/resolv.conf

echo "#### fstab ###"
cat /mnt/etc/fstab
echo "### /boot/loader.conf ###"
cat /mnt/boot/loader.conf
echo "### /etc/rc.conf ###"
cat /mnt/etc/rc.conf

# correct ZFS mount points and quotas
echo "### Set mount points and quotas...###"
zfs unmount -af
zfs set mountpoint=legacy $tank
zfs set mountpoint=/usr $tank/usr
zfs set quota=4G $tank/tmp && zfs set mountpoint=/tmp $tank/tmp
zfs set quota=4G $tank/var && zfs set mountpoint=/var $tank/var

sleep 5
zpool status
sleep 15
echo "### Choice your time zone... ###"
sleep 5
tzsetup
cd /etc/mail
make aliases
echo "### done! ###"

отмонтировать флешку и воткнуть ее в целевую (ту, на которую собираемся ставить) железку. железка должна быть чистой. на ней не должно быть никаких полезных данных, т.к флешка убъет все, что есть на диске /dev/ada0. загрузиться с флешки, и выбрать «Live CD». перемонтировать корневую fs в rw:

# mount -o rw / (это может и не обязательно, но вдруг пригодиться)

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

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

вот тут с офффорума, как надо это делать:

http://forums.freebsd.org/showthread.php?t=23544

Рубрика: overminds | Метки: , | Оставить комментарий

postfix commands

http://wiki.dieg.info/doku.php/postfix

postfix check — postfix проверяет свои конфигурационные файлы, если все в порядке — сообщений не будет.

mailq — получение идентификаторов (ID) писем в почтовой очереди. Посмотреть сколько и какие письма в очереди.

postcat -q — прочитать письмо в почтовой очереди (задав его идентификатор, полученный из mailq)

postconf myhostname — проверить значение параметра myhostname. С ключом e можно редактировать main.cf, например

Рубрика: overminds | Метки: , | Оставить комментарий

freebsd boot log

/var/run/dmesg.boot

Рубрика: overminds | Метки: , | Оставить комментарий

ispmanager пропало меню

И не поможет. Эта команда обновляет кэш приложений, которые видит ISPmanager. Если возникают проблемы с отображением меню, нужно очищать xml-кэш:
rm -rf /usr/local/ispmgr/var/.xmlcache
killall ispmgr

Рубрика: overminds | Метки: | Оставить комментарий

debian sources.list

http://linuxforum.ru/viewtopic.php?id=43


## STABLE | Стабильный дистрибутив SQUEEZE
# deb ftp://ftp.ru.debian.org/debian/ stable main contrib non-free
# deb-src ftp://ftp.ru.debian.org/debian/ stable main contrib non-free
# deb http://debian.nsu.ru/debian/ stable main contrib non-free
# deb-src http://debian.nsu.ru/debian/ stable main contrib non-free
# deb http://ftp.corbina.net/debian/ stable main contrib non-free
# deb-src http://ftp.corbina.net/debian/ stable main contrib non-free
# deb http://ftp.debian.chuvsu.ru/debian/ stable main contrib non-free
# deb-src http://ftp.debian.chuvsu.ru/debian/ stable main contrib non-free
# deb http://ftp.psn.ru/debian/ stable main contrib non-free
# deb-src http://ftp.psn.ru/debian/ stable main contrib non-free
# deb http://mirror2.corbina.ru/debian/ stable main contrib non-free
# deb-src http://mirror2.corbina.ru/debian/ stable main contrib non-free
# deb http://mirror.svk.su/debian/ stable main contrib non-free
# deb-src http://mirror.svk.su/debian/ stable main contrib non-free
# deb http://mirror.yandex.ru/debian/ stable main contrib non-free
# deb-src http://mirror.yandex.ru/debian/ stable main contrib non-free

## TESTING | Тестируемый дистрибутив
# deb ftp://ftp.ru.debian.org/debian/ testing main contrib non-free
# deb-src ftp://ftp.ru.debian.org/debian/ testing main contrib non-free
# deb http://ftp.ru.debian.org/debian/ testing main contrib non-free
# deb-src http://ftp.ru.debian.org/debian/ testing main contrib non-free
# deb http://debian.nsu.ru/debian/ testing main contrib non-free
# deb-src http://debian.nsu.ru/debian/ testing main contrib non-free
# deb http://ftp.corbina.net/debian/ testing main contrib non-free
# deb-src http://ftp.corbina.net/debian/ testing main contrib non-free
# deb http://ftp.debian.chuvsu.ru/debian/ testing main contrib non-free
# deb-src http://ftp.debian.chuvsu.ru/debian/ testing main contrib non-free
# deb http://ftp.psn.ru/debian/ testing main contrib non-free
# deb-src http://ftp.psn.ru/debian/ testing main contrib non-free
# deb http://mirror2.corbina.ru/debian/ testing main contrib non-free
# deb-src http://mirror2.corbina.ru/debian/ testing main contrib non-free
# deb http://mirror.svk.su/debian/ testing main contrib non-free
# deb-src http://mirror.svk.su/debian/ testing main contrib non-free
# deb http://mirror.yandex.ru/debian/ testing main contrib non-free
# deb-src http://mirror.yandex.ru/debian/ testing main contrib non-free

## UNSTABLE | Нестабильный дистрибутив SID
# deb ftp://ftp.ru.debian.org/debian/ unstable main contrib non-free
# deb-src ftp://ftp.ru.debian.org/debian/ unstable main contrib non-free
# deb http://ftp.ru.debian.org/debian/ unstable main contrib non-free
# deb-src http://ftp.ru.debian.org/debian/ unstable main contrib non-free
# deb http://debian.nsu.ru/debian/ unstable main contrib non-free
# deb-src http://debian.nsu.ru/debian/ unstable main contrib non-free
# deb http://ftp.corbina.net/debian/ unstable main contrib non-free
# deb-src http://ftp.corbina.net/debian/ unstable main contrib non-free
# deb http://ftp.debian.chuvsu.ru/debian/ unstable main contrib non-free
# deb-src http://ftp.debian.chuvsu.ru/debian/ unstable main contrib non-free
# deb http://ftp.psn.ru/debian/ unstable main contrib non-free
# deb-src http://ftp.psn.ru/debian/ unstable main contrib non-free
# deb http://mirror2.corbina.ru/debian/ unstable main contrib non-free
# deb-src http://mirror2.corbina.ru/debian/ unstable main contrib non-free
# deb http://mirror.svk.su/debian/ unstable main contrib non-free
# deb-src http://mirror.svk.su/debian/ unstable main contrib non-free
# deb http://mirror.yandex.ru/debian/ unstable main contrib non-free
# deb-src http://mirror.yandex.ru/debian/ unstable main contrib non-free

## APTtoSID
# deb http://aptosid.com/debian sid main fix.main

## OFFICIAL SQUEEZE SECURITY | Обновления безопасности SQUEEZE
# deb ftp://ftp.ru.debian.org/debian-security squeeze/updates main non-free contrib
# deb-src ftp://ftp.ru.debian.org/debian-security squeeze/updates main non-free contrib
# deb http://ftp.ru.debian.org/debian-security squeeze/updates main non-free contrib
# deb-src http://ftp.ru.debian.org/debian-security squeeze/updates main non-free contrib
# deb http://debian.nsu.ru/debian-security squeeze/updates main non-free contrib
# deb-src http://debian.nsu.ru/debian-security squeeze/updates main non-free contrib
# deb http://ftp.corbina.net/debian-security squeeze/updates main non-free contrib
# deb-src http://ftp.corbina.net/debian-security squeeze/updates main non-free contrib
# deb http://ftp.debian.chuvsu.ru/debian-security squeeze/updates main non-free contrib
# deb-src http://ftp.debian.chuvsu.ru/debian-security squeeze/updates main non-free contrib
# deb http://ftp.psn.ru/debian-security squeeze/updates main non-free contrib
# deb-src http://ftp.psn.ru/debian-security squeeze/updates main non-free contrib
# deb http://mirror2.corbina.ru/debian-security squeeze/updates main non-free contrib
# deb-src http://mirror2.corbina.ru/debian-security squeeze/updates main non-free contrib
# deb http://mirror.svk.su/debian-security squeeze/updates main non-free contrib
# deb-src http://mirror.svk.su/debian-security squeeze/updates main non-free contrib
# deb http://mirror.yandex.ru/debian-security squeeze/updates main non-free contrib
# deb-src http://mirror.yandex.ru/debian-security squeeze/updates main non-free contrib

## OFFICIAL SQUEEZE BACKPORTS | Новые версии пакетов для SQUEEZE
# deb ftp://ftp.ru.debian.org/debian-backports squeeze-backports main contrib
# deb-src ftp://ftp.ru.debian.org/debian-backports squeeze-backports main contrib
# deb http://ftp.ru.debian.org/debian-backports squeeze-backports main contrib
# deb-src http://ftp.ru.debian.org/debian-backports squeeze-backports main contrib
# deb http://debian.nsu.ru/debian-backports squeeze-backports main contrib
# deb-src http://debian.nsu.ru/debian-backports squeeze-backports main contrib
# deb http://ftp.corbina.net/debian-backports squeeze-backports main contrib
# deb-src http://ftp.corbina.net/debian-backports squeeze-backports main contrib
# deb http://ftp.debian.chuvsu.ru/debian-backports squeeze-backports main contrib
# deb-src http://ftp.debian.chuvsu.ru/debian-backports squeeze-backports main contrib
# deb http://ftp.psn.ru/debian-backports squeeze-backports main contrib
# deb-src http://ftp.psn.ru/debian-backports squeeze-backports main contrib
# deb http://mirror2.corbina.ru/debian-backports squeeze-backports main contrib
# deb-src http://mirror2.corbina.ru/debian-backports squeeze-backports main contrib
# deb http://mirror.svk.su/debian-backports squeeze-backports main contrib
# deb-src http://mirror.svk.su/debian-backports squeeze-backports main contrib
# deb http://mirror.yandex.ru/debian-backports squeeze-backports main contrib
# deb-src http://mirror.yandex.ru/debian-backports squeeze-backports main contrib

## OFFICIAL SQUEEZE PROPOSED
# deb ftp://ftp.ru.debian.org/debian squeeze-proposed-updates main contrib non-free
# deb-src ftp://ftp.ru.debian.org/debian squeeze-proposed-updates main contrib non-free
# deb http://ftp.ru.debian.org/debian squeeze-proposed-updates main contrib non-free
# deb-src http://ftp.ru.debian.org/debian squeeze-proposed-updates main contrib non-free
# deb http://debian.nsu.ru/debian squeeze-proposed-updates main contrib non-free
# deb-src http://debian.nsu.ru/debian squeeze-proposed-updates main contrib non-free
# deb http://ftp.corbina.net/debian squeeze-proposed-updates main contrib non-free
# deb-src http://ftp.corbina.net/debian squeeze-proposed-updates main contrib non-free
# deb http://ftp.debian.chuvsu.ru/debian squeeze-proposed-updates main contrib non-free
# deb-src http://ftp.debian.chuvsu.ru/debian squeeze-proposed-updates main contrib non-free
# deb http://ftp.psn.ru/debian squeeze-proposed-updates main contrib non-free
# deb-src http://ftp.psn.ru/debian squeeze-proposed-updates main contrib non-free
# deb http://mirror2.corbina.ru/debian squeeze-proposed-updates main contrib non-free
# deb-src http://mirror2.corbina.ru/debian squeeze-proposed-updates main contrib non-free
# deb http://mirror.svk.su/debian squeeze-proposed-updates main contrib non-free
# deb-src http://mirror.svk.su/debian squeeze-proposed-updates main contrib non-free
# deb http://mirror.yandex.ru/debian squeeze-proposed-updates main contrib non-free
# deb-src http://mirror.yandex.ru/debian squeeze-proposed-updates main contrib non-free

## OFFICIAL SQUEEZE UPDATES | Обновления пакетов SQUEEZE (бывший VOLATILE)
# deb ftp://ftp.ru.debian.org/debian squeeze-updates main
# deb-src ftp://ftp.ru.debian.org/debian squeeze-updates main
# deb http://ftp.ru.debian.org/debian squeeze-updates main
# deb-src http://ftp.ru.debian.org/debian squeeze-updates main
# deb http://debian.nsu.ru/debian squeeze-updates main
# deb-src http://debian.nsu.ru/debian squeeze-updates main
# deb http://ftp.corbina.net/debian squeeze-updates main
# deb-src http://ftp.corbina.net/debian squeeze-updates main
# deb http://ftp.debian.chuvsu.ru/debian squeeze-updates main
# deb-src http://ftp.debian.chuvsu.ru/debian squeeze-updates main
# deb http://ftp.psn.ru/debian squeeze-updates main
# deb-src http://ftp.psn.ru/debian squeeze-updates main
# deb http://mirror2.corbina.ru/debian squeeze-updates main
# deb-src http://mirror2.corbina.ru/debian squeeze-updates main
# deb http://mirror.svk.su/debian squeeze-updates main
# deb-src http://mirror.svk.su/debian squeeze-updates main
# deb http://mirror.yandex.ru/debian squeeze-updates main
# deb-src http://mirror.yandex.ru/debian squeeze-updates main

## UNOFFICIAL | Неофициальные версии пакетов от мейнтейнеров
# deb http://unofficial.debian-maintainers.org/ squeeze main contrib non-free restricted
# deb http://unofficial.debian-maintainers.org/ squeeze main contrib non-free restricted
# deb http://unofficial.debian-maintainers.org/ sid main contrib non-free restricted
# deb-src http://unofficial.debian-maintainers.org/ sid main contrib non-free restricted
# deb http://ftp.debian-ports.org/debian/ unstable main

## KDE4 | Для SID (для настройки APT посетите http://qt-kde.debian.net)
# deb http://qt-kde.debian.net/debian experimental-snapshots main
# deb-src http://qt-kde.debian.net/debian experimental-snapshots main

## TRINITY | Форк KDE3
# deb http://ppa.quickbuild.pearsoncomputing.net/trinity/trinity/debian squeeze main
# deb-src http://ppa.quickbuild.pearsoncomputing.net/trinity/trinity/debian squeeze main
# deb http://ppa.quickbuild.pearsoncomputing.net/trinity/trinity-builddeps/debian squeeze main
# deb-src http://ppa.quickbuild.pearsoncomputing.net/trinity/trinity-builddeps/debian squeeze main

## XFCE
# deb http://www.debian-desktop.org/pub/linux/debian/xfce46 lenny xfce460
# deb-src http://www.debian-desktop.org/pub/linux/debian/xfce46 lenny xfce460

## ENLIGHTENMENT DR16, DR17
# deb http://packages.enlightenment.org/debian/ squeeze main extras
# deb http://packages.enlightenment.org/debian/ sid main extras
# deb http://debian.alphagemini.org/ unstable main

## ELIVE | ENLIGHTENMENT DR17 + LiveCD
# deb http://repository.elivecd.org lenny drivers efl elive games main multimedia other ports tests
# deb http://repository.elivecd.org elive drivers efl elive games main ports tests

## DEBIAN MULTIMEDIA
# deb http://www.debian-multimedia.org squeeze main non-free
# deb ftp://ftp.debian-multimedia.org squeeze main non-free
# deb http://www.debian-multimedia.org sid main non-free
# deb ftp://ftp.debian-multimedia.org sid main non-free
# deb-src http://www.debian-multimedia.org sid main
# deb-src ftp://ftp.debian-multimedia.org sid main

## OPERA
# deb http://deb.opera.com/opera/ squeeze non-free
# deb http://deb.opera.com/opera-beta/ squeeze non-free
# deb http://deb.opera.com/opera/ sid non-free
# deb http://deb.opera.com/opera-beta/ sid non-free

## JABBIM
# deb http://repo.palatinus.cz/ stable desktop
# deb http://repo.palatinus.cz/ testing desktop
# deb http://repo.palatinus.cz/ unstable desktop

## QUTIM
# deb http://qutim.org/debian/ stable main
# deb http://qutim.org/debian/ testing main
# deb http://qutim.org/debian/ unstable main

## GAJIM
# deb ftp://ftp.gajim.org/debian stable main
# deb-src ftp://ftp.gajim.org/debian stable main
# deb ftp://ftp.gajim.org/debian unstable main
# deb-src ftp://ftp.gajim.org/debian unstable main

## RSSOWL
# deb http://packages.rssowl.org/debian squeeze main

## GOOGLE
# deb http://dl.google.com/linux/deb/ stable non-free main

## YANDEX
# deb http://repo.yandex.ru/debian squeeze main non-free

## RUSSIAN MAN PAGES | Русские справочные страницы
# deb http://manpages.ylsoftware.com/debian/ all main

## Hadret's DEBIAN PPA
# deb http://hadret.rootnode.net/debian/ unstable main
# deb-src http://hadret.rootnode.net/debian/ unstable main
# deb http://hadret.rootnode.net/debian/ experimental main
# deb-src http://hadret.rootnode.net/debian/ experimental main

## Darth Revan's DEBIAN PPA | Темы иконок, Skype, mrim-prpl, Bimoid и др.
# deb http://repo.sudouser.com/debian/extras/ debian main contrib non-free
# deb http://repo.sudouser.com/debian/mrim-prpl/ debian main contrib non-free
# deb http://repo.sudouser.com/debian/bimoid/ debian main contrib non-free

## FRIKELPLATZ | Новейшие версии популярных пакетов
# deb http://frickelplatz.de/debian sid main contrib non-free

Рубрика: overminds | Метки: , , | Оставить комментарий

freelander i10

Вход в инженерное меню *2366*#

Другие коды:
BASEBAND_VERSION_CMD *789*2#
BATTERY_LOG *983*25#
BOARD_CODE *983*7#
ENGINEERCODE_LISTVIEW *987*0#
ENGINEER_MODE_AGPS *983*17#
ENGINEER_MODE_SYSTEMLOG *983*16#
FACTORY_RECOVER *983*57#
GPS_TEST *983*47#
NETWORK_LOCK_STATE *983*239#
PRODUCE_INFO *983*154#
SELF_TEST *983*70#
SELF_TEST_DEV *085*#
TEST_LIST *983*0#
ZTE_CUSTOM_VERSION_CMD *789*1#
ZTE_HARDWARE_TEST_BT *983*28#
ZTE_HARDWARE_TEST_WIFI *983*93#
ZTE_VERSION_CMD *983*32#

Рубрика: overminds | Метки: | Оставить комментарий

iops latency

http://habrahabr.ru/post/154235/

Очень частой проблемой, является попытка понять «насколько быстрый сервер?» Среди всех тестов наиболее жалко выглядят попытки оценить производительность дисковой подсистемы. Вот ужасы, которые я видел в своей жизни:
научная публикация, в которой скорость кластерной FS оценивали с помощью dd (и включенным файловым кешем, то есть без опции direct)
использование bonnie++
использование iozone
использование пачки cp с измерениема времени выполнения
использование iometer с dynamo на 64-битных системах

Это всё совершенно ошибочные методы. Дальше я разберу более тонкие ошибки измерения, но в отношении этих тестов могу сказать только одно — выкиньте и не используйте.

bonnie++ и iozone меряют скорость файловой системы. Которая зависит от кеша, задумчивости ядра, удачности расположения FS на диске и т.д. Косвенно можно сказать, что если в iozone получились хорошие результаты, то это либо хороший кеш, либо дурацкий набор параметров, либо действительно быстрый диск (угадайте, какой из вариантов достался вам). bonnie++ вообще сфокусирована на операциях открытия/закрытия файлов. т.е. производительность диска она особо не тестирует.

dd без опции direct показывает лишь скорость кеша — не более. В некоторых конфигурациях вы можете получать линейную скорость без кеша выше, чем с кешем. В некоторых вы будете получать сотни мегабайт в секунду, при линейной производительности в единицы мегабайт.

С опцией же direct (iflag=direct для чтения, oflag=direct для записи) dd проверяет лишь линейную скорость. Которая совершенно не равна ни максимальной скорости (если мы про рейд на много дисков, то рейд в несколько потоков может отдавать большую скорость, чем в один), ни реальной производительности.

IOmeter — лучше всего перечисленного, но у него есть проблемы при работе в linux. 64-битная версия неправильно рассчитывает тип нагрузки и показывает заниженные результаты (для тех, кто не верит — запустите его на ramdisk).

Спойлер: правильная утилита для linux — fio. Но она требует очень вдумчивого составления теста и ещё более вдумчивого анализа результатов. Всё, что ниже — как раз подготовка теории и практические замечания по работе с fio.

Постановка задачи

(текущая VS максимальная производительность)
Сейчас будет ещё больше скучных букв. Если кого-то интересует количество попугаев на его любимой SSD’шке, ноутбучном винте и т.д. — см рецепты в конце статьи.

Все современные носители, кроме ramdisk’ов, крайне негативно относятся к случайным операциям записи. Для HDD нет разницы запись или чтение, важно, что головки гонять по диску. Для SSD же случайная операция чтения ерунда, а вот запись малым блоком приводит к copy-on-write. Минимальный размер записи — 1-2 Мб, пишут 4кб. Нужно прочитать 2Мб, заменить в них 4кб и записать обратно. В результате в SSD’шку уходит, например, 400 запросов в секундну на запись 4кб которые превращаются в чтение 800 Мб/с (!!!!) и записи их обратно. (Для ramdisk’а такая проблема могла бы быть тоже, но интрига в том, что размер «минимального блока» для DDR составляет около 128 байт, а блоки в тестах обычно 4кб, так что гранулярность DDR в тестах дисковой производительности оперативной памяти не важна).

Этот пост не про специфику разных носителей, так что возвращаемся к общей проблеме.

Мы не можем мерять запись в Мб/с. Важным является сколько перемещений головки было, и сколько случайных блоков мы потревожили на SSD. Т.е. счёт идёт на количество IO operation, а величина IO/s называется IOPS. Таким образом, когда мы меряем случайную нагрузку, мы говорим про IOPS (иногда wIOPS, rIOPS, на запись и чтение соотв.). В крупных системах используют величину kIOPS, (внимание, всегда и везде, никаких 1024) 1kIOPS = 1000 IOPS.

И вот тут многие попадают в ловушку первого рода. Они хотят знать, «сколько IOPS’ов» выдаёт диск. Или полка дисков. Или 200 серверных шкафов, набитые дисками под самые крышки.

Тут важно различать число выполненных операций (зафиксировано, что с 12:00:15 до 12:00:16 было выполнено 245790 дисковых операций — т.е. нагрузка составила 245kIOPS) и то, сколько система может выполнить операций максимум.

Число выполненых операций всегда известно и легко измерить. Но когда мы говорим про дисковую операцию, мы говорим про неё в будущем времени. «сколько операций может выполнить система?» — «каких операций?». Разные операции дают разную нагрузку на СХД. Например, если кто-то пишет случайными блоками по 1Мб, то он получит много меньше iops, чем если он будет читать последовательно блоками по 4кб.

И если в случае пришедшей нагрузки мы говорим о том, сколько было обслужено запросов «какие пришли, такие и обслужили», то в случае планирования, мы хотим знать, какие именно iops’ы будут.

Драма состоит в том, что никто не знает, какие именно запросы придут. Маленькие? Большие? Подряд? В разнобой? Будут они прочитаны из кеша или придётся идти на самое медленное место и выковыривать байтики с разных половинок диска?

Я не буду нагнетать драму дальше, скажу, что существует простой ответ:
Тест диска (СХД/массива) на best case (попадание в кеш, последовательные операции)
Тест диска на worst case. Чаще всего такие тесты планируются с знанием устройства диска. «У него кеш 64Мб? А если я сделаю размер области тестирования в 2Гб?». Жёсткий диск быстрее читает с внешней стороны диска? А если я размещу тестовую область на внутренней (ближшей к шпинделю) области, да так, чтобы проходимый головками путь был поболе? У него есть read ahead предсказание? А если я буду читать в обратном порядке? И т.д.

В результате мы получаем цифры, каждая из которых неправильная. Например: 15kIOPS и 150 IOPS.

Какая будет реальная производительность системы? Это определяется только тем, как близко будет нагрузка к хорошему и плохому концу. (Т.е. банальное «жизнь покажет»).

Чаще всего фокусируются на следующих показателях:
Что best case всё-таки best. Потому что можно дооптимизироваться до такого, что best case от worst будет отличаться едва-едва. Это плохо (ну или у нас такой офигенный worst).
На worst. Имея его мы можем сказать, что СХД будет работать быстрее, чем полученный показатель. Т.е. если мы получили 3000 IOPS, то мы можем смело использовать систему/диск в нагрузке «до 2000».

Ну и про размер блока. Традиционно тест идёт с размером блока в 4к. Почему? Потому что это стандартный размер блока, которым оперируют ОС при сохранении файла. Это размер страницы памяти и вообще, Очень Круглое Компьютерное Число.

Нужно понимать, что если система обрабатывает 100 IOPS с 4к блоком (worst), то она будет обрабатывать меньше при 8к блоке (не менее 50 IOPS, вероятнее всего, в районе 70-80). Ну и на 1Мб блоке мы увидим совсем другие цифры.

Всё? Нет, это было только вступление. Всё, что написано выше, более-менее общеизвестно. Нетривиальные вещи начинаются ниже.

Для начала мы рассмотрим понятие «зависимых IOPS’ов». Представим себе, что у нас приложение работает так:
прочитать запись
поменять запись
записать запись обратно

Для удобства будем полагать, что время обработки нулевое. Если каждый запрос на чтение и запись будет обслуживаться 1мс, сколько записей в секунду сможет обработать приложение? Правильно, 500. А если мы запустим рядом вторую копию приложения? На любой приличной системе мы получим 1000. Если мы получим значительно меньше 1000, значит мы достигли предела производительности системы. Если нет — значит, что производительность приложения с зависимыми IOPS’ами ограничивается не производительностью СХД, а двумя параметрами: latency и уровнем зависимости IOPS’ов.

Начнём с latency. Latency — время выполнения запроса, задержка перед ответом. Обычно используют величину, «средняя задержка». Более продвинутые используют медиану среди всех операций за некоторый интервал (чаще всего за 1с). Latency очень сложная для измерения величина. Связано это с тем, что на любой СХД часть запросов выполняется быстро, часть медленно, а часть может попасть в крайне неприятную ситуацию и обслуживаться в десятки раз дольше остальных.

Интригу усиливает наличие очереди запросов, в рамках которой может осуществляться переупорядочивание запросов и параллельное их исполнение. У обычного SATA’шного диска глубина очереди (NCQ) — 31, у мощных систем хранения данных может достигать нескольких тысяч. (заметим, что реальная длина очереди (число ожидающих выполнения запросов) — это параметр скорее негативный, если в очереди много запросов, то они дольше ждут, т.е. тормозят. Любой человек, стоявший в час пик в супермаркете согласится, что чем длиннее очередь, тем фиговее обслуживание.

Latency напрямую влияет на производительность последовательного приложения, пример которого приведён выше. Выше latency — ниже производительность. При 5мс максимальное число запросов — 200 шт/с, при 20мс — 50. При этом если у нас 100 запросов будут обработаны за 1мс, а 9 запросов — за 100мс, то за секунду мы получим всего 109 IOPS, при медиане в 1мс и avg (среднем) в 10мс.

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

Пример: запуск приложения (типовая десктопная задача) практически на 100% последовательный. Прочитали приложение, прочитали список нужных библиотек, по-очереди прочитали каждую библиотеку… Именно потому на десктопах так пламенно любят SSD — у них микроскопическая задержка (микросекундная) на чтение — разумеется, любимый фотошоп или блендер запускается в десятые доли секунды.

А вот, например, работа нагруженного веб-сервера практически параллельная — каждый следующий клиент обслуживается независимо от соседнего, т.е. latency влияет только на время обслуживания каждого клиента, но не на «максимальное число клиентов». А, признаемся, что 1мс, что 10мс — для веб-сервера всё равно. (Зато не «всё равно», сколько таких параллельно запросов по 10мс можно отправить).

Трешинг. Я думаю, с этим явлением пользователи десктопов знакомы даже больше, чем сисадмины. Жуткий хруст жёсткого диска, невыразимые тормоза, «ничего не работает и всё тормозит».

По мере того, как мы начинаем забивать очередь диска (или хранилища, повторю, в контексте статьи между ними нет никакой разницы), у нас начинает резко вырастать latency. Диск работает на пределе возможностей, но входящих обращений больше, чем скорость их обслуживания. Latency начинает стремительно расти, достигая ужасающих цифр в единицы секунд (и это при том, что приложению, например, для завершения работы нужно сделать 100 операций, которые при latency в 5 мс означали полусекундную задержку…). Это состояние называется trashing.

Вы будете удивлены, но любой диск или хранилище способны показывать БОЛЬШЕ IOPS’ов в состоянии trashing, чем в нормальной загрузке. Причина проста: если в нормальном режиме очередь чаще всего пустая и кассир скучает, ожидая клиентов, то в условии трешинга идёт постоянное обслуживание. (Кстати, вот вам и объяснение, почему в супермаркетах любят устраивать очереди — в этом случае производительность кассиров максимальная). Правда, это сильно не нравится клиентам. И в хороших супермаркетах хранилищах такого режима стараются избегать. Если дальше начинать поднимать глубину очереди, то производительность начнёт падать из-за того, что переполняется очередь и запросы стоят в очереди чтобы встать в очередь (да-да, и порядковый номер шариковой ручкой на на руке).

И тут нас ждёт следующая частая (и очень трудно опровергаемая) ошибка тех, кто меряет производительность диска.

Контроль latency во время теста

Они говорят «у меня диск выдаёт 180 IOPS, так что если взять 10 дисков, то это будет аж 1800 IOPS». (Именно так думают плохие супермаркеты, сажая меньше кассиров, чем нужно). При этом latency оказывается запредельной — и «так жить нельзя».

Реальный тест производительности требует контроля latency, то есть подбора таких параметров тестирования, чтобы latency оставалась ниже оговоренного лимита.

И вот тут вот мы сталкиваемся со второй проблемой: а какого лимита? Ответить на этот вопрос теория не может — этот показатель является показателем качества обслуживания. Другими словами, каждый выбирает для себя сам.

Лично я для себя провожу тесты так, чтобы latency оставалась не более 10мс. Этот показатель я для себя считаю потолком производительности хранилища. (при этом в уме я для себя считаю, что предельный показатель, после которого начинают ощущаться лаги — это 20мс, но помните, про пример выше с 900 по 1мс и 10 по 100мс, у которого avg стала 10мс? Вот для этого я и резервирую себе +10мс на случайные всплески).

Параллелизм

Выше мы уже рассмотрели вопрос с зависимыми и независимыми IOPS’ами. Производительность зависимых Iops’ов точно контролируется latency, и этот вопрос мы уже обсудили. А вот производительность в независимых iops’ах (т.е. при параллельной нагрузке), от чего она зависит?

Ответ — от фантазии того, кто изобретал диск или конструировал хранилище. Мы можем рассуждать о числе головок, шпинделей и параллельных очередей записи в SSD, но всё это спекуляции. С точки зрения практического использования нас интересует один вопрос: СКОЛЬКО? Сколько мы можем запустить параллельных потоков нагрузки? (Не забываем про latency, т.к. если мы разрешим отправить latency в небеса, то число параллельных потоков отправится туда же, правда, не с такой скоростью). Итак, вопрос: сколько параллельных потоков мы можем выполнять при latency ниже заданного порога? Именно на этот вопрос должны отвечать тесты.

SAN и NAS

Отдельно нужно говорить про ситуацию, когда хранилище подключено к хосту через сеть с использованием TCP. О TCP нужно писать, писать, писать и ещё раз писать. Достаточно сказать, что в линуксе существует 12 разных алгоритмов контроля заторов в сети (congestion), которые предназначены для разных ситуаций. И есть около 20 параметров ядра, каждый из которых может радикальным образом повлиять на попугаи на выходе (пардон, результаты теста).

С точки зрения оценки производительности мы должны просто принять такое правило: для сетевых хранилищ тест должен осуществляться с нескольких хостов (серверов) параллельно. Тесты с одного сервера не будут тестом хранилища, а будут интегрированным тестом сети, хранилища и правильности настройки самого сервера.

bus saturation

Последний вопрос — это вопрос затенения шины. О чём речь? Если у нас ssd способна выдать 400 МБ/с, а мы её подключаем по SATA/300, то очевидно, что мы не увидим всю производительность. Причём с точки зрения latency проблема начнёт проявляться задолго до приближения к 300МБ/с, ведь каждому запросу (и ответу на него) придётся ждать своей очереди, чтобы проскочить через бутылочное горлышко SATA-кабеля.

Но бывают ситуации более забавные. Например, если у вас есть полка дисков, подключенных по SAS/300×4 (т.е. 4 линии SAS по 300МБ каждая). Вроде бы много. А если в полке 24 диска? 24*100=2400 МБ/с, а у нас есть всего 1200 (300х4).

Более того, тесты на некоторых (серверных!) материнских платах показали, что встроенные SATA-контроллеры часто бывают подключены через PCIx4, что не даёт максимально возможной скорости всех 6 SATA-разъёмов.

Повторю, главной проблемой в bus saturation является не выедание «под потолок» полосы, а увеличение latency по мере загрузки шины.

Трюки производителей

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

Во-вторых, во многих системах первая запись хуже последующих из-за всяких механизмов снапшотов, thin provision’а, дедупликации, компрессии, late allocation, sparse placement и т.д. Другими словами, тестировать следует после первичной записи.

В третьих — кеш. Если мы тестируем worst case, то нам нужно знать, как будет вести себя система когда кеш не помогает. Для этого нужно брать такой размер теста, чтобы мы гарантированно читали/писали «мимо кеша», то есть выбивались за объёмы кеша.

Кеш на запись — особая история. Он может копить все запросы на запись (последовательные и случайные) и писать их в комфортном режиме. Единственным методом worst case является «трешинг кеша», то есть посыл запросов на запись в таком объёме и так долго, чтобы write cache перестал стправляться и был вынужден писать данные не в комфортном режиме (объединяя смежные области), а скидывать случайные данные, осуществляя random writing. Добиться этого можно только с помощью многократного превышения области теста над размером кеша.

Вердикт — минимум x10 кеш (откровенно, число взято с потолка, механизма точного расчёта у меня нет).

Локальный кеш ОС

Разумеется, тест должен быть без участия локального кеша ОС, то есть нам надо запускать тест в режиме, который бы не использовал кеширование. В линуксе это опция O_DIRECT при открытии файла (или диска).

Описание теста

Итого:
1) Мы тестируем worst case — 100% размера диска, который в несколько раз больше предположительного размера кеша на хранилище. Для десктопа это всего лишь «весь диск», для индустриальных хранилищ — LUN или диск виртуальной машины размером от 1Тб и больше. (Хехе, если вы думаете, что 64Гб RAM-кеша это много…).
2) Мы ведём тест блоком в 4кб размером.
3) Мы подбираем такую глубину параллельности операций, чтобы latency оставалось в разумных пределах.

На выходе нас интересуют параметры: число IOPS, latency, глубина очереди. Если тест запускался на нескольких хостах, то показатели суммируются (iops и глубина очереди), а для latency берётся либо avg, либо max от показателей по всем хостам.

fio

Тут мы переходим к практической части. Есть утилита fio которая позволяет добиться нужного нам результата.

Нормальный режим fio подразумевает использование т.н. job-файла, т.е. конфига, который описывает как именно выглядит тест. Примеры job-файлов приведены ниже, а пока что обсудим принцип работы fio.

fio выполняет операции над указанным файлом/файлами. Вместо файла может быть указано устройство, т.е. мы можем исключить файловую систему из рассмотрения. Существует несколько режимов тестирования. Нас интересует randwrite, randread и randrw. К сожалению, randrw даёт нам зависимые iops’ы (чтение идёт после записи), так что для получения полностью независимого теста нам придётся делать две параллельные задачи — одна на чтение, вторая на запись (randread, randwrite).

И нам придётся сказать fio делать «preallocation». (см выше про трюки производителей). Дальше мы фиксируем размер блока (4к).

Ещё один параметр — метод доступа к диску. Наиболее быстрым является libaio, именно его мы и будем использовать.

Практические рецепты

Установка fio: apt-get install fio (debian/ubntu). Если что, в squeze ещё её нет.
Утилита весьма хитро запрятана, так что «home page» у неё просто нет, только гит-репозиторий. Вот одно из зеркал: freecode.com/projects/fio

При тесте диска запускать её надо от root’а.

тесты на чтение

Запуск: fio read.ini
Содержимое read.ini
[readtest]
blocksize=4k
filename=/dev/sda
rw=randread
direct=1
buffered=0
ioengine=libaio
iodepth=32

Задача подобрать такой iodepth, чтобы avg.latency была меньше 10мс.

Тесты на запись

(внимание! Ошибётесь буквой диска — останетесь без данных)
[writetest]
blocksize=4k
filename=/dev/sdz
rw=randwrite
direct=1
buffered=0
ioengine=libaio
iodepth=32

Гибридные тесты

самая вкусная часть:
(внимание! Ошибётесь буквой диска — останетесь без данных)
[readtest]
blocksize=4k
filename=/dev/sdz
rw=randread
direct=1
buffered=0
ioengine=libaio
iodepth=32
[writetest]
blocksize=4k
filename=/dev/sdz
rw=randwrite
direct=1
buffered=0
ioengine=libaio
iodepth=32

Анализ вывода

Во время теста мы видим что-то вроде такого:
Jobs: 2 (f=2): [rw] [2.8% done] [13312K/11001K /s] [3250/2686 iops] [eta 05m:12s]

В квадратных скобках — цифры IOPS’ов. Но радоваться рано — ведь нас интересует latency.

На выходе (по Ctrl-C, либо по окончании) мы получим примерно вот такое:

^C
fio: terminating on signal 2
read: (groupid=0, jobs=1): err= 0: pid=11048
read : io=126480KB, bw=14107KB/s, iops=3526, runt= 8966msec
slat (usec): min=3, max=432, avg= 6.19, stdev= 6.72
clat (usec): min=387, max=208677, avg=9063.18, stdev=22736.45
bw (KB/s) : min=10416, max=18176, per=98.74%, avg=13928.29, stdev=2414.65
cpu : usr=1.56%, sys=3.17%, ctx=15636, majf=0, minf=57
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=99.9%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0%
issued r/w: total=31620/0, short=0/0
lat (usec): 500=0.07%, 750=0.99%, 1000=2.76%
lat (msec): 2=16.55%, 4=35.21%, 10=35.47%, 20=3.68%, 50=0.76%
lat (msec): 100=0.08%, 250=4.43%
write: (groupid=0, jobs=1): err= 0: pid=11050
write: io=95280KB, bw=10630KB/s, iops=2657, runt= 8963msec
slat (usec): min=3, max=907, avg= 7.60, stdev=11.68
clat (usec): min=589, max=162693, avg=12028.23, stdev=25166.31
bw (KB/s) : min= 6666, max=14304, per=100.47%, avg=10679.50, stdev=2141.46
cpu : usr=0.49%, sys=3.57%, ctx=12075, majf=0, minf=25
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=99.9%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0%
issued r/w: total=0/23820, short=0/0
lat (usec): 750=0.03%, 1000=0.37%
lat (msec): 2=9.04%, 4=24.53%, 10=49.72%, 20=9.56%, 50=0.82%
lat (msec): 100=0.07%, 250=5.87%

Нас из этого интересует (в минимальном случае) следующее:
read: iops=3526 clat=9063.18 (usec), то есть 9мс.
write: iops=2657 clat=12028.23

Не путайте slat и clat. slat — это время отправки запроса (т.е. производительность дискового стека линукса), а clat — это complete latency, то есть та latency, о которой мы говорили. Легко видеть, что чтение явно производительнее записи, да и глубину я указал чрезмерную.

В том же самом примере я снижаю iodepth до 16/16 и получаю:

read 6548 iops, 2432.79usec = 2.4ms
write 5301 iops, 3005.13usec = 3ms

Очевидно, что глубина в 64 (32+32) оказалась перебором, да таким, что итоговая производительность даже упала. Глубина 32 куда более подходящий вариант для теста.

Ориентировки по производительности

Разумеется, все уже расчехляют пи… попугаемерки. Привожу значения, которые я наблюдал:
RAMDISK (rbd) — ~200kIOPS/0.1мс (iodepth=2)
SSD (intel 320ой серии) — 40k IOPS на чтение (0.8мс); около 800 IOPS на запись (после длительного времени тестирования)
SAS диск (15к RPM) — 180 IOPS, 9мс
SATA диск (7.2, WD RE) — 100 IOPS, 12мс
SATA WD Raptor — 140 IOPS, 12mc
SATA WD Green — 40 IOPS, и мне не удалось добиться latency <20 даже с iodepth=1 Предупреждение: Если вы это будете запускать на виртуальных машинах, то а) если за IOPS'ы берут деньги — это будут весьма ощутимые деньги. б) Если у хостера плохое хранилище, которое надеется только на кеш в несколько десятков гигабайт, то тест с большим диском (>1Тб) приведёт к… проблемам у хостера и ваших соседей по хостингу. Некоторые хостеры могут обидеться и попросить вас вон.
с) Не забывайте обнулять диск перед тестом (т.е. dd if=/dev/zero of=/dev/sdz bs=2M oflag=direct)

Рубрика: overminds | Метки: , | Оставить комментарий

find

http://www.ibm.com/developerworks/ru/library/au-unix-find/

в частности, удобно чистить от старого хлама вот такими конструкциями:


$ find $LOGDIR -type d -mtime +0 -exec compress -r {} \;

$ find $LOGDIR -type d -mtime +5 -exec rm -f {} \;

Первая команда просматривает все подкаталоги (-type d), найденные в каталоге $LOGDIR. Те каталоги, файлы в которых изменялись за последние 24 часа (-mtime +0), сжимаются (compress -r {}) для экономии дискового пространства. В целях увеличения свободного пространства на диске вторая команда удаляет файлы (rm -f {}), если они не используются более недели (-mtime +5). Таким образом, в заданные интервалы времени cron автоматически выполняет архивирование каталогов.

Рубрика: overminds | Оставить комментарий

sed

2012-10-03 от slayer

При появлении необходимости замены в во множестве файлов одного набора символов на другой (например для изменения путей, при переносе хостинга или редактировании файлов-зон), можно использовать следующую конструкцию:

find . -type f -exec sed -i 's/mail\.q0\.ru\?./mail\.184v1\.q0\.ru\./' {} \;
При выполнении происходит следующее:
файнд, ищет в текущей директории только файлы и передает их седу, который в свою очередь, меняет все записи «mail.q0.ru» и «mail.q0.ru.» (если быть точным, то не mail.q0.ru. с точкой в конце, а вообще с любым символом, просто в моей систуации, там могла быть только точка) на «mail.184v1.q0.ru.» во всех файлах.
«?.» — обозначает наличие либо отсутствие одного любого символа. Если нужно просто заменить один набор символов другим, просто удаляем «?.»

find * -type f -exec sed -i 's/dbhe21/mysql52/g' {} \; //так должна выглядеть команда. Она заменяет во всех файлах dbhe21 на mysql52

find * -type f -exec sed -i .original 's/dbhe21/mysql52/g' {} \; //во всех файлах происходит замена, но старые файлы сохранятся с расширением .original, что приведет к дубликату всех файлов, которые надо будет удалить.

find ./ -name *.original-type f -exec rm {} \; //удаляет все файлы, заканчивающиеся на .original. Иногда почему-то срабатывает только после второго применения.

Рубрика: overminds | Метки: | Оставить комментарий

freebsd zfs wired ram

zfs выжирает всю доступную память, ограничить:

vm.kmem_size="330M"
vm.kmem_size_max="330M"
vfs.zfs.arc_max="40M"
vfs.zfs.vdev.cache.size="5M"

Рубрика: overminds | Метки: , | Оставить комментарий

freebsd lib32

cd /usr/src
make build32
make install32
ldconfig -32 /usr/lib32

Рубрика: overminds | Метки: , | Оставить комментарий

firebird25 on freebsd

http://veyrona.com/art.php?id=20

Рубрика: overminds | Метки: , | Оставить комментарий

ssl на freebsd

http://www.opennet.ru/base/net/apache_ssl_inst.txt.html

Рубрика: overminds | Метки: , | Оставить комментарий

yum http proxy

I used yum directly to go through a proxy. I had to do something like this:

http_proxy=http://:####/
HTTP_PROXY="$http_proxy"
export http_proxy HTTP_PROXY
ftp_proxy=http://:####/
FTP_PROXY="$ftp_proxy"
export ftp_proxy FTP_PROXY

Рубрика: overminds | Метки: , | Оставить комментарий

+[XEN] hypervisor wallclock nudged; nudging TOD.

фря в pv режиме в xen сыпет на консоль сабж. раз в 15-30 секунд. лечим так:

в дом0


# DOMO(CENTOS)
echo '/bin/echo 1 > /proc/sys/xen/independent_wallclock' >> /etc/rc.local
echo 1 > /proc/sys/xen/independent_wallclock

в домЮ


#add the following lines to /etc/sysctl.conf
machdep.disable_rtc_set = 1
machdep.indipendent_wallclock = 1

сыпать на консоль пересатло, теперь в логах анноит только вот это:


Aug 22 04:58:05 rt init: getty repeating too quickly on port /dev/xc0, sleeping 30 secs

будем искать, как лечить.

Рубрика: overminds | Метки: , , | Оставить комментарий

редирект с http на https apache

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

Рубрика: overminds | Метки: , | Оставить комментарий

самоподписанный сертефикат на centos

http://centos.name/?page/howto/Https/

Рубрика: overminds | Метки: , | Оставить комментарий

postgres сбросить зависшие соединения

Получить список подключений можно командной:

SELECT usename, client_addr, backend_start, current_query FROM pg_stat_activity WHERE datname = 'ИМЯ_БАЗЫ_ДАННЫХ';

Коннекты можно сбросить командой:

SELECT pg_terminate_backend( procpid ) FROM pg_stat_activity WHERE procpid <> pg_backend_pid( ) AND datname = 'ИМЯ_БАЗЫ_ДАННЫХ';

спасибо http://de-gis.livejournal.com/132637.html

Рубрика: overminds | Метки: , | Оставить комментарий

ubuntu + ioncube

http://extremeshok.com/blog/servers/mysql/ubuntu-12-04-web-application-node-nginx-php5-fpm-phpmyadmin-mariadb-mysql-apc-geoip-ioncube-tuning/

Рубрика: overminds | Метки: , | Оставить комментарий

cheet sheets

davechild_linux-command-line

Рубрика: overminds | Оставить комментарий

stdout over ssh


dump -0uaf - /var | ssh remotehost dd of=/dev/rsa0

Рубрика: overminds | Метки: | Оставить комментарий