Я оцениваю производительность экспериментальной системы на 8-ядерном компьютере с 16 ГБ оперативной памяти. У меня есть две Java RDBMSs с основной памятью (hsqldb), и против каждого из них я запускаю клиент TPCC (полученный из jTPCC/BenchmarkSQL).Начальные процессы в то же время медленнее, чем ошеломляющие; Зачем?
У меня есть сценарии для запуска вещей, так, например, экземпляры HSQLDB начинаются с:
./hsqld.bash 0 &
./hsqld.bash 1 &
Если я начну клиентов почти в то же самое время:
./hsql-tpcc.bash 0 &
./hsql-tpcc.bash 1 &
, то каждый из этих клиентов имеет пичковый начальную скорость в пределах 500-1000 (это транзакций в минуту это в основном транзакции в минуту), затем быстро (менее чем за секунду) оседает до скорости 200-250 т/мин. Ото, если я подожду в течение секунды или два до начала второго клиента:
./hsql-tpcc.bash 0 &
sleep 1
./hsql-tpcc.bash 1 &
то каждый из клиентов работает на 2500+ транзакций в минуту. Ожидание более чем на секунду не делает больше различий.
Это странно, потому что клиент 0 просто разговаривает с сервером 0, а клиент 1 просто разговаривает с сервером 1. Непонятно, почему возникает такое серьезное вмешательство в производительность.
Я думал, что это связано с близостью клиентов планировщика процессора, но при медленном запуске они занимают около 1-3% одного ядра (20-25% при быстром запуске). Еще одно подозрение было в привязках NUMA клиентов (конфликт памяти на том же узле памяти), но у машины, по-видимому, всего лишь 1 узел памяти (есть только/sys/devices/system/node/node0), и, кроме того, каждый клиент занимает всего 0,8% памяти.
Это также не связано с привязками ЦП для экземпляров hsqldb, так как быстрое и медленное поведение можно увидеть только путем перезапуска клиентов (и ожидания/не ожидая секунды), оставив те же самые экземпляры hsqldb (т.е. hsqldb не нужно перезапускать). hsqldb занимает 4-8% CPU, когда медленный, 80% -ный процессор при быстром и 4,3% памяти.
Любые другие идеи, почему это может произойти? Там нет дискового ввода-вывода, и я не близок к исчерпанию памяти системы. Заранее спасибо. Другая соответствующая информация следующим образом:
$ uname -a
Linux hammer.csail.mit.edu 2.6.27.35-170.2.94.fc10.x86_64 #1 SMP Thu Oct 1 14:41:38 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
Я хочу видеть ответ на этот вопрос. Твоя ситуация кажется мне довольно странной. Одна вещь, которую люди могут найти полезной, хотя ... Что такое вывод 'uname -a'? – Omnifarious
* «Я не близок к исчерпанию памяти системы» * Но как насчет кэшей (в частности, процессор кэширует L1)? Производительность в реальном времени сильно зависит от использования кеша. – dmckee
@dmckee: конфликт в кэше может быть проблемой; есть ли простой способ проверить это? – Yang