?

Log in

No account? Create an account

My Technical Blog

Jan. 1st, 2020 | 12:00 am

My technical blog about High Performance Multi-core Networked and Storage Systems for Linux (in English and more frequently updated): http://natsys-lab.blogspot.com/

Link | Leave a comment |

Studying Intel TSX Performance

Nov. 15th, 2013 | 05:44 pm

Мы сделали серию бенчмарков для Intel TSX (Transactional Synchronization Extension) — транзакционной памяти в процессорах Haswell, которыми и хотим поделиться: http://natsys-lab.blogspot.ru/2013/11/studying-intel-tsx-performance.html

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

Link | Leave a comment |

Маркетинг: официальность копроэкономики

Nov. 28th, 2012 | 01:00 am

Сегодня дошел до разделов "Намеренная недолговечность" и "`Моральное старение` против `износа`" книги Александра Левитаса "Больше денег от вашего бизнеса. Партизанский маркетниг в действии". Кстати, книга отличная, много полезных идей для людей, занимающихся продвижением своего бизнеса - словом, рекомендую. Но сейчас не о всей книге, а о конкретно этих двух советах (в этой книге 1 небольшой раздел = 1 совет).

Первый совет о том, что не стоит делать продукцию, которая работает дольше гарантийного срока. Чем раньше выйдет из строя устройство (например, стиральная машинка), тем быстрее вы купите замену. Второй совет - это убеждать покупателя преобретать "более продивинутые" и/или "более модные" модели, взамен старым, но все еще прекрасно работающим. Вспомним, iPhone и истирию вокруг каждой новой модели. По сути, вся мода - это как раз оно: в этом сезоне ты носишь модные штаны, но в следующим они уже будут "прошлогодней коллекцией".

Советы дельные. И так, действительно, все работает в современной индустрии. Но когда я читал "Копроэкономику" Двух Капитанов много лет назад (http://2k.livejournal.com/520078.html) мне как-то не приходило в голову, что это уже то, чему учат людей на тренингах... Думал, может, это негласно, и говорить открыто об этом люди стесняются...

P.S. В этой и других подобных книгах часто приводятся цитаты бизнесменов мол: "я интегрировал этот совет в своем бизнесе и получил на 15% болше доходов!". На эти два совета нет таких восторженных отзывов. Наверное, это еще не финиш и финиш настанет тогда, когда люди будут открыто говорить "спасибо" за эти советы :)

Tags:

Link | Leave a comment |

Берегите себя

Sep. 2nd, 2012 | 10:10 pm

В пятницу катался на роликах. Неудачно упал и выбил себе 3 передних зуба и рассек губу. До сих пор не понимаю как я так умудрился упасть. Завтра у меня встреча с заказчиком, в сентябре должен начаться новый цикл продаж и мне нужно встречаться с незнакомыми людьми и продавать им наши услуги.

Конечно, получилось глупо и это ерунда, в конечном счете. Губу заштопали и один зуб уже наростили, керамику вставлю. Жалко зубы, конечно, но ладно. Могло быть и хуже - на killmepls.ru можно найти кучу историй глупых переломов позвоночников и смертей близких. Да и от врачей, пока они меня штопали, наслушался историй о пациентах после роликов. А медсестра, которая сегодня ассистировала, сама со штифами в ноге ходит после обычных (ледовых) коньков.

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

Link | Leave a comment {2} |

Крупные заказы в IT аутсорсинге: Front End продукты и Open Source

May. 6th, 2012 | 03:44 pm

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

Если сервис является критичным для бизнеса, то его врятли станут заказывать у первого встречного. Здесь идут в ход знакомства и поставщики услуг, с кем раньше имели дело. Другой вариант - заказать услугу у признанной и известной в данной области компании. То есть, это вопрос доверия.

Доверие компании можно заработать на Front End продуктах. В RTFM Евгения Калинина он хорошо описывается как:

Это то, что вы выставляете на витрину – точно так же, как в супермаркете на витрине или на самом видном месте у входа стоит дешевый и привлекательный товар.
.....
На витрине вы выставляете что-то простое, дешевое и не требующее для осуществления продажи тесного контакта с клиентом. Например, при продаже услуг по поддержке 1С таким Front End’ом может быть подписка на регулярные обновления. Это продукт, который всем понятен, не требует от поставщика очень высокой квалификации, его более или менее все равно, у кого покупать.


