Опции CFLAGS FreeBSD

Опции CFLAGS FreeBSD:
1. “-О” Компилятор пытается сократить как размер кода, так и время его выполнения. И при этом не выполняет модификаций, которые могут затруднить отладку программы. Включает опции -fno-optimize-size, -fdefer-pop, -fthread-jumps, -fguess-branch-probability, -cprop-registers и-fdelayed-branch. Флаг -fomit-frame-pointer устанавливается только если применяемый отладчик способен работать без использования регистра указателя кадра стека.

2. “-О0″ Действует по умолчанию. Отключает любые оптимизации размера кода и устанавливает флаг -fno-merge-constants.

3. “-О1″ То же, что -О

4. “-О2″ На этом уровне применяются все виды оптимизации, которые не требуют вычисления оптимального выбора между размером и скоростью кода. Кроме флагов, устанавливаемых при -О, дополнительно задействует следующие опции -foptimize-sibling-calls, -fcse-follow-jumps, -fcse-skip-blocks, -fgcae, -expensive-optimizations, -fstrength-reduce, -frerun-cse-after-loop, -frerun-loop-opt, -fcaller-aaves, -fforce-mem, -fpeephole2, -fshedule-insns, -fshedule-insns-after-reload, -fregmove, -fstrict-aliasing, -fdelete-null-pointer-checks и -freorder-blocka. Этот уровень оптимизации не разворачивает циклы, не выполняет оптимизацию подстановок (inlining) и переназначение регистров.

5. “-О3″ В дополнение к опциям, включаемым при -О2, устанавливает также -finline-functions и -frename-registers.

6. “-Os” Оптимизирует размер программы. Устанавливает все опции, действующие при -О3. Устанавливает опции -falign-loops, -falign-jumps, -falign-labels и -falign-functions с параметром =1, что не допускает вставку пустого пространства для применения выравнивания.

Выдернуто из комментариев на http://www.lissyara.su/?id=1326 .

Как удалять старые бэкапы?

один из способов:

/usr/bin/find /var/backup/ -name “*” -mtime +10 -print | /usr/bin/xargs rm -rf

Итого: удаляем из папки /var/backup/ все то, что были изменено более 10 дней назад.

Шпаргалка по Unix (FreeBSD, Linux and etc…)

Такой… Мини-справочник для начинающих.

http://cb.vu/unixtoolbox.xhtml

Ну и в PDF: http://cb.vu/unixtoolbox.pdf

Finding out largest tables on MySQL Server

Finding largest tables on MySQL instance is no brainier in MySQL 5.0+ thanks to Information Schema but I still wanted to post little query I use for the purpose so I can easily find it later, plus it is quite handy in a way it presents information:

SELECT concat(table_schema,'.',table_name),concat(round(table_rows/1000000,2),'M') rows,concat(round(data_length/(1024*1024*1024),2),'G') DATA,concat(round(index_length/(1024*1024*1024),2),'G') idx,concat(round((data_length+index_length)/(1024*1024*1024),2),'G') total_size,round(index_length/data_length,2) idxfrac FROM information_schema.TABLES ORDER BY data_length+index_length DESC LIMIT 10;

http://www.mysqlperformanceblog.com/2008/02/04/finding-out-largest-tables-on-mysql-server/

Как русифицировать консоль во FreeBSD 7.0

Bash: $HOME/.inputrc
set convert-meta off
set input-meta on
set output-meta on

$HOME/.bash_profile
export CHARSET=CP1251
export MM_CHARSET=CP1251
export LANG=ru_RU.CP1251
export LC_ALL=ru_RU.CP1251

Tcsh[Csh] $HOME/.login
setenv CHARSET CP1251
setenv MM_CHARSET CP1251
setenv LANG ru_RU.CP1251
setenv LC_ALL ru_RU.CP1251

Pentium D – совместимость

Совместимость процессоров PentiumD с LGA775 материнскими платами зависит от двух вещей - чипсета и схемы питания процессора.

Чипсеты, с которыми Pentium D могут работать - Intel 865, 945, 955, 965, 975, E7230, nVidia nForce 4 Intel Edition, ATI XPRESS 200, VIA PT880, P4M800, SiS 656 (Cписок не претендует на абсолютную полноту касательно чипсетов сторонних производителей.)

Чипсеты, с которыми Pentium D работать принципиально не могут (ни в одной плате!) – Intel 910, 915, 925, E7221.

Pentium D бывает двух принципиально отличающихся разновидностей – PentiumD 8XX («восьмисотой серии») на ядре Smithfield и Pentium D 9XX («девятисотой серии») на ядре Presler. У этих ядер разные требования к питанию, и не во всех материнской платах, где заработает «восьмисотый» Pentium D, заработает и «девятисотый».

