Saturday, January 24, 2009

Опять Попугаи и Виста

Идея, что индекс производительности не имеет четкого зависимости от реальной производительности, частично подтвердилась. Индекс производительности зависит от поддержки новых технологий - используешь твердотельный диск и новую видеокарту с новыми шейдерами и поддержкой нового DirectX - индекс производительности будет выше - вне зависимости от того, что используется действительно высокопроизводительное оборудование быстрая флеш память на диске и эффективное потоковые процесоры с глубокой оптимизация исполняемого кода или нет. То есть, потенциально уровень произодительности может быть на старом оборудование гораздо ниже, но будет удобнее работать. У меня на ноутбуке индекс под Se7en был 2.0, а на рабочем компьютере около 5 - но ноутбуке приятней было работать, в крайнем случае работалось не хуже - тормозило одинаково.

В основном списывают на невозможность за ограниченное время проверить производительность всей системы адекватно.

Модуль балансировки

Выложил исходный код модуля балансировки под Apache. Создан он был года 3 назад для диплома, на новых версиях сервера может не работать, но как пример исходника модуля с комментариями я думаю пойдет.

Он позволяет:
  • перенаправлять запросы с одного сервера на другой;
  • ограничивает нагрузку на сервер (количеству соединений одновременно);
  • замена url в результирующем запросе (реализована только смена url);
  • фильтр обрабатываемых url;
  • скрытие источника трафика на сервер (замена описания клиента, и запоминание кукиесов).
Использовался для исследование балансировки нагрузки на сервера.

Sunday, January 18, 2009

Впечатления от Se7en

В общем случае положительные...Единственное переизбыток разнообразных эффектов, не очень приятно когда окошки мелькают при открытии, удобнее было бы по моему анимация открытия когда окошко как круги на воде постепенно расширялись от места клика. В общем эффекты через полчаса надоели и я перегрузился в Linux. Переплюнуть Linux с композитными менеджерами не удалось - они разнообразнее и дешевле(по производительности).

Особых глюков не обнаружил на одном компьютере в 32 разрядной системе отображался только цифровой выход и как результат звука не было. В 64 битной редакции на ноутбуке только 2 проблемки - после установки всех обновлении двойной клик на touchpad не работает и не нашлось драйверов под картридер. С остальными устройствами проблем не было при обновлении системы они сами находились и скачивались - на сайт производителя ходить не нужно. Жаль что не разместили драйвера под распространенное оборудование на установочном диске. Он и так довольно большой: 2,5 -32 версия и 3,4 - 64 битная версия, по сравнению с установочным диском Ubuntu. Он занимает 1cd для всех архитектур наиболее близок по функционалу из коробки - хотя он содержит и некоторое количество дополнительных приложений, например: графический редактор gimp, возможность использовать как livecd и так далее.

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

Места на диске по моим расчетам заняло немного меньше чем у Vista, и по субъективным впечатлениям со всеми эффектами и побрякушками работает быстрее(особенно приятно что грузиться гораздо быстрее и показывается хоть какая-то анимация). В общем система по моему неплохо дебютировала - попробовать стоит.

Деградации в производительность в играх (Gothic 2) не заметил все работает нормально - возможно в более новых играх она и есть, но на своей интегрированной видеокарте я их не запускал. Рейтинг производительности опять упал до 2.0(с 2.4), но как я ранее сказал субъективно она наоборот повысилась.

Также изменилась система информирования пользователей - теперь все сообщения сохраняются в список, а не просто появляются на экране, что действительно гораздо приятнее.

В установке не понравилось, что теперь не отображается тип файловой системы, нужно немного гадать какой раздел где, но зато убрали свои буквы дисков. Теперь загрузчик переписывается перед первой перегрузкой и не нужно, чтобы он уже был перед загрузкой - количество перезагрузок, как мне кажется осталось по прежнему 2 (не помню точно сколько в предыдущих): после копирования установочных файлов на диск, и после полной установки - хотелось бы 1. Но теперь можно спокойно оставлять установку - система поставиться сама.

Более точной информации относительно других нововведений нет, так как в основном пользуюсь Linux и их просто не заметил... Если была бы возможность бесплатного перехода с Висты на Севен(даже в текущем состоянии - глюков у Висты не меньше) - выбрал бы Севен.

А так посмотрел как на остальные новинки и забыл, ибо не применимы и не особо нужны.

Saturday, January 10, 2009

Производительность vs удобство интерфейса

На выходных я добавил к своему игрушечному браузеру поддержку контента записанного прямо в страницу, то есть вида когда источником ставится data:image/png..... При этом заменил способ работы с файловой системой на использование gio. Это стандартный компонент в новых версиях glib для доступа к ресурсам и при установке в систему плагин позволяющий в зависимости от плагинов работать с файлами (file:) и сетью (http:,smb:,https:) через унифицированный интерфейс и все типы контента отображаются одинаково для программы.