Понятно, что в мире IT Outsourcing'а проекты, которые всем понятны и не требуют от поставщика высокой квалификации, отличаются рутинностью и низкой ценой. Но зато потом, если у заказчика возникнет необходимость в более технологичных решениях, то он сначала обратится к вам.

Второй вариант, получить известность, - это то, почему пишутся книги и блоги, (например "High Performance MySQL" и MySQL Performance Blog от Percona) и делается Open Source (например, Galera от Codership). Компания нарабатывает критическую массу, когда о ней начинают говорить и получает уже толстых
клиентов.

У обоих подходов есть очевидные недостатки. У первого - дешевизна и рутинность работ. В среднем, люди ограничиваются малым, а это значит, что большинство клиентов, заказавших у вас Front End, так на нем и останутся, не заказывая более сложные и дорогие услуги (Back End). Это значит, что ваша компания будет в
основном работать на низкоквалифицированных и дешевых проектах, что неминуемо приведет к потере квалифицированных кадров и может возникнуть ситуация, когда делать Back End уже будет не с кем.

У второго прагматичнее - нужны ресурсы на выпуск качественного Open Source, написание книг и ведение полезного людям и информационно насыщенного блога.

Link | Leave a comment |

Эффективный менеджмент или разница в подходах.

Apr. 1st, 2012 | 12:42 am

До безобразия часто натыкаюсь на словосочетание "эффективный менеджмент". Это, как "инновации" - то, что раньше означало открытия, изменившие жизнь людей, сейчас означает зубную щётку с измененным дизайном.

В одном блоге прочитал: "Эффективный руководитель может взять и уехать в отпуск. В любой момент. На сколько угодно." Во время свой работы в московском отделении IBM тимбилдингом назывался выезд всей командой на природу или поход в кегельбан. Или в описании вакансии программистов можно часто прочитать: "мы - молодая и амбициозная команда" и чуть ниже в требованиях к кандидату "25-35 лет". При этом, вспомним, что всего 3 отечественные IT компании известны за рубежом (Parallels, Yandex и Kaspersky Lab.), то есть отечественный IT в большинстве совем очень местечковый, неспособный конкурировать с американским IT.

Для сравнения, один наш зазкачик, американский венчурный стартап с миллионными инвестициями и несколькими десятками людей в штате, прозводимое им ПО работает на серверных фермах eBay:
1. CEO и CTO - около 60 лет, 30-40 лет в индустрии на руководящих позициях или исследовательских подразделениях в гигантах;
2. Директор по разработке, главнй технолог, главный архитектор - 40-50 лет, все пишут код в разных пропорциях, от 10-20 до 50-70 процентов рабочего времени, но пишут;
3. Работа на выходных и овертаймы - норма, люди из п.2 часто работают до 4 утра, а в 9 уже на митинге с нами;
4. Командная работа - если у тебя что-то не получается, долго не можешь в чем-то разобраться, то ты идешь к коллеге, вы вместе разбираетесь с задачей; все всем всегда рады помочь - это дух компании; просто все делают свое дело и помогают другим (кроме нас, с ними работают еще китайские аутсорсера - правила везде одни);
5. Менеджмент работает больше всех.

Эффективный менеджмент - это не столько заставить делать людей свою работу, сколько создать рабочий дух в команде, дух работы над одним делом, дух проффессионализма и высокой эффективности. Тогда люди "попадут в струю", заразятся настроем делать общее дело. Конечно, не все заражаются и попадают в эту струю, но нужно ли в команде, тем более стартапа, держать таких людей? Дело в культуре работы. Как известно, рыба гниет с головы и пока в умах владельцев бизнеса и топ-менеджеров сидят легкие деньги вместо технологичности продукта и отпуск под пальмами вместо качества, все будет оставаться на своих местах и местные компании так и будут оставаться местными.

Link | Leave a comment |

Ищем системного C++/Linux программиста на разовый проект (100 тыс. руб.)

Jun. 30th, 2011 | 02:19 pm

NatSys Lab. специализируется на разработке сложных высокопроизводительных систем для телекоммуникационных компаний и хостинг провайдеров.