По умолчанию, формально заявленная поддержка Pentium D означает поддержку ядра Smithfield, т.е. «восьмисотой» серии, если явно не сказано иное (например, упомянуто ядро Presler) , однако, подавляющее большинство плат на чипсетах Intel 945/955/975, включая все модели популярных семейств ASUS P5LD2/P5WD2(всех модификаций) работают со всеми Pentium D, включая все «девятисотые».

Большинство плат, поддерживающих «восьмисотые», но не поддерживающих «девятисотые» Pentium D, сделаны на чипсетах i865, nVidia nForce4 SLI Intel Edition, SiS 656 и на момент написания FAQ(июль 2006 года) постепенно исчезают из продажи. Платы на nForce4 SLI Intel Edition к тому же не поддерживают Pentium D 805 и Pentium D 820 - это индивидуальная особенность чипсета

Процессоры Pentium Extreme Edition 840 работают в материнских платах на чипсетах Intel 955/975 и в некоторых платах на чипсетах сторонних производителей. Процессоры Pentium Extreme Edition 955/965 работают только в платах на чипсете Intel 975 и в некоторых платах на чипсетах сторонних производителей. Ни один процессор Intel Pentium Extreme Edition не работает в платах на чипсете Intel 945.

Помните, что наиболее достоверную информацию о совместимости материнской платы и процессора можно всегда почерпнуть из «списка поддерживаемых процессоров» («CPU Support List») с интернет-сайта производителя материнской платы.

FreeBSD: Эмуляция проблемных каналов

В файрволе FreeBSD (IPFW) есть довольно редкая встроенная фича - возможность эмуляции потери пакетов, задержки, полосы пропускания и др. параметров связи.

Эта поддержка включена в подсистему TRAFFIC SHAPER (DUMMYNET).

Настраивается следующим образом:

1. Создаем “канал” (pipe) с необходимыми характеристиками:
ipfw pipe config plr <от 0 до 1> delay <в миллисекундах> bw 300Kbit/s queue 128Kbytes [red] [noerror]

2. Дальше выбираем трафик, который в этот канал будет попадать:
ipfw add pipe

3. Просмотр конфигурации канала: ipfw pipe show

Пример (эмуляция 30% потерь всех пакетов от 192.168.11.40):
ipfw pipe 10 config plr 0.3
ipfw add 10 pipe 10 ip from 192.168.11.40 to any
ipfw pipe show
ipfw show

Подробнее в man ipfw

Область применения данной технологии: шейпер (ограничение скорости по ip-адресам, протоколам), тестирование сетевых решения и программных продуктов в условиях, приближенных к реальным проблемным (или забитым) каналам.

FreeBSD: Средства мониторинга

Во FreeBSD существует огромное количество средств для получения информации о функционировании системы. Однако некоторые из них спрятаны немного нетривиально.

1. Информация о дисках

1. mount - показывает смонтированные подразделы и флаги из монтирования
2. df - показывает смонтированные подразделы, их размер и свободное место на них
3. fdisk /dev/ad0 - показывает информацию о диске ad0 и разделах на нем
4. disklabel /dev/ad0s1 - показывает список подразделов в первом разделе диска ad0
5. swapinfo - показывает список подразделов свопинга на дисках и их использование
6. fstat - показывает список открытых файлов (имена файлов не выводятся)
7. pstat -f - выводит список открытых файлов (имена файлов не выводятся)
8. systat -vmstat n - каждые n секунд выводит количество транзакций с диском в секунду, объем записанных/считанных данных на диск в секунду, средний размер транзакции и процент времени в течение которого диск был занят работой.
9. iostat - выводит информацию, аналогичную systat -vmstat, но не выводит занятости диска по времени и может выводить среднюю статистику с момента загрузки.
10. vmstat - выводит количество операций на диске в секунду
11. /stand/sysinstall - можно посмотреть и изменить разметку диска и монтирование
12. less /etc/fstab - таблица монтирования при загрузке

2. Информация о процессоре и памяти

1. systat -vmstat n - вывод показателей загрузки (number of jobs in the run queue averaged over 1, 5 and 15 min), состояния памяти (в страницах), количества процессов в группах, количество вызовов специальных функций ядра (traps, interrupts, system calls, network software interrupts), использование процессора, трансляции имен, активность свопа, прерывания, а также информацию по использованию диска (см)
2. top - аналогичная информация в сокращенном виде + использование памяти и свопа в мегабайтах, список процессов, отсортированных по использованию процессора.
3. ps afx - список запущенных процессов и время процессора на каждый

