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-06-27 18:42:13 +02:00
parent 2e5c5f3fc0
commit b24a4c9b48
13 changed files with 166 additions and 47 deletions

View File

@ -332,20 +332,19 @@ public:
int r = *(const unsigned char*)str - *(const unsigned char*)s;
if (r == 0)
if (r) U_RETURN(r);
uint32_t len = U_min(_length, n);
if (len > 1)
{
uint32_t len = U_min(_length, n);
r = memcmp(str+1, s+1, len-1);
if (len > 1)
{
r = memcmp(str+1, s+1, len-1);
if (r) U_RETURN(r);
}
r = _length < n ? -1 : _length > n; // _length - n;
if (r) U_RETURN(r);
}
r = _length < n ? -1 : _length > n; // _length - n;
U_RETURN(r);
}

View File

@ -5,7 +5,27 @@ TechEmpower Web Framework Benchmarks
<!--#declaration
#include "world.h"
static void usp_fork_db() { World::handlerForkSql(); }
#ifdef U_STATIC_ORM_DRIVER_PGSQL
static UOrmDriver* pdrv;
static USqlStatement* pstmt;
#endif
static void usp_fork_db()
{
U_TRACE_NO_PARAM(5, "::usp_fork_db()")
World::handlerForkSql();
#ifdef U_STATIC_ORM_DRIVER_PGSQL
if (UOrmDriver::isPGSQL())
{
pdrv = World::psql_query->getDriver();
pstmt = World::pstmt_query->getStatement();
(void) ((UPgSqlStatement*)pstmt)->setBindParam(pdrv);
}
#endif
}
#ifdef DEBUG
static void usp_end_db() { World::handlerEndSql(); }
@ -15,13 +35,33 @@ static void usp_end_db() { World::handlerEndSql(); }
Content-Type: application/json
-->
<!--#code
World::pworld_query->id = World::rnumber[0];
(void) World::pstmt_query->execute();
World::pwbuffer = UClientImage_Base::wbuffer->pend();
World::handlerOneResult(World::rnumber[0], World::pworld_query->randomNumber);
World::pworld_query->id = World::rnumber[u_now->tv_usec % 500];
#ifdef U_STATIC_ORM_DRIVER_PGSQL
if (pdrv)
{
((UPgSqlStatement*)pstmt)->setBindParam();
PGresult* res = ((UOrmDriverPgSql*)pdrv)->execPrepared(pstmt);
U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 1)
U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
char* randomNumber = U_SYSCALL(PQgetvalue, "%p,%d,%d", res, 0, 0);
World::handlerOneResult(World::pworld_query->id, ntohl(*(uint32_t*)randomNumber));
U_SYSCALL_VOID(PQclear, "%p", res);
}
else
#endif
{
(void) World::pstmt_query->execute();
World::handlerOneResult(World::pworld_query->id, World::pworld_query->randomNumber);
}
World::endOneResult();
-->

View File