В данный момент ищем разработчика на разовый high-load проект в области обработки сетевого трафика, но возможно и дальнейшее сотрудничество.

Обязательные требования:
+ Опыт разработки высоконагруженных серверов (pthreads, epoll, socket API);
+ Хороший C++, желательно знание Boost (asio, threads);
+ Владение oprofile, valgrind, gdb, scons
+ Хороший coding style (linux/Documentation/CodingStyle, FreeBSD KNF etc);

Желательно:
+ Знание атомарных операций, lock-free структур данных;
+ Опыт работы с Cisco RDRv1;
+ Английский язык.

Работа удаленная, ежедневные статус-митинги по Skype.

Продолжительность проекта - 4-6 недель. Оплата - 100 тыс. руб.


+7 (916) 717-3899
e-mail: ak домен natsys-lab.com
Skype: akrizh

Александр.

Link | Leave a comment |

Industrial democracy

Apr. 28th, 2010 | 11:49 pm

Не совсем понимаю как именно функционирует организация, в которой сотрудники сами назначают себе уровень зарплаты, но говорят можно: http://www.strategy-business.com/article/05408?gko=3291c&tid=27782251&pg=all

Кто-нибудь знает как именно?

Link | Leave a comment |

Антиквар

Jan. 25th, 2010 | 01:18 am

Сегодня наши соседи снизу переезжали и выкидывали весь хлам.
Забавно, но я приобрел пианино Ed Seiler конца XIX века за 4 т.р. - его просто выставили в подъезд. Соседи порадовались, что не надо оплачивать его утилизацию.

Вещь необыкновенная!

Link | Leave a comment |

Linux/FreeBSD filesystems benchmark (extents with random access)

Jan. 18th, 2010 | 05:47 am

