From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?ISO-8859-2?Q?Luk=E1=B9_Doktor?= Subject: Re: [KVM-AUTOTEST PATCH 1/2] Add KSM test Date: Mon, 31 Aug 2009 11:35:18 +0200 Message-ID: <4A9B9956.9000209@redhat.com> References: <4A9B97E5.3000109@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-2; format=flowed Content-Transfer-Encoding: QUOTED-PRINTABLE To: KVM list , Autotest mailing list Return-path: Received: from mx1.redhat.com ([209.132.183.28]:24011 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750969AbZHaJfU (ORCPT ); Mon, 31 Aug 2009 05:35:20 -0400 In-Reply-To: <4A9B97E5.3000109@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: allocator.c is a program, which allocates pages in the memory and allow= =20 us to fill or test those pages. It's controlled using sockets. Signed-off-by: Luk=E1=B9 Doktor Signed-off-by: Ji=F8=ED =AEupka --- client/tests/kvm/allocator.c | 571=20 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 571 insertions(+), 0 deletions(-) create mode 100644 client/tests/kvm/allocator.c diff --git a/client/tests/kvm/allocator.c b/client/tests/kvm/allocator.= c new file mode 100644 index 0000000..89e8ce4 --- /dev/null +++ b/client/tests/kvm/allocator.c @@ -0,0 +1,571 @@ +/* + * KSM test program. + * Copyright(C) 2009 Redhat + * Jason Wang (jasowang@redhat.com) + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//socket linux +#include +#include +#include +#include +//TODO: socket windows + + + +#define PS (4096) +long PAGE_SIZE =3D PS; +long intInPage =3D PS/sizeof(int); +#define MAP_FLAGS ( MAP_ANON | MAP_SHARED ) +#define PROT_FLAGS ( PROT_WRITE ) +#define FILE_MODE ( O_RDWR | O_CREAT ) +#define LOG_FILE "/var/log/vksmd" +#define FIFO_FILE "/tmp/vksmd" +#define MODE 0666 +#define FILE_BASE "/tmp/ksm_file" +#define MAX_SIZESIZE 6 +#define MAX_COMMANDSIZE 50 +#define BLOCK_COUNT 8 + +int log_fd =3D -1; +int base_fd =3D -1; +int checkvalue =3D 0; + + +//Socket +struct sockaddr_in sockName; +struct sockaddr_in clientInfo; +int mainSocket,clientSocket; +int port; + +socklen_t addrlen; + + + + +const uint32_t random_mask =3D UINT32_MAX>>1; +uint32_t random_x =3D 0; +const uint32_t random_a =3D 1103515245; +const uint32_t random_m =3D 2^32; +const uint32_t random_c =3D 12345; + +int statickey =3D 0; +int dynamickey =3D 0; + +typedef enum _COMMANDS +{ + wrongcommad, + ninit, + nrandom, + nexit, + nsrandom, + nsrverify, + nfillzero, + nfillvalue, + ndfill, + nverify +} COMMANDS; + +void sigpipe (int param) +{ + fprintf(stderr,"write error\n"); + //exit(-1); //uncomment end if network connetion is down +} + +int writefull(int socket,char * data,int size){ + int sz =3D 0; + while (sz < size) + sz +=3D write(socket, data+sz, size-sz); + return sz; +} + + +int write_message(int s,char * message){ + size_t len =3D strlen(message); + char buf[10]; + sprintf(buf,"%d:",(unsigned int)len); + size_t size =3D strlen(buf); + + struct timeval tv; + fd_set writeset; + fd_set errorset; + FD_ZERO(&writeset); + FD_ZERO(&errorset); + FD_SET(clientSocket, &writeset); + FD_SET(clientSocket, &errorset); + tv.tv_sec =3D 0; + tv.tv_usec =3D 100; + int max =3D s+1; + tv.tv_sec =3D 10; + tv.tv_usec =3D 0; + int ret =3D select(max, NULL, &writeset, NULL, &tv); + if (ret =3D=3D -1) + { + return -1; + } + if (ret =3D=3D 0) + { + return -1; + } + if (FD_ISSET(s, &writeset)) + { + if (writefull(s, buf, size) !=3D size){ + return -1; + } + if (writefull(s, message, len) !=3D len){ + return -1; + } + } + return 0; +} + +void log_info(char *str) +{ + if (write_message(clientSocket, str) !=3D 0){ + fprintf(stderr,"write error\n"); + } +} + +/* fill pages with zero */ +void zero_pages(void **page_array,int npages) +{ + int n =3D 0; + for(n=3D0;n 0); + + close(clientSocket); + close(mainSocket); + + if (prev_fn=3D=3DSIG_IGN) signal (SIGTERM,SIG_IGN); + + return 0; +} + + --=20 1.6.2.5