@ -121,7 +121,7 @@ public:
U_INTERNAL_ASSERT_POINTER(pvfortune)
Fortune* elem = pvfortune->at(1+i);
Fortune* elem = pvfortune->at(i);
elem->id = _id;
@ -141,16 +141,30 @@ public:
char* pwbuffer = UClientImage_Base::wbuffer->pend();
(void) memcpy(pwbuffer, U_CONSTANT_TO_PARAM("<!doctype html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>"));
pwbuffer += U_CONSTANT_SIZE("<!doctype html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>");
u_put_unalignedp64(pwbuffer, U_MULTICHAR_CONSTANT64('<','!','d','o','c','t','y','p'));
u_put_unalignedp64(pwbuffer+8, U_MULTICHAR_CONSTANT64('e',' ','h','t','m','l','>','<'));
u_put_unalignedp64(pwbuffer+16, U_MULTICHAR_CONSTANT64('h','t','m','l','>','<','h','e'));
u_put_unalignedp64(pwbuffer+24, U_MULTICHAR_CONSTANT64('a','d','>','<','t','i','t','l'));
u_put_unalignedp64(pwbuffer+32, U_MULTICHAR_CONSTANT64('e','>','F','o','r','t','u','n'));
u_put_unalignedp64(pwbuffer+40, U_MULTICHAR_CONSTANT64('e','s','<','/','t','i','t','l'));
u_put_unalignedp64(pwbuffer+48, U_MULTICHAR_CONSTANT64('e','>','<','/','h','e','a','d'));
u_put_unalignedp64(pwbuffer+56, U_MULTICHAR_CONSTANT64('>','<','b','o','d','y','>','<'));
u_put_unalignedp64(pwbuffer+64, U_MULTICHAR_CONSTANT64('t','a','b','l','e','>','<','t'));
u_put_unalignedp64(pwbuffer+72, U_MULTICHAR_CONSTANT64('r','>','<','t','h','>','i','d'));
u_put_unalignedp64(pwbuffer+80, U_MULTICHAR_CONSTANT64('<','/','t','h','>','<','t','h'));
u_put_unalignedp64(pwbuffer+88, U_MULTICHAR_CONSTANT64('>','m','e','s','s','a','g','e'));
u_put_unalignedp64(pwbuffer+96, U_MULTICHAR_CONSTANT64('<','/','t','h','>','<','/','t'));
u_put_unalignedp16(pwbuffer+104, U_MULTICHAR_CONSTANT16('r','>'));
Fortune* elem = pvfortune->at(0);
pwbuffer += U_CONSTANT_SIZE("<!doctype html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>");
handlerQuery();
Fortune* elem = pvfortune->last();
elem->id = 0;
elem->message.rep->replace(U_CONSTANT_TO_PARAM("Additional fortune added at request time."));
handlerQuery();
pvfortune->sort(Fortune::cmp_obj);
for (uint32_t sz, i = 0, n = pvfortune->size(); i < n; ++i)
@ -171,10 +185,12 @@ public:
u_put_unalignedp64(pwbuffer, U_MULTICHAR_CONSTANT64('<','/','t','d','>','<','/','t'));
u_put_unalignedp16(pwbuffer+8, U_MULTICHAR_CONSTANT16('r','>'));
pwbuffer += 10;
pwbuffer += 8+2;
}
(void) memcpy(pwbuffer, U_CONSTANT_TO_PARAM("</table></body></html>"));
u_put_unalignedp64(pwbuffer, U_MULTICHAR_CONSTANT64('<','/','t','a','b','l','e','>'));
u_put_unalignedp64(pwbuffer+8, U_MULTICHAR_CONSTANT64('<','/','b','o','d','y','>','<'));
u_put_unalignedp64(pwbuffer+16, U_MULTICHAR_CONSTANT64('/','h','t','m','l','>','\0','\0'));
UClientImage_Base::wbuffer->size_adjust(pwbuffer + U_CONSTANT_SIZE("</table></body></html>"));
@ -193,7 +209,7 @@ public:
for (uint32_t i = 0; i < 13; ++i)
{
U_NEW(Fortune, elem, Fortune(i));
U_NEW(Fortune, elem, Fortune(i+1));
pvfortune->push(elem);
}

View File

@ -9,6 +9,10 @@
#include <ulib/orm/orm_driver.h>
#include <ulib/net/server/client_image.h>
#ifdef U_STATIC_ORM_DRIVER_PGSQL
# include <ulib/orm/driver/orm_driver_pgsql.h>
#endif
class World {
public:
// Check for memory error

View File

@ -379,7 +379,7 @@ bool UPgSqlStatement::setBindParam(UOrmDriver* pdrv)
num_bind_result = U_SYSCALL(PQnfields, "%p", res);
# ifdef DEBUG
# ifdef DEBUG
uint32_t i;
Oid paramtype;
@ -400,7 +400,7 @@ bool UPgSqlStatement::setBindParam(UOrmDriver* pdrv)
U_INTERNAL_DUMP("result[%u] (%s): size = %d type = %d format = %d", i, fname, fsize, paramtype, fformat)
}
# endif
# endif
}
if (num_bind_param)

View File

@ -1 +1 @@
0173
017A

View File

@ -83,7 +83,7 @@ ADD ./ /ulib
WORKDIR /ulib
ENV MONGODB_HOST=tfb-database
ENV UMEMPOOL="96,0,0,47,16401,-14,-20,-18,26"
ENV UMEMPOOL="96,0,0,97,16417,-14,-20,-18,26"
CMD setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \
$IROOT/ULib/bin/userver_tcp -c $IROOT/ULib/benchmark.cfg