Ниже результаты бенчмарка нескольких ФС Linux и FreeBSD. Бенчмарк сугубо специализированный - эмулирующий нагрузку разрабатываемого собственного хранилища (истории сообщений Instant Messenger'а) с изначально крайне высоким уровнем рандомных сиков. Сторадж расчитан на интенсивной использование виртуальной памяти с "заточкой" на page fault'ы.

Сами результаты с кратким описанием системы, на которой они запускались (если более подробно, то это HP Pavilion tx2650 с вытащенной 2G RAM планкой, таким образом, в системе стаор 1G RAM).

DECRIPTION
~~~~~~~~~~
Create (mmap()) 4G file on different filesystems with only 1G RAM available and
_sequentialy_ write one byte to each mmap()'ed page.
Following OSes are used: Linux-2.6.31, FreeBSD-8.0.
SATA.
Time is measured in microseconds.

Envirnoment (linux only):
scheduler anticipatory
nr_requests 1024
read_ahead_kb 0

RESULTS
~~~~~~~

I. Linux EXT3
ftruncate time: 11,789,105
mmap time: 29,794,195
sync time: 1,138,126
total time: 42,721,426

EXT3 hasn't native fallocate() implementation, so glibc uses ugly strut which
significantly degradate performance by sequential zero bytes write.

II. Linux EXT4
ftruncate time: 87,686
mmap time: 37,493,712
sync time: 476,279
total time: 38,057,677

fallocate time: 1,465,564
work time: 39,156,443
sync time: 118,039
total time: 40,740,046

III. Linux XFS
ftruncate time: 36,429,649
mmap time: 12,638,933
sync time: 109,912
total time: 49,178,494

fallocate time: 60,449,098
work time: 8,114,137
sync time: 97,437
total time: 68,660,672

with mount option 'nobarrier':
ftruncate time: 84,547,748
mmap time: 25,923,368
sync time: 463,249
total time: 110,934,365

Kernel hang up on fallocate call (xfs_iowait_end).

IV. Linux Reiser3
ftruncate time: 7,298,345
mmap time: 37,633,576
sync time: 1,372,845
total time: 46,304,766

No native fallocate() implementation.

V. Linux JFS
ftruncate time: 27,337
mmap time: 38,026,407
sync time: 472,908
total time: 38,526,652

No native fallocate() implementation.

VI. Linux NILFS2 (log-structured)
ftruncate time: 10,746
mmap time: 133,163,126
sync time: 82,204
total time: 133,256,076

VII. Linux BtrFS
ftruncate time: 6,362,707
mmap time: 29,376,188
sync time: 697,479
total time: 36,436,374

fallocate time: 1,011,155
work time: 33,286,975
sync time: 1,051,298
total time: 35,349,428

with enabled transparent compression (zlib):
ftruncate time: 2,501,566
mmap time: 40,978,856
sync time: 81,784
total time: 43,562,206

fallocate time: 1,635,162
work time: 32,520,697
sync time: 1,089,237
total time: 35,245,096

with default IO settings:
ftruncate time: 7,841,727
mmap time: 36,649,721
sync time: 2,041,199
total time: 46,532,647

VIII. FreeBSD-8.0 UFS2 with soft updates and access time optimization:
ftruncate time: 194,578,591
work time: 127,750,409
sync time: 164,474
total time: 322,493,474

FreeBSD hasn't fallocate() or any analogues.

IX. FreeBSD ZFS
ftruncate time: 15,900,672
work time: 184,591,076
sync time: 340,969
total time: 200,832,717

ZFS compressed=gzip:
ftruncate time: 17,853,223
work time: 164,578,902
sync time: 117,330
total time: 182,549,455


И код самого теста (инклюды не включены - ЖЖ на них ругается, как выключить не знаю):

/*
* IM Storage workflow emulation to benchmark different filesystems.
*/

// file size must be significantly greater than available RAM
#define MSIZE ((size_t)2*1024*1024*1024)
#define ESIZE ((size_t)2*1024*1024) // extent size

#define time_count(id) \
do { \
struct timeval tv; \
if (gettimeofday(&tv, NULL)) { \
perror("gettimeofday"); \
exit(1); \
} \
t ## id += tv.tv_sec * 1000000 + tv.tv_usec - tLast; \
tLast = tv.tv_sec * 1000000 + tv.tv_usec; \
} while (0)

int
main(int argc, char* argv[])
{
if (argc < 3) {
std::cerr << "please specify test file location and"
" bool value (1|0) to use fallocate()"
<< std::endl;
exit(1);
}
char* path = argv[1];

int fd = open(path, O_RDWR|O_CREAT|O_TRUNC);
if (fd < 0) {
perror("can't open null file");
exit(1);
}

unsigned int idx[ESIZE / 4096];
for (size_t i = 0; i < ESIZE / 4096; ++i)
idx[i] = i;
std::random_shuffle(&idx[0], &idx[ESIZE / 4096]);

// test core
unsigned long t0 = 0, tLast = 0, tInit = 0, tWork = 0, tSync = 0;
const char* method = "undefined";
time_count(0);
void* maps[MSIZE / ESIZE];
for (size_t e = 0; e < MSIZE / ESIZE; ++e) {
#ifndef __FreeBSD__ // FreeBSD hasn't fallocate analog
if (strncmp(argv[2], "1", 1) == 0) {
method = "fallocate";
if (posix_fallocate(fd, e * ESIZE, ESIZE)) {
perror("fallocate");
exit(1);
}
} else
#endif
{
method = "ftruncate";
if (ftruncate(fd, (e + 1) * ESIZE)) {
perror("ftruncate");
exit(1);
}
}
time_count(Init);

maps[e] = mmap(NULL, ESIZE, PROT_WRITE|PROT_READ,
MAP_SHARED, fd, e * ESIZE);
if (maps[e] == MAP_FAILED) {
perror("mmap failed");
exit(1);
}
for (size_t i = 0; i < ESIZE / 4096; ++i)
((char*)(maps[e]))[idx[i] * 4096] = 0xA;
time_count(Work);
}

for (size_t e = 0; e < MSIZE / ESIZE; ++e) {
if (munmap(maps[e], ESIZE)) {
perror("munmap");
exit(1);
}
}
if (close(fd)) {
perror("close");
exit(1);
}
time_count(Sync);

// show statistic
std::cout << "\t" << method << " time: " << tInit << std::endl;
std::cout << "\twork time: " << tWork << std::endl;
std::cout << "\tsync time: " << tSync << std::endl;
std::cout << "\ttotal time: " << (tInit + tWork + tSync) << std::endl;

if (unlink(path)) {
perror("unlink");
exit(1);
}

return 0;
}

Link | Leave a comment {2} |