Pull to refresh
32
0
Send message
Видимо я не вполне ясно выразил свою мысль. Цель была не посчитать конкретно сколько изолированно занимает каждый вызов, а оценить поведение in the wild.
То есть так, как это будет выглядеть в реальной программе, когда jit развернет циклы и заинлайнит библиотечные методы.
Если мерять абсолютные показатели — то да.
Но в данном случае меряется производительность Trove варианта относительно jdk. В обоих случаях jvm позволено вносить любые оптимизации (и они будут примерно одинаковы — unroll + inline). Ассемблерный листинг это подтверждает.
не совсем понял про batch,
loop без unrolling'a:
for(long l = 0; l < INSERT_COUNT; ++l) {
            rvalue += jdkMap.get(l);
        }

loop с unrolling'om (грубо):
for(long l = 0; l < INSERT_COUNT; l += 4) {
            rvalue += jdkMap.get(l);
            rvalue += jdkMap.get(l + 1);
            rvalue += jdkMap.get(l + 2);
            rvalue += jdkMap.get(l + 3);
        }

По поводу States — это средство для per-thread/per-benchmark переменных в многопотоковых бенчмарках (для удобства).

По поводу Loops — я не тестирую свои методы, я тестирую методы библиотеки, и как бы не был сделан unrolling тестирующего метода, кол-во вызовов библиотечного метода от этого не изменится.
Прошу прощения, неправильно понял :)
Это обусловлено тем что у нас есть «int summarize(int[] values)».
Если хочется inplace обработки — то forEach
для миллиона:
Benchmark                    Mode Thr    Cnt  Sec         Mean   Mean error    Units
IntListJdkTraverse          thrpt   1      3    5      774.100       71.809  ops/sec
IntListTroveTraverse        thrpt   1      3    5     3548.806        7.712  ops/sec

Jdk traverse 774 op/s, Trove traverse 3548 op/s. Вы видимо в колонку Mean error посмотрели. Кол-во операций в секунду в колонке Mean.
Тогда в случае Trove:
int summarize(TIntList values) {
// вызовется  int summarize(int[] values)
    return summarize(values.toArray()); 
}

По сути списки Trove — не более чем удобная обертка вокруг массивов примитивов.
Если мы говорим о списках — элементы хранятся в массивах int[] для TIntArrayList, long[] для TLongArrayList. При добавлении элемента, в случае если в массиве нет места, будет создан новый массив, большего размера. Старый подберет GC. В случае массового добавления элементов он даже Eden Space покинуть не успеет.
Весьма спорное утверждение. Возьмем суммирование ряда — какая разница сколько элементов нужно просуммировать. И вполне возможно, что заранее неизвестно сколько элементов в ряду.
проверил:
java -server -XX:+AggressiveOpts -XX:AutoBoxCacheMax=128 \
-Xms2048m -Xmx2048m -XX:+UnlockDiagnosticVMOptions \
-XX:+PrintFlagsFinal | grep -i autobox
     intx AutoBoxCacheMax                          := 128  {C2 product}

Установка AutoBoxCacheMax при включенном AggressiveOpts работает. Дело в том что создание объекта в Java — очень быстрая операция, поэтому и разница невелика. А GC работает в параллельном потоке и поскольку памяти хватает Full GC и STW не случается.
-Djava.lang.Integer.IntegerCache.high=N не выключает механизм autoboxing'а полностью. Oн не создает новые объекты для Integer попадающих в промежуток (-128) — N, а возвращает ссылки на заранее сформированные объекты. Ключ -XX:+AggressiveOpts поднимает N до 20000, так что тест с 1тыс уже с «выключенным» autoboxing'ом
java -server -XX:+AggressiveOpts -Xms2048m -Xmx2048m \
-XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal | grep -i autobox
     intx AutoBoxCacheMax                           = 20000  {C2 product}
     bool EliminateAutoBox                          = true  {C2 diagnostic}

Рузультаты на 1тыс с «включенным» autoboxing'ом:
$ java -server  -XX:+AggressiveOpts -XX:AutoBoxCacheMax=128 \
-Xms2048m -Xmx2048m -jar target/microbenchmarks.jar ".*Trove.*" \
-i 3 -r 5s -prof gc

Benchmark                Mode Thr    Cnt  Sec         Mean   Mean error    Units
IntListJdkInsert        thrpt   1      3    5   176214.283      738.319  ops/sec
IntListJdkTraverse      thrpt   1      3    5  1327901.517     1426.723  ops/sec
IntListTroveInsert      thrpt   1      3    5   306144.428     2381.945  ops/sec
IntListTroveTraverse    thrpt   1      3    5  3628098.089     4848.035  ops/sec


По поводу графиков — спасибо за рекомендацию, учту на будущее.
Нельзя ли поподробнее про сетевые настройки реплицированных VM? SRM создает заготовку под репликат машины без сетевых настроек?
страницы на разогретом кеше и с нагрузкой в 100 конкурентных соединений отдаются за 20-30мс
Отличный результат.

Правильно ли я понимаю, что система заточена под запросы типа «Найди отель в Уганде, с шахматным клубом и поэтессами», а не на «найди мне double на 2 недели за $500 все равно где»?
Нельзя ли привести ТТХ комплекса, на котором работает Mongo, максимальный достигнутый RPS и примерное кол-во записей об отелях? И какая СУБД используется как основная?
Третья часть как раз и будет посвящена работе с транзакционными источниками и поддержке транзакций в Storm.
Если не знаешь — прочти документацию, если думаешь что знаешь — прочти два раза.
Да, преобразование происходит каждый раз. Расчет на то, что расходы на преобразования перекрываются бонусом от быстрого написания. Естественно, для достижения большой пропускной способности лучше писать на Java.
> И ещё: можно ли болты выстраивать в цепочку, направляя данные с одного на другой?
Да, в последнем примере CalcApp так и сделано Spout->ClientIdBolt->RaterBolt->PrintOutBolt.
Про методы защиты. Это не 100% защита, а способ затруднить доступ. Одно дело сделать select * и унести распечатку, и совсем другое сидеть и угадывать. При этом угадывать можно только на той же базе, нельзя унести замаскированное и на другой системе пытаться восстановить информацию.
FGA (fine grained audit) позволяет отслеживать select'ы по колонке, да еще и с анализом условий запроса. Не в этом дело. Обеспечение безопасности — это многоступенчатый процесс. Эта фича рассматривается как «дешевый» (в смысле ресурсов) вариант. Для усиленной защиты существует Transparent data encryption, когда данные хранятся в зашифрованном виде. Но естественно и ресурсов на encrypt/decrypt уходит существенно больше.

Information

Rating
Does not participate
Registered
Activity