Архив рубрики: Linux

Пример ускорения python используя ctypes

Один из вариантов ускорить выполнение кода Python — переписать медленный метод на язык C, с помощью ctypes можно подключать библиотеки написанные на C.
Ниже пример вызова C-метода и сравнение производительности.

1) Пишем метод (файл myfib.c)

unsigned long fib(unsigned long x)
{
if(x < 2) return x;
return fib(x-1) + fib(x-2);
}

2) Компилируем:

gcc -shared -Wl,-soname,myfib.so -o myfib.so -fPIC myfib.c

3) Вызываем из Python и сравниваем с функцией написанной на чистом python:

import ctypes
import timeit

fib = ctypes.CDLL('./myfib.so').fib
fib.restype = ctypes.c_long
fib.argtypes = (ctypes.c_ulong,)

print timeit.timeit('fib(32)', 'from __main__ import fib', number=1)

def pyfib(x):
if x < 2: return x
return pyfib(x-1) + pyfib(x-2)

print timeit.timeit('pyfib(32)', 'from __main__ import pyfib', number=1)

Результат:

0.0463268756866
1.08009696007

В итоге, за счет использования ctypes, мы получили ускорение в 23 раза.

Если использовать оптимизацию при компиляции, то можно получить большую производительность, для этого нужно указать ключ оптимизации:

gcc -O3 -shared -Wl,-soname,myfib.so -o myfib.so -fPIC myfib.c

Варианты ключей оптимизации:
-O1 — Базовая оптимизация
-O2 — GCC выполняет почти все поддерживаемые оптимизации, эта опция уменьшает как время компиляции так и время выполнения сгенерированного кода.
-O3 — Более сильная оптимизация, включает -O2 + некоторые дополнительные опции.

С учетом оптимизации -O3, мы получили такой результат:

0.023335695266
1.08294892311

Это быстрее в 46 раз чем на чистом python.

Тестировалось на ubuntu 12.10, python 2.7

Автор: D1VER
Дата публикации: 2013-12-16T05:21:00.001-08:00

Защищаем Apache2 от SlowLoris DDoS

Что такое SlowLoris

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

Если при этом на статусной страничке апача все треды в состоянии R (reading), весьма вероятно, что вы находитесь под атакой SlowLoris.

SlowLoris означает, что злоумышленники открывают множество коннектов к серверу, однако не посылают много-много запросов, а, наоборот, посылают один и медленно-медленно. В таком случае серверу не остается ничего другого, кроме как ждать, когда же вы запрос наконец придёт. А он всё не приходит и не приходит.

В результате все треды (или потоки) апача заняты тем, что ждут, когда же всё-таки запрос придёт. Читать

Падение SKYPE 64 bit в Linux Mint 16 Cinnamon

После установки Mint 16 Cinnamon 2.0 в Скайпе при совершении тестового вызова, ну или просто разговора с кем-либо — последний постоянно падал. Это касается только 64-битной версии. Причиной является отсутствие пакета libasound2-plugins:i386.

Путем раскуривания манов на офсайте Скайпа было найдено следующее решение. Тупо открываем терминал и копипастим туда следующую команду:


sudo aptget install libasound2plugins:i386

Перезагружаем Скайп и радуемся нормальной работе))) Почитать об этом можно тут.

Автор: Роман Дмитриевич

LibreOffice 4 для Windows и ошибка "Файл блокирован для изменения неизвестным пользователем".

После внеплановой установки у нескольких пользователей LibreOffice 4.0.6 взамен OpenOffice 3.2 вдруг появился интересный глюк, выражающийся в невозможности открытия некоторых документов для редактирования (очень маленький процент из общей массы, на вскидку, 1 документ из 100), аргументируя это тем, что данный документ уже кем-то открыт, что не является правдой. Дословно: «Файл документа блокирован для изменения пользователем: Неизвестный пользователь».