Я использую эту библиотеку только для получения данных по умолчанию, если все остальные способы определенные мной не смогли отработать запрос. Причиной этого послужило:
  • что реализации плагина для data:... я не искал - текущая реализация как по мне вполне сгодиться;
  • а вот для http использовать реализацию плагина по умолчанию нельзя так у меня есть хоть частичная реализация работы с cookies(очень плохая: просто объединение всех cookies полученных за сесию в одну строку и отсылку на все страницы);
  • и что более важно отсутствие логики работы с относительными путями для случаев не файл(по коду все относительные пути берутся начиная с пути места запуска приложения) - и как результат я использую свою реализации обработки относительных путей - пока неверную, но надеюсь когда нибудь доделаю.
Благодаря реализации интерфейса доступа к ресурсам основанном на создании потоков потерялась возможность использовать возможность системы отображать файлы в память. Отображать то можно, но смысла мало, так как в вызовах используется указание области памяти куда нужно сохранить и потом можно спокойно вызвать освобождение. При этом, если нам удалось отобразить файл на какую-то область мы должны(в зависимости от реализации) вызвать unmap перед освобождением участка. Хотя в linuх - может сработать: Normally, malloc() allocates memory from the heap, and adjusts the size of the heap as required, using sbrk(2). When allocating blocks of memory larger than MMAP_THRESHOLD bytes, the glibc malloc() implementation allocates the memory as a private anonymous mapping using mmap(2). Но лучше не играться с этим.

Если использовать после отображения копирование данных - то мы получим стандартные вариант read,write - и увеличения производительности не будет.

В glib есть обертка над mmap - gmappedfile, но mmap используеться только для MIMEINFO - xdgmimecache.c

Пока абстракция интерфейса побеждает.

PS: Хотя в общем тенденция хорошая - мало приложений использует отображение, и еще меньшему количеству он реально нужен. А так мы получаем простой унифицированы интерфейс доступа.

Wednesday, January 7, 2009

Как получать больше удовольствия от жизни?

  1. Будьте благодарны. Позвоните или придите к тому, кто сделал для вас что-то хорошее (пусть и в далеком прошлом). Выразите свою признательность, даже если человек этого не ждет.
  2. Настройтесь на оптимизм. Одни и те же обстоятельства можно воспринимать по-разному и даже из трагедии выйти более сильным и мудрым.
  3. Не сравнивайте себя с другими. Счастливые люди не следят за чужими успехами и неудачами, но сравнивают себя с собой прежними, доверяя своему ощущению того, как идут их дела.
  4. Проявляйте доброту. Добрые, бескорыстные дела (даже незначительные) усиливают чувство наслаждения жизнью как ничто другое.
  5. Тратьте усилия на отношения с другими людьми. Общайтесь без специального повода, не жалейте времени, слов и чувств для выражения своего тепла и приязни, умейте выслушивать.
  6. Придумывайте способы борьбы с трудностями. Не подменяйте решение проблем выяснением отношений. Извлекайте уроки из неудач.
  7. Учитесь прощать. Даже если у вас нет контакта с тем, кто обидел вас, напишите ему «письмо прощения» (отправлять адресату не обязательно). Счастливые люди способны подняться выше любых обид. Нелегко и самому простить другого – учитесь это делать.
  8. Стремитесь к состоянию «потока». Ищите занятия, в которых вы можете почувствовать полное слияние с тем, что делаете, ощутить высшее, самозабвенное напряжение своих сил и способностей. «Поток» можно найти даже в рутинных делах, если видеть в них смысл и точку приложения своих умений.
  9. Чувствуйте вкус к жизни. Обращайте внимание на мелкие радости, на хорошие новости, удивляйтесь тому, как устроен мир, не упускайте простые ежедневные удовольствия.
  10. Выбирайте достойные цели. Пусть они будут гибкими, достижимыми и поведут вас к чему-то, а не от чего-то.
  11. Развивайте в себе духовность: она дает ответы на многие наши ежедневные вопросы.
  12. Заботьтесь о своем теле. Высыпайтесь, делайте зарядку. Медитация также помогает стать восприимчивым к тому, что говорит наш организм, – прислушивайтесь к нему.
Соня Любомирски (Sonja Lyubomirsky)

автор книги «The HOW of Happiness: A Practical Approach to Getting The Life You Want» (Sphere, 2007).

Monday, December 29, 2008

Производительность реализаций str(с)spn

Тесты strspn:

  1. Стандартная реализация: .850.870
  2. Тестовая реализация на С(пример кода в glibc): 1.886.713
  3. С удаленной переменной количество пропущенный символов: 1.757.733
  4. Использование множества для проверки разрешенных символов: 1.651.749
  5. С добавлением фильтрации на бинарный максимум и минимум: 2.983.546