View File

@ -79,7 +79,7 @@ WORKDIR /ulib
ENV ORM_DRIVER="mysql"
ENV ORM_OPTION="host=tfb-database user=benchmarkdbuser password=benchmarkdbpass character-set=utf8 dbname=hello_world"
ENV UMEMPOOL="581,0,0,59,16409,-7,-20,-23,31"
ENV UMEMPOOL="96,0,0,97,16417,-14,-20,-18,26"
CMD setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \
$IROOT/ULib/bin/userver_tcp -c $IROOT/ULib/benchmark.cfg

View File

@ -78,7 +78,7 @@ ADD ./ /ulib
WORKDIR /ulib
ENV ORM_DRIVER="pgsql"
ENV UMEMPOOL="581,0,0,59,16409,-7,-20,-23,31"
ENV UMEMPOOL="96,0,0,97,16417,-14,-20,-18,26"
ENV ORM_OPTION="host=tfb-database user=benchmarkdbuser password=benchmarkdbpass dbname=hello_world client_encoding=UTF8"
CMD setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \

View File

@ -78,7 +78,7 @@ ADD ./ /ulib
WORKDIR /ulib
ENV ORM_DRIVER="pgsql"
ENV UMEMPOOL="581,0,0,59,16409,-7,-20,-23,31"
ENV UMEMPOOL="96,0,0,97,16417,-14,-20,-18,26"
ENV ORM_OPTION="host=tfb-database user=benchmarkdbuser password=benchmarkdbpass dbname=hello_world client_encoding=UTF8"
CMD setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \

View File

@ -5,7 +5,27 @@ TechEmpower Web Framework Benchmarks
<!--#declaration
#include "world.h"
static void usp_fork_db() { World::handlerForkSql(); }
#ifdef U_STATIC_ORM_DRIVER_PGSQL
static UOrmDriver* pdrv;
static USqlStatement* pstmt;
#endif
static void usp_fork_db()
{
U_TRACE_NO_PARAM(5, "::usp_fork_db()")
World::handlerForkSql();
#ifdef U_STATIC_ORM_DRIVER_PGSQL
if (UOrmDriver::isPGSQL())
{
pdrv = World::psql_query->getDriver();
pstmt = World::pstmt_query->getStatement();
(void) ((UPgSqlStatement*)pstmt)->setBindParam(pdrv);
}
#endif
}
#ifdef DEBUG
static void usp_end_db() { World::handlerEndSql(); }
@ -15,13 +35,33 @@ static void usp_end_db() { World::handlerEndSql(); }
Content-Type: application/json
-->
<!--#code
World::pworld_query->id = World::rnumber[0];
(void) World::pstmt_query->execute();
World::pwbuffer = UClientImage_Base::wbuffer->pend();
World::handlerOneResult(World::rnumber[0], World::pworld_query->randomNumber);
World::pworld_query->id = World::rnumber[u_now->tv_usec % 500];
#ifdef U_STATIC_ORM_DRIVER_PGSQL
if (pdrv)
{
((UPgSqlStatement*)pstmt)->setBindParam();
PGresult* res = ((UOrmDriverPgSql*)pdrv)->execPrepared(pstmt);
U_INTERNAL_ASSERT_EQUALS(PQnfields(res), 1)
U_INTERNAL_ASSERT_EQUALS(PQntuples(res), 1)
char* randomNumber = U_SYSCALL(PQgetvalue, "%p,%d,%d", res, 0, 0);
World::handlerOneResult(World::pworld_query->id, ntohl(*(uint32_t*)randomNumber));
U_SYSCALL_VOID(PQclear, "%p", res);
}
else
#endif
{
(void) World::pstmt_query->execute();
World::handlerOneResult(World::pworld_query->id, World::pworld_query->randomNumber);
}
World::endOneResult();
-->

View File