3. Информация о сети

1. ifconfig - список сетевых интерфейсов с ip-адресами, масками, mac-адресами, типами карт и их статусами (названия карточек можно посмотреть в файле конфигурации ядра)
2. systat -ifstat n - объем трафика за n секунд на всех сетевых интерфейсах
3. netstat - вывод активных сетевых соединений (сокетов)
4. systat -netstat n - аналог netstat в реальном времени
5. systat -ip n - таблица IP-пакетов и ошибок по типам за n секунд
6. systat -tcp n - таблица TCP-пакетов и ошибок по типам за n секунд
7. systat -icmp n - таблица ICMP-пакетов и ошибок по типам за n секунд
8. netstat -ibt - список интерфейсов, разбитых по ip-адресам (!) с объемом трафика на каждом, количеством ошибок, коллизий, значением watchdog-таймера
9. netstat -r - таблица маршрутизации
10. arp -a - таблица ARP
11. tcpdump -i rl0 host 192.168.61.20 and port 80 - сниффер пакетов на интерфейсе rl0, фильтрующий пакеты, содержащие адрес 192.168.61.20 и порт 80
12. trafshow -i rl0 - программа для сортировки и вывода сетевых потоков (устанавливается дополнительно пакетом или из портов)

4. Службы времени

1. date - выводит текущее время и дату
2. w - выводит, сколько времени назад система загрузилась и залогиненных пользователей
3. last - выводит историю перезагрузок и входов пользователей

Одновременный запуск некольких FireFox с разными профилями

Известно, что в Firefox реализована поддержка нескольких пользовательских профилей. Ими можно распоряжаться как угодно: от разделения для каждого пользователя, например когда под одной учетной записью в Windows работают несколько пользователей или выделить отдельный профиль для ребенка. Также можно использовать профили для тестирования или написания собственных расширений.

Лично у меня для разработки и отладки существует отдельный профиль, в котором собраны специальные расширения для разработки и отладки кода и дизайна сайтов и расширений. Они занимают лишнюю память и тормозят браузер в процессе серфинга по сети. Read the rest of this entry »

Tricky Tricky Refcounts…

Occasionally a PHP engineer reports this prolem:

Example Code:
————
$my_arr = array(1,2,3);
foreach ($my_arr as &$val) {
    var_dump($val);
}
foreach ($my_arr as $val) {
    var_dump($val);
}


Expected Output:
———
int(1)
int(2)
int(3)
int(1)
int(2)
int(3)

Actual Output:
——-
int(1)
int(2)
int(3)
int(1)
int(2)
int(2)

The confusion comes from the expectation that the second loop will print the last element of the array as int(3) rather than int(2).  The initial reaction is usally “this is a PHP bug”, but it really isn’t.  There are two key aspects to this code to watch out for; 1) The scope of foreach variables is not limited to the foreach block. 2) Foreach loops do not unset foreach variables at the start of the block.

With this in mind we can see that at the end of the first loop, $val is a reference to the last element of $my_arr.  Each iteration over the foreach loop can be thought of as an assignment operation, in this case by reference:

$val = &$my_arr[0]
$val = &$my_arr[1]
$val = &$my_arr[2]
// last iteration $val is a reference to $my_arr[2]


As we step through each iteration of the second foreach loop we see the assignments of $val to each element of the $my_arr (assigned by value this time).

$val = $my_arr[0]
$val = $my_arr[1]
$val = $my_arr[2]

But if we you recall $val is really a reference to the last element of $my_arr because it carries over from the first foreach loop, so the actual assignment looks more like:

$my_arr[2] = $my_arr[0]
$my_arr[2] = $my_arr[1]
$my_arr[2] = $my_arr[2]

Thus we end up with $my_array being set as such on each iteration:

// (array(1,2,1))  first element is set to value of last
$my_arr[2] = $my_arr[0]

// (array(1,2,2))  second element is set to value of last
$my_arr[2] = $my_arr[1]

// (array(1,2,2))  last element is set to value of itself

$my_arr[2] = $my_arr[2]

Note that the last assignment is really assigning the last element to itself!

Because PHP5 handles variables with a copy on write algorithm, it’s typically not necessary to do any assignmnents by reference with performance gains in mind (as was the case with a lot of PHP4 code).  The above code can be made to function as the expected case by placing an unset($var) between the foreach loops, or not iterating over references and instead assigning the values of $my_arr explicitly by index or key values.  References should be used by care  and only when necessary.  When code like this is present in global scope or large functions it may affect future code in seemingly unpredictable ways.