1
0
mirror of https://github.com/stefanocasazza/ULib.git synced 2025-09-28 19:05:55 +08:00
This commit is contained in:
stefanocasazza 2018-07-13 15:00:47 +02:00
parent e4e3cabec0
commit adfc221a4c
5 changed files with 35 additions and 93 deletions

View File

@ -5,16 +5,7 @@ TechEmpower Web Framework Benchmarks
<!--#declaration <!--#declaration
#include "world.h" #include "world.h"
static void usp_fork_query() static void usp_fork_query() { World::handlerForkSql(); }
{
U_TRACE(5, "::usp_fork_query()")
World::handlerForkSql();
#ifdef U_STATIC_ORM_DRIVER_PGSQL
(void) World::initPipeline();
#endif
}
--> -->
<!--#header <!--#header
--> -->
@ -32,39 +23,17 @@ if (World::pdrv)
PGresult* res; PGresult* res;
char* randomNumber; char* randomNumber;
while (true) for (; i < num_queries; ++i)
{ {
World::sendQueryPrepared(i); res = World::pdrv->execPrepared(World::pstmt);
if (++i == num_queries) break; U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 1)
U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
(void) U_SYSCALL(PQbatchPutSyncOnQueue, "%p", World::conn); // NB: make the difference between pipeline vs batch...
}
(void) U_SYSCALL(PQbatchSendQueue, "%p", World::conn);
for (i = 0; i < num_queries; ++i)
{
(void) U_SYSCALL(PQbatchProcessQueue, "%p", World::conn);
res = (PGresult*) U_SYSCALL(PQgetResult, "%p", World::conn);
U_INTERNAL_DUMP("Result status: %d (%s) for i=%u, tuples: %d", PQresultStatus(res), PQresStatus(PQresultStatus(res)), i, PQntuples(res))
randomNumber = U_SYSCALL(PQgetvalue, "%p,%d,%d", res, 0, 0); randomNumber = U_SYSCALL(PQgetvalue, "%p,%d,%d", res, 0, 0);
World::handlerResult(World::rnumber[i], ntohl(*(uint32_t*)randomNumber)); World::handlerResult(World::rnumber[i], ntohl(*(uint32_t*)randomNumber));
U_SYSCALL_VOID(PQclear, "%p", res);
(void) U_SYSCALL(PQgetResult, "%p", World::conn);
(void) U_SYSCALL(PQbatchProcessQueue, "%p", World::conn);
res = (PGresult*) U_SYSCALL(PQgetResult, "%p", World::conn);
U_INTERNAL_DUMP("Result status: %d (%s) for i=%u, tuples: %d", PQresultStatus(res), PQresStatus(PQresultStatus(res)), i, PQntuples(res))
U_SYSCALL_VOID(PQclear, "%p", res); U_SYSCALL_VOID(PQclear, "%p", res);
} }
} }

View File

