Архив рубрики: 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.

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

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`а не было и в помине.

Читать