@ -121,7 +121,7 @@ public:
U_INTERNAL_ASSERT_POINTER(pvfortune)
Fortune* elem = pvfortune->at(1+i);
Fortune* elem = pvfortune->at(i);
elem->id = _id;
@ -141,16 +141,30 @@ public:
char* pwbuffer = UClientImage_Base::wbuffer->pend();
(void) memcpy(pwbuffer, U_CONSTANT_TO_PARAM("<!doctype html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>"));
pwbuffer += U_CONSTANT_SIZE("<!doctype html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>");
u_put_unalignedp64(pwbuffer, U_MULTICHAR_CONSTANT64('<','!','d','o','c','t','y','p'));
u_put_unalignedp64(pwbuffer+8, U_MULTICHAR_CONSTANT64('e',' ','h','t','m','l','>','<'));
u_put_unalignedp64(pwbuffer+16, U_MULTICHAR_CONSTANT64('h','t','m','l','>','<','h','e'));
u_put_unalignedp64(pwbuffer+24, U_MULTICHAR_CONSTANT64('a','d','>','<','t','i','t','l'));
u_put_unalignedp64(pwbuffer+32, U_MULTICHAR_CONSTANT64('e','>','F','o','r','t','u','n'));
u_put_unalignedp64(pwbuffer+40, U_MULTICHAR_CONSTANT64('e','s','<','/','t','i','t','l'));
u_put_unalignedp64(pwbuffer+48, U_MULTICHAR_CONSTANT64('e','>','<','/','h','e','a','d'));
u_put_unalignedp64(pwbuffer+56, U_MULTICHAR_CONSTANT64('>','<','b','o','d','y','>','<'));
u_put_unalignedp64(pwbuffer+64, U_MULTICHAR_CONSTANT64('t','a','b','l','e','>','<','t'));
u_put_unalignedp64(pwbuffer+72, U_MULTICHAR_CONSTANT64('r','>','<','t','h','>','i','d'));
u_put_unalignedp64(pwbuffer+80, U_MULTICHAR_CONSTANT64('<','/','t','h','>','<','t','h'));
u_put_unalignedp64(pwbuffer+88, U_MULTICHAR_CONSTANT64('>','m','e','s','s','a','g','e'));
u_put_unalignedp64(pwbuffer+96, U_MULTICHAR_CONSTANT64('<','/','t','h','>','<','/','t'));
u_put_unalignedp16(pwbuffer+104, U_MULTICHAR_CONSTANT16('r','>'));
Fortune* elem = pvfortune->at(0);
pwbuffer += U_CONSTANT_SIZE("<!doctype html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>");
handlerQuery();
Fortune* elem = pvfortune->last();
elem->id = 0;
elem->message.rep->replace(U_CONSTANT_TO_PARAM("Additional fortune added at request time."));
handlerQuery();
pvfortune->sort(Fortune::cmp_obj);
for (uint32_t sz, i = 0, n = pvfortune->size(); i < n; ++i)
@ -171,10 +185,12 @@ public:
u_put_unalignedp64(pwbuffer, U_MULTICHAR_CONSTANT64('<','/','t','d','>','<','/','t'));
u_put_unalignedp16(pwbuffer+8, U_MULTICHAR_CONSTANT16('r','>'));
pwbuffer += 10;
pwbuffer += 8+2;
}
(void) memcpy(pwbuffer, U_CONSTANT_TO_PARAM("</table></body></html>"));
u_put_unalignedp64(pwbuffer, U_MULTICHAR_CONSTANT64('<','/','t','a','b','l','e','>'));
u_put_unalignedp64(pwbuffer+8, U_MULTICHAR_CONSTANT64('<','/','b','o','d','y','>','<'));
u_put_unalignedp64(pwbuffer+16, U_MULTICHAR_CONSTANT64('/','h','t','m','l','>','\0','\0'));
UClientImage_Base::wbuffer->size_adjust(pwbuffer + U_CONSTANT_SIZE("</table></body></html>"));
@ -193,7 +209,7 @@ public:
for (uint32_t i = 0; i < 13; ++i)
{
U_NEW(Fortune, elem, Fortune(i));
U_NEW(Fortune, elem, Fortune(i+1));
pvfortune->push(elem);
}

View File

@ -9,6 +9,10 @@
#include <ulib/orm/orm_driver.h>
#include <ulib/net/server/client_image.h>
#ifdef U_STATIC_ORM_DRIVER_PGSQL
# include <ulib/orm/driver/orm_driver_pgsql.h>
#endif
class World {
public:
// Check for memory error