@@ -60,8 +60,8 @@ DEFINE_string(benchmarks,
60
60
" randomwithverify,"
61
61
" fill100K,"
62
62
" crc32c,"
63
- " snappycomp ,"
64
- " snappyuncomp ,"
63
+ " compress ,"
64
+ " uncompress ,"
65
65
" acquireload,"
66
66
" fillfromstdin," ,
67
67
@@ -338,6 +338,10 @@ enum rocksdb::CompressionType StringToCompressionType(const char* ctype) {
338
338
return rocksdb::kZlibCompression ;
339
339
else if (!strcasecmp (ctype, " bzip2" ))
340
340
return rocksdb::kBZip2Compression ;
341
+ else if (!strcasecmp (ctype, " lz4" ))
342
+ return rocksdb::kLZ4Compression ;
343
+ else if (!strcasecmp (ctype, " lz4hc" ))
344
+ return rocksdb::kLZ4HCCompression ;
341
345
342
346
fprintf (stdout, " Cannot parse compression type '%s'\n " , ctype);
343
347
return rocksdb::kSnappyCompression ; // default value
@@ -841,7 +845,13 @@ class Benchmark {
841
845
case rocksdb::kBZip2Compression :
842
846
fprintf (stdout, " Compression: bzip2\n " );
843
847
break ;
844
- }
848
+ case rocksdb::kLZ4Compression :
849
+ fprintf (stdout, " Compression: lz4\n " );
850
+ break ;
851
+ case rocksdb::kLZ4HCCompression :
852
+ fprintf (stdout, " Compression: lz4hc\n " );
853
+ break ;
854
+ }
845
855
846
856
switch (FLAGS_rep_factory) {
847
857
case kPrefixHash :
@@ -896,6 +906,16 @@ class Benchmark {
896
906
strlen (text), &compressed);
897
907
name = " BZip2" ;
898
908
break ;
909
+ case kLZ4Compression :
910
+ result = port::LZ4_Compress (Options ().compression_opts , text,
911
+ strlen (text), &compressed);
912
+ name = " LZ4" ;
913
+ break ;
914
+ case kLZ4HCCompression :
915
+ result = port::LZ4HC_Compress (Options ().compression_opts , text,
916
+ strlen (text), &compressed);
917
+ name = " LZ4HC" ;
918
+ break ;
899
919
case kNoCompression :
900
920
assert (false ); // cannot happen
901
921
break ;
@@ -1146,10 +1166,10 @@ class Benchmark {
1146
1166
method = &Benchmark::Crc32c;
1147
1167
} else if (name == Slice (" acquireload" )) {
1148
1168
method = &Benchmark::AcquireLoad;
1149
- } else if (name == Slice (" snappycomp " )) {
1150
- method = &Benchmark::SnappyCompress ;
1151
- } else if (name == Slice (" snappyuncomp " )) {
1152
- method = &Benchmark::SnappyUncompress ;
1169
+ } else if (name == Slice (" compress " )) {
1170
+ method = &Benchmark::Compress ;
1171
+ } else if (name == Slice (" uncompress " )) {
1172
+ method = &Benchmark::Uncompress ;
1153
1173
} else if (name == Slice (" heapprofile" )) {
1154
1174
HeapProfile ();
1155
1175
} else if (name == Slice (" stats" )) {
@@ -1302,23 +1322,47 @@ class Benchmark {
1302
1322
if (ptr == nullptr ) exit (1 ); // Disable unused variable warning.
1303
1323
}
1304
1324
1305
- void SnappyCompress (ThreadState* thread) {
1325
+ void Compress (ThreadState * thread) {
1306
1326
RandomGenerator gen;
1307
1327
Slice input = gen.Generate (Options ().block_size );
1308
1328
int64_t bytes = 0 ;
1309
1329
int64_t produced = 0 ;
1310
1330
bool ok = true ;
1311
1331
std::string compressed;
1312
- while (ok && bytes < 1024 * 1048576 ) { // Compress 1G
1313
- ok = port::Snappy_Compress (Options ().compression_opts , input.data (),
1332
+
1333
+ // Compress 1G
1334
+ while (ok && bytes < int64_t (1 ) << 30 ) {
1335
+ switch (FLAGS_compression_type_e) {
1336
+ case rocksdb::kSnappyCompression :
1337
+ ok = port::Snappy_Compress (Options ().compression_opts , input.data (),
1338
+ input.size (), &compressed);
1339
+ break ;
1340
+ case rocksdb::kZlibCompression :
1341
+ ok = port::Zlib_Compress (Options ().compression_opts , input.data (),
1314
1342
input.size (), &compressed);
1343
+ break ;
1344
+ case rocksdb::kBZip2Compression :
1345
+ ok = port::BZip2_Compress (Options ().compression_opts , input.data (),
1346
+ input.size (), &compressed);
1347
+ break ;
1348
+ case rocksdb::kLZ4Compression :
1349
+ ok = port::LZ4_Compress (Options ().compression_opts , input.data (),
1350
+ input.size (), &compressed);
1351
+ break ;
1352
+ case rocksdb::kLZ4HCCompression :
1353
+ ok = port::LZ4HC_Compress (Options ().compression_opts , input.data (),
1354
+ input.size (), &compressed);
1355
+ break ;
1356
+ default :
1357
+ ok = false ;
1358
+ }
1315
1359
produced += compressed.size ();
1316
1360
bytes += input.size ();
1317
1361
thread->stats .FinishedSingleOp (nullptr );
1318
1362
}
1319
1363
1320
1364
if (!ok) {
1321
- thread->stats .AddMessage (" (snappy failure)" );
1365
+ thread->stats .AddMessage (" (compression failure)" );
1322
1366
} else {
1323
1367
char buf[100 ];
1324
1368
snprintf (buf, sizeof (buf), " (output: %.1f%%)" ,
@@ -1328,24 +1372,78 @@ class Benchmark {
1328
1372
}
1329
1373
}
1330
1374
1331
- void SnappyUncompress (ThreadState* thread) {
1375
+ void Uncompress (ThreadState * thread) {
1332
1376
RandomGenerator gen;
1333
1377
Slice input = gen.Generate (Options ().block_size );
1334
1378
std::string compressed;
1335
- bool ok = port::Snappy_Compress (Options ().compression_opts , input.data (),
1336
- input.size (), &compressed);
1379
+
1380
+ bool ok;
1381
+ switch (FLAGS_compression_type_e) {
1382
+ case rocksdb::kSnappyCompression :
1383
+ ok = port::Snappy_Compress (Options ().compression_opts , input.data (),
1384
+ input.size (), &compressed);
1385
+ break ;
1386
+ case rocksdb::kZlibCompression :
1387
+ ok = port::Zlib_Compress (Options ().compression_opts , input.data (),
1388
+ input.size (), &compressed);
1389
+ break ;
1390
+ case rocksdb::kBZip2Compression :
1391
+ ok = port::BZip2_Compress (Options ().compression_opts , input.data (),
1392
+ input.size (), &compressed);
1393
+ break ;
1394
+ case rocksdb::kLZ4Compression :
1395
+ ok = port::LZ4_Compress (Options ().compression_opts , input.data (),
1396
+ input.size (), &compressed);
1397
+ break ;
1398
+ case rocksdb::kLZ4HCCompression :
1399
+ ok = port::LZ4HC_Compress (Options ().compression_opts , input.data (),
1400
+ input.size (), &compressed);
1401
+ break ;
1402
+ default :
1403
+ ok = false ;
1404
+ }
1405
+
1337
1406
int64_t bytes = 0 ;
1338
- char * uncompressed = new char [input.size ()];
1339
- while (ok && bytes < 1024 * 1048576 ) { // Compress 1G
1340
- ok = port::Snappy_Uncompress (compressed.data (), compressed.size (),
1341
- uncompressed);
1407
+ int decompress_size;
1408
+ while (ok && bytes < 1024 * 1048576 ) {
1409
+ char *uncompressed = nullptr ;
1410
+ switch (FLAGS_compression_type_e) {
1411
+ case rocksdb::kSnappyCompression :
1412
+ // allocate here to make comparison fair
1413
+ uncompressed = new char [input.size ()];
1414
+ ok = port::Snappy_Uncompress (compressed.data (), compressed.size (),
1415
+ uncompressed);
1416
+ break ;
1417
+ case rocksdb::kZlibCompression :
1418
+ uncompressed = port::Zlib_Uncompress (
1419
+ compressed.data (), compressed.size (), &decompress_size);
1420
+ ok = uncompressed != nullptr ;
1421
+ break ;
1422
+ case rocksdb::kBZip2Compression :
1423
+ uncompressed = port::BZip2_Uncompress (
1424
+ compressed.data (), compressed.size (), &decompress_size);
1425
+ ok = uncompressed != nullptr ;
1426
+ break ;
1427
+ case rocksdb::kLZ4Compression :
1428
+ uncompressed = port::LZ4_Uncompress (
1429
+ compressed.data (), compressed.size (), &decompress_size);
1430
+ ok = uncompressed != nullptr ;
1431
+ break ;
1432
+ case rocksdb::kLZ4HCCompression :
1433
+ uncompressed = port::LZ4_Uncompress (
1434
+ compressed.data (), compressed.size (), &decompress_size);
1435
+ ok = uncompressed != nullptr ;
1436
+ break ;
1437
+ default :
1438
+ ok = false ;
1439
+ }
1440
+ delete[] uncompressed;
1342
1441
bytes += input.size ();
1343
1442
thread->stats .FinishedSingleOp (nullptr );
1344
1443
}
1345
- delete[] uncompressed;
1346
1444
1347
1445
if (!ok) {
1348
- thread->stats .AddMessage (" (snappy failure)" );
1446
+ thread->stats .AddMessage (" (compression failure)" );
1349
1447
} else {
1350
1448
thread->stats .AddBytes (bytes);
1351
1449
}
0 commit comments