[rhelv6-beta-list] A simple program runs under KVM faster than under nake PC.
Kirby Zhou
kirbyzhou at sohu-rd.com
Mon Aug 9 06:40:22 UTC 2010
Can any one test my program to verify the problem?
Regards,
Kirby Zhou
from SOHU-RD +86-10-6272-8261
-----Original Message-----
From: rhelv6-beta-list-bounces at redhat.com
[mailto:rhelv6-beta-list-bounces at redhat.com] On Behalf Of Kirby Zhou
Sent: Sunday, August 08, 2010 6:54 PM
To: 'Red Hat Enterprise Linux 6 (Santiago) Beta releases discussion
mailing-list'; rhelv5-list at redhat.com
Subject: Re: [rhelv6-beta-list] A simple program runs under KVM faster than
under nake PC.
A More simplified version:
]# g++ testaes2.cpp -lcrypto -lz
RHEL6 nake
[root at djt_10_47 ~]# time ./a.out 1 10000
crc:a4580383
real 0m5.481s
user 0m5.479s
sys 0m0.001s
RHEL6 KVM
[root at djt_10_199 ~]# time ./a.out 1 10000
crc:a4580383
real 0m2.959s
user 0m2.950s
sys 0m0.008s
RHEL5 nake
[@djt_10_48 ~]# time ./a.out 1 10000
crc:a4580383
real 0m5.533s
user 0m5.488s
sys 0m0.000s
RHEL5 Xen
[@djt_10_190 ~]# time ./a.out 1 10000
crc:a4580383
real 0m5.550s
user 0m5.504s
sys 0m0.000s
RHEL5 KVM
[@djt_10_192 ~]# time ./a.out 1 10000
crc:a4580383
real 0m2.930s
user 0m2.925s
sys 0m0.003s
]# cat testaes2.cpp
#define _XOPEN_SOURCE 500
#define __STDC_FORMAT_MACROS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <sys/types.h>
#include <malloc.h>
#include <stdint.h>
#include <inttypes.h>
#include <getopt.h>
#include <vector>
#include <algorithm>
#include <zlib.h>
#include <openssl/aes.h>
#include <dlfcn.h>
#define PAGE_SIZE 4096
void print_usage()
{
fprintf(stderr, "usage:\n");
fprintf(stderr, " [options] <loop_number> <total_request>\n");
fprintf(stderr, "\n");
}
struct TestCaseDesc {
unsigned thr_number;
unsigned long long total_io;
};
struct routine_context {
int id;
const TestCaseDesc* testcase;
};
static uint32_t do_cpu(const TestCaseDesc& testcase, const off64_t io_off,
size_t io_size, void* const buf, void* const jobbuf, uint32_t crc32_iv)
{
// fill data
const uintmax_t tmp = io_off / 257;
for (size_t i = 0; i < io_size; i+= sizeof(uintmax_t) ) {
((uintmax_t*)buf)[i/sizeof(uintmax_t)] = (i + tmp) &
0xf00fff;
}
AES_KEY key = {};
uint8_t iv[AES_BLOCK_SIZE] = {};
AES_set_encrypt_key((const uint8_t*)"hollyshitgodfather", 128,
&key);
AES_cbc_encrypt((const uint8_t*)buf, (uint8_t*)jobbuf, io_size,
&key, iv, AES_ENCRYPT);
uint32_t c = crc32(crc32_iv, (const uint8_t*)jobbuf, io_size);
return c;
}
void* io_routine(void* _arg)
{
routine_context* arg = (routine_context*) _arg;
const TestCaseDesc testcase = *arg->testcase;
const size_t io_size = 32768;
void* const buf = memalign(PAGE_SIZE, io_size);
void* const jobbuf = memalign(PAGE_SIZE, io_size*2);
uint32_t crc32_c = 0;
for (int i=arg->id; i<testcase.total_io; i+=testcase.thr_number) {
off64_t io_off = i*io_size;
crc32_c = do_cpu(testcase, io_off, io_size, buf, jobbuf,
crc32_c);
}
fprintf(stdout, "crc:%08x\n", crc32_c);
}
void process_arguments(int argc, char* argv[], TestCaseDesc* result)
{
TestCaseDesc testcase = { };
int c;
bool opt_flag[256] = { };
char* perr_strto = NULL;
while ( -1 != (c = getopt(argc, argv, "")) ) {
opt_flag[c] = true;
switch (c) {
default:
fprintf(stderr, "Invalid: -%c %s\n", c, optarg);
print_usage();
exit(1);
}
if (perr_strto && *perr_strto) {
fprintf(stderr, "Invalid number: %s\n", optarg);
print_usage();
exit(1);
}
}
if (argc - optind != 2) {
print_usage();
exit(1);
}
testcase.thr_number = strtoul(argv[optind++], NULL, 0);
testcase.total_io = strtoull(argv[optind++], NULL, 0);
*result = testcase;
}
int main(int argc, char* argv[])
{
TestCaseDesc testcase = { };
process_arguments(argc, argv, &testcase);
routine_context* context = new routine_context[testcase.thr_number];
for (int i = 0; i < testcase.thr_number; ++i) {
context[i].testcase = &testcase;
context[i].id = i;
}
for (int i = 0; i < testcase.thr_number; ++i) {
io_routine(&context[i]);
}
}
Regards
Kirby Zhou
From: rhelv6-beta-list-bounces at redhat.com
[mailto:rhelv6-beta-list-bounces at redhat.com] On Behalf Of Kirby Zhou
Sent: Sunday, August 08, 2010 6:05 PM
To: 'Red Hat Enterprise Linux 6 (Santiago) Beta releases discussion
mailing-list'; rhelv5-list at redhat.com
Subject: [rhelv6-beta-list] A simple program runs under KVM faster than
under nake PC.
Both RHEL5/RHEL6 encounter the same situation.
Is there any potential bug?
_______________________________________________
rhelv6-beta-list mailing list
rhelv6-beta-list at redhat.com
https://www.redhat.com/mailman/listinfo/rhelv6-beta-list
More information about the rhelv6-beta-list
mailing list