Так как документ расположен на файловом сервере Linux, первым делом были проверены права пользователя на запись в данный файл. Запись разрешена. Так-же с помощью lsof удостоверились, что в данный момент времени файл никем не открыт. Эта же чудесная утилита помогла направить поток мыслей в нужную сторону 🙂 При открытии файла пользователем, у которого имеется проблема, lsof показывает, что файл открыт дважды, хотя он его открывает, естественно, только один раз. При попытке открытия файла напрямую из меню LibreOffice, закрыв файловый менеджер и минуя его, тот открывается без проблем. Ну и финальная ниточка, ведущая к запутанному клубку — при попытке удаления этого файла (с сохранением копии естественно;), появляется ошибка о том, что документ используется проводником. Да, все дороги ведут к проводнику Windows), но в данном случае, это не глючность винды. Вся соль в дополнении к LibreOffice, которое должно взаимодействовать с проводником Windows для более информативного предпросмотра документов, но в данном случае, при определённом стечении обстоятельств циклится и занимает файл, не давая его открыть в LibreOffice из проводника. Так как с моей точки зрения это дополнение здесь и так лишнее, не говоря уже о ошибке, которую оно вызывает, проблема была решена его удалением, запустив изменение установки LibreOffice и снятия галочки с этого компонента.

В преть, буду снимать эту галочку ещё на этапе будущих инсталляций, чего и вам советую 🙂

Автор: Yar4e

deb-пакеты php5.5 и php5.3 под Debian Wheezy

Для одного клиента потребовалось обеспечить возможность переключения версии PHP для различных сайтов в панельке ISPConfig. На сервере установлен Debian Wheezy, в котором есть только PHP5.4.
Поэтому я скачал исходники PHP5.3 и PHP5.5 с сайта PHP: http://php.net/downloads.php, скомпилировал их и собрал из них простенькие deb-пакеты. Они включают в себя стандартный набор расширений и предоставляют бинарники для командной строки, cgi и php-fpm.
Выложил на github, вдруг кому-нибудь надо, чтоб быстро и работало:
https://github.com/scukonick/phpdeb

Можно спокойно устанавливать паралелльно дефолтному PHP, т.к. используются разные директории для установки.

Автор: AlexWinner

Устанавливаем дрова на сетевую карту Atheros AR9485

Прикупил себе сегодня новый бук взамен доблестно умершего. Моделька новая. Lenovo G500. Почитать о ней можно тут. Соответственно и железки новые. Не исключение и наша сетевуха. По умолчанию заработал тока Wi-Fi и локальная петля. Ethernet`а не было и в помине.

Открываем терминал и смотрим, что у нас внутри:
electrichp@electrichp-Lenovo-G500 ~ $ lspci -vv | grep Atheros
01:00.0 Ethernet controller: Atheros Communications Inc. Device 10a0 (rev 10)
02:00.0 Network controller: Atheros Communications Inc. AR9485 Wireless Network Adapter (rev 01)
После более чем трехчасовых поисков необходимого драйвера, последний был благополучно найден и прикручен. 
Нам необходимо скачать архив с названием compat-drivers-2013-03-26-u.tar.bz2 вот с этой странички https://www.kernel.org/pub/linux/kernel/projects/backports/2013/03/26/.
Далее открываем терминал, переходим в папку с загруженным и выполняем следующие команды:

tar -xvf compat-drivers-2013-03-26-u.tar.bz2
cd compat-drivers-2013-03-26-u
scripts/driver-select alx
make
sudo make install
sudo modprobe alx
После вышеперечисленных манипуляций все встает на свои места и пашет как надо.Это видно по выводу ifconfig:
electrichp@electrichp-Lenovo-G500 ~/Загрузки/compat-drivers-2013-03-26-u $ ifconfig
eth0 Link encap:Ethernet HWaddr 20:89:84:f6:ba:25
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:16

lo Link encap:Локальная петля (Loopback)
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3534 errors:0 dropped:0 overruns:0 frame:0
TX packets:3534 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:222967 (222.9 KB) TX bytes:222967 (222.9 KB)

wlan0 Link encap:Ethernet HWaddr 48:d2:24:a9:16:fd
inet addr:192.168.0.79 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::4ad2:24ff:fea9:16fd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:18608 errors:0 dropped:0 overruns:0 frame:0
TX packets:11166 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:24376233 (24.3 MB) TX bytes:1306372 (1.3 MB)
Ну вот и все))) Кстати, имя драйвера, если кому пригодится: ath9k. Радуемся)))

Автор: Роман Дмитриевич