@ -19,7 +19,7 @@ static void usp_fork_update()
if (World::psql_query) if (World::psql_query)
{ {
# ifdef U_STATIC_ORM_DRIVER_PGSQL # ifdef U_STATIC_ORM_DRIVER_PGSQL
if (World::initPipeline()) (void) memcpy(query, U_CONSTANT_TO_PARAM("UPDATE World SET randomNumber = v.randomNumber FROM (VALUES")); if (World::pdrv) (void) memcpy(query, U_CONSTANT_TO_PARAM("UPDATE World SET randomNumber = v.randomNumber FROM (VALUES"));
else else
# endif # endif
{ {
@ -52,6 +52,13 @@ if (World::pdrv)
pquery = u_num2str32(World::rnumber[i], pquery+1); pquery = u_num2str32(World::rnumber[i], pquery+1);
res = World::pdrv->execPrepared(World::pstmt);
U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 1)
U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
(void) U_SYSCALL(PQgetvalue, "%p,%d,%d", res, 0, 0);
*pquery = ','; *pquery = ',';
pquery = u_num2str32(World::rnum = u_get_num_random_range1(10000), pquery+1); pquery = u_num2str32(World::rnum = u_get_num_random_range1(10000), pquery+1);
@ -61,9 +68,7 @@ if (World::pdrv)
World::handlerResult(World::rnumber[i], World::rnum); World::handlerResult(World::rnumber[i], World::rnum);
World::sendQueryPrepared(i); U_SYSCALL_VOID(PQclear, "%p", res);
(void) U_SYSCALL(PQbatchPutSyncOnQueue, "%p", World::conn); // NB: make the difference between pipeline vs batch...
} }
World::endResult(); World::endResult();
@ -71,14 +76,11 @@ if (World::pdrv)
(void) memcpy(pquery-1, ") AS v (id,randomNumber) WHERE World.id = v.id;", (void) memcpy(pquery-1, ") AS v (id,randomNumber) WHERE World.id = v.id;",
U_CONSTANT_SIZE(") AS v (id,randomNumber) WHERE World.id = v.id;")+1); U_CONSTANT_SIZE(") AS v (id,randomNumber) WHERE World.id = v.id;")+1);
(void) U_SYSCALL(PQsendQueryParams, "%p,%S,%d,%p,%p,%p,%d", World::conn, query, 0, U_NULLPTR, U_NULLPTR, U_NULLPTR, U_NULLPTR, 0); res = (PGresult*) U_SYSCALL(PQexec, "%p,%S", (PGconn*)World::conn, query);
(void) U_SYSCALL(PQbatchSendQueue, "%p", World::conn); U_INTERNAL_ASSERT_EQUALS(PQresultStatus(res), PGRES_COMMAND_OK)
while (U_SYSCALL(PQbatchProcessQueue, "%p", World::conn) == 1) U_SYSCALL_VOID(PQclear, "%p", res);
{
while ((res = (PGresult*) U_SYSCALL(PQgetResult, "%p", World::conn))) U_SYSCALL_VOID(PQclear, "%p", res);
}
} }
else else
#endif #endif

View File

@ -1 +1 @@
01C5 01CC

View File

@ -5,16 +5,7 @@ TechEmpower Web Framework Benchmarks
<!--#declaration <!--#declaration
#include "world.h" #include "world.h"
static void usp_fork_query() static void usp_fork_query() { World::handlerForkSql(); }
{
U_TRACE(5, "::usp_fork_query()")
World::handlerForkSql();
#ifdef U_STATIC_ORM_DRIVER_PGSQL
(void) World::initPipeline();
#endif
}
--> -->
<!--#header <!--#header
--> -->
@ -32,39 +23,17 @@ if (World::pdrv)
PGresult* res; PGresult* res;
char* randomNumber; char* randomNumber;
while (true) for (; i < num_queries; ++i)
{ {
World::sendQueryPrepared(i); res = World::pdrv->execPrepared(World::pstmt);
if (++i == num_queries) break; U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 1)
U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
(void) U_SYSCALL(PQbatchPutSyncOnQueue, "%p", World::conn); // NB: make the difference between pipeline vs batch...
}
(void) U_SYSCALL(PQbatchSendQueue, "%p", World::conn);
for (i = 0; i < num_queries; ++i)
{
(void) U_SYSCALL(PQbatchProcessQueue, "%p", World::conn);
res = (PGresult*) U_SYSCALL(PQgetResult, "%p", World::conn);
U_INTERNAL_DUMP("Result status: %d (%s) for i=%u, tuples: %d", PQresultStatus(res), PQresStatus(PQresultStatus(res)), i, PQntuples(res))
randomNumber = U_SYSCALL(PQgetvalue, "%p,%d,%d", res, 0, 0); randomNumber = U_SYSCALL(PQgetvalue, "%p,%d,%d", res, 0, 0);
World::handlerResult(World::rnumber[i], ntohl(*(uint32_t*)randomNumber)); World::handlerResult(World::rnumber[i], ntohl(*(uint32_t*)randomNumber));
U_SYSCALL_VOID(PQclear, "%p", res);
(void) U_SYSCALL(PQgetResult, "%p", World::conn);
(void) U_SYSCALL(PQbatchProcessQueue, "%p", World::conn);
res = (PGresult*) U_SYSCALL(PQgetResult, "%p", World::conn);
U_INTERNAL_DUMP("Result status: %d (%s) for i=%u, tuples: %d", PQresultStatus(res), PQresStatus(PQresultStatus(res)), i, PQntuples(res))
U_SYSCALL_VOID(PQclear, "%p", res); U_SYSCALL_VOID(PQclear, "%p", res);
} }
} }