Тесты strcspn:

  1. Стандартная реализация: 1.388.789
  2. Тестовая реализация на С(пример кода в glibc): 10.329.430
  3. Удаление вызова функции поиска символа в строке: 2.444.628
  4. С удаленной переменной количество пропущенный символов: 2.222.662
  5. Использование множества для проверки разрешенных символов: 1.607.756
  6. Использование множества для проверки разрешенных символов(с начальным сохранением разыменованного указателя): 1.654.748
  7. Использование множества для проверки разрешенных символов с фильтрацией на бинарный максимум и минимум: 1.872.716
  8. Использование множества для проверки разрешенных символов с фильтрацией на бинарный максимум и минимум(с начальным сохранением разыменованного указателя): 1.720.738
По результатам видно что добавление фильтра ничего не дает кроме 6% замедления по сравнению с обычной версией с использованием множества. То есть 2 операции косвенной адресации с последующим сравнением работают быстрее чем 1 операция косвенной адресации с бинарной операцией и сравнением результата.

Есть предположение что это следствие особенностей архитектуры:
  • оптимизации в Суперскалярной архитектуре(данные уже подгружены в кеш результатов);
  • быстрой работе с кешем (различия в косвенной адресации и обращении к регистру минимальны);
  • компилятор не разместил фильтр в регистре процессора и как результат получили вместо одного косвенного обращения два как и при работе с множеством(отличия для тестов с использованием разыменованного указателя).
В общем нужно пробовать оптимизировать ассемблерный код для исключения возможности косвенной адресации к фильтрам. Или придумать другие тесты....

P.S. Время указано в миллисекундах для Intel(R) Pentium(R) 4 CPU 3.00GHz(32 бита) и исходники тестов можно посмотреть c/strspn.

Saturday, December 27, 2008

Singularity?

Удалось запустить Singularity под эмулятором - она запустилась только под виртуальной машиной Microsoft(Microsoft Virtual PC/). Где то месяц назад пытался запустить под bochs и VMWare но в обоих эмуляторах она не запустилась - точную причину ошибки не помню, под Virtual PC она тоже не сразу запустилась - в стандартном примере настроек было указано 512 метров памяти - при запуске вывалилась ошибка, что столько памяти виртуальная машина выделить не может, оказалось для запуска нужно около 400 метров памяти в виртуальной машине(стандартных 128 мало), если памяти мало запуск(загрузка самой ОС) выдает что не может выделить достаточно памяти. После запуска появляется командная строка - с очень маленьким количеством команд. В общем не впечатлило - как демонстрация концепции в общем не плохо - но документация года три назад меня больше понравилась - а пока видно основной недостаток для демонстрации требование в пол гигабайта мне кажется много. Я думал что за три года они достигли больших успехов. По сравнению с Minix(концепция близка) и даже другими миниос - демонстрация не очень.

Ну а идея в общем то не плоха использовать для всех компонентов управляемый код(только загрузчик на C), но идея не уникальна ОС на java тоже существует, например JNode и требования по описанию ниже(сам не пробовал).
Идея:
  1. ограничить коммуникацию между приложениями и ядром только сообщениями;
  2. описание в заголовке приложения всей требующихся ему ресурсов и возможностей(нужен ли доступ к сети, возможности и потребность в памяти);
  3. возможность перезапуска приложения при сбое;
  4. отсутствие требования к смене контекста и блокирования доступа к чужим страницам, так как доступ к памяти полностью управляется средствами языка(Не очень критичное улучшение, так как все эти операции часто контролируются аппаратно, например x86).
- уже реализовано в других операционных системах и как следствие имеет общие с ними проблемы:
  1. накладные расходы по передаче сообщений между элементами(MINIX - обычно это ограничение указывается для него);
  2. реализация части функция вне ядра в виде сервисов добавляет дополнительные затраты(опять таки MINIX), хотя в принципе при хорошо продуманном интерфейсе это не столь существенно и так работает графика в Vista и Linux(Xсы).
Ограничение возможностей для приложений, в распостраненных ос, очень часто расширяют для особенных приложений, из-за ошибок в этих приложениях эта защита преодолевается. И как следствие, эта система не всегда работает особенно при увеличении популярности ос.

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

Достаточно интересным примером я считаю минимальное количество функций доступных приложению в Linux(как и Unix) и простота и универсальность этих функций и предоставляемых абстракций. Абстракции в Inferno(расширение концепций Unix) мне показались немного излишними, но возможно если их более точно понять, что под ними скрывается они окажутся даже более удобными и универсальными - пока я по описанию не очень точно понял смысл понятий на которых они основываются(отличие от концепций Unix). Но они достаточно эффективны, так как позволяют выполнять действия такие как копирование контента между 2 узлами управляемое с 3 достаточно эффективным через передачу управления непосредственно на первых 2 узла с передачей на 3 только статистики(очень похоже на самостоятельное управление передачей устройствами SCSI), вопрос безопасности и получения доверия между этими узлами в принципе решаем и при важности скрытия источника и приемника информации(непосредственно узлы не должны иметь полных данных) вполне решаем.