Запуск процессов одновременно медленнее, чем шатание; Зачем? - PullRequest
2 голосов
/ 11 января 2010

Я оцениваю производительность экспериментальной установки системы на 8-ядерном компьютере с 16 ГБ ОЗУ. У меня запущены две Java RDBMS (hsqldb) основной памяти, и на каждой из них я запускаю клиента TPCC (производного от jTPCC / BenchmarkSQL).

У меня есть сценарии для запуска, например, экземпляры hsqldb запускаются с:

./hsqld.bash 0 &
./hsqld.bash 1 &

Если я запускаю клиентов почти одновременно:

./hsql-tpcc.bash 0 &
./hsql-tpcc.bash 1 &

тогда каждый из этих клиентов имеет пиковую начальную скорость около 500–1000 т / мин (это в основном транзакции в минуту), затем быстро (менее чем за секунду) достигает скорости около 200–250 т / мин. OTOH, если я подожду секунду или две перед запуском второго клиента:

./hsql-tpcc.bash 0 &
sleep 1
./hsql-tpcc.bash 1 &

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

Это странно, потому что клиент 0 просто общается с сервером 0, а клиент 1 просто общается с сервером 1. Непонятно, почему возникают такие существенные помехи производительности.

Я думал, что это может быть связано с привязкой планировщика ЦП к клиентам, но они занимают всего около 1-3% от одного ядра при медленной работе (20-25% при быстрой работе). Другое подозрение было в привязках NUMA клиентов (конфликт памяти на одном и том же узле памяти), но у машины, по-видимому, всего 1 узел памяти (есть только / sys / devices / system / node / node0), и, кроме того, каждый клиент занимает всего 0,8%. памяти.

Это также не похоже на привязки к ЦП для экземпляров hsqldb, поскольку как быстрое, так и медленное поведение можно увидеть, просто перезапустив клиенты (и подождав / не дождавшись секунды), оставив одинаковые экземпляры hsqldb запущенными оба (то есть hsqldb не нужно перезапускать). hsqldb использует 4-8% ЦП при медленной скорости, 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

1 Ответ

1 голос
/ 11 января 2010

Как долго ваши "две РСУБД с основной памятью (hsqldb)" работают до теста? Если вы запускаете их прямо перед тестом, попробуйте сначала немного их прогреть. Позвольте hotspot делать свое дело и пройти через весь код if (first_time) { do_initialization(); } в БД, чтобы сборщик мусора мог успокоиться.

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

...