View File

@ -19,7 +19,7 @@ static void usp_fork_update()
if (World::psql_query) if (World::psql_query)
{ {
# ifdef U_STATIC_ORM_DRIVER_PGSQL # ifdef U_STATIC_ORM_DRIVER_PGSQL
if (World::initPipeline()) (void) memcpy(query, U_CONSTANT_TO_PARAM("UPDATE World SET randomNumber = v.randomNumber FROM (VALUES")); if (World::pdrv) (void) memcpy(query, U_CONSTANT_TO_PARAM("UPDATE World SET randomNumber = v.randomNumber FROM (VALUES"));
else else
# endif # endif
{ {
@ -52,6 +52,13 @@ if (World::pdrv)
pquery = u_num2str32(World::rnumber[i], pquery+1); pquery = u_num2str32(World::rnumber[i], pquery+1);
res = World::pdrv->execPrepared(World::pstmt);
U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 1)
U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
(void) U_SYSCALL(PQgetvalue, "%p,%d,%d", res, 0, 0);
*pquery = ','; *pquery = ',';
pquery = u_num2str32(World::rnum = u_get_num_random_range1(10000), pquery+1); pquery = u_num2str32(World::rnum = u_get_num_random_range1(10000), pquery+1);
@ -61,9 +68,7 @@ if (World::pdrv)
World::handlerResult(World::rnumber[i], World::rnum); World::handlerResult(World::rnumber[i], World::rnum);
World::sendQueryPrepared(i); U_SYSCALL_VOID(PQclear, "%p", res);
(void) U_SYSCALL(PQbatchPutSyncOnQueue, "%p", World::conn); // NB: make the difference between pipeline vs batch...
} }
World::endResult(); World::endResult();
@ -71,14 +76,11 @@ if (World::pdrv)
(void) memcpy(pquery-1, ") AS v (id,randomNumber) WHERE World.id = v.id;", (void) memcpy(pquery-1, ") AS v (id,randomNumber) WHERE World.id = v.id;",
U_CONSTANT_SIZE(") AS v (id,randomNumber) WHERE World.id = v.id;")+1); U_CONSTANT_SIZE(") AS v (id,randomNumber) WHERE World.id = v.id;")+1);
(void) U_SYSCALL(PQsendQueryParams, "%p,%S,%d,%p,%p,%p,%d", World::conn, query, 0, U_NULLPTR, U_NULLPTR, U_NULLPTR, U_NULLPTR, 0); res = (PGresult*) U_SYSCALL(PQexec, "%p,%S", (PGconn*)World::conn, query);
(void) U_SYSCALL(PQbatchSendQueue, "%p", World::conn); U_INTERNAL_ASSERT_EQUALS(PQresultStatus(res), PGRES_COMMAND_OK)
while (U_SYSCALL(PQbatchProcessQueue, "%p", World::conn) == 1) U_SYSCALL_VOID(PQclear, "%p", res);
{
while ((res = (PGresult*) U_SYSCALL(PQgetResult, "%p", World::conn))) U_SYSCALL_VOID(PQclear, "%p", res);
}
} }
else else
#endif #endif