juicefs icon indicating copy to clipboard operation
juicefs copied to clipboard

Consider DragonflyDB for metadata

Open solracsf opened this issue 1 year ago • 19 comments

What would you like to be added: https://dragonflydb.io/ https://github.com/dragonflydb/dragonfly

Why is this needed: Dragonfly is an in-memory data store built for modern application workloads. It is fully compatible with the Redis APIs, and required no code changes to adopt. When compared to Redis, Dragonfly delivers 25X more throughput, higher cache hit rates, with lower tail latency, and effortless vertical scalability.

solracsf avatar Mar 22 '23 08:03 solracsf

As you said, it is fully compatible with the Redis APIs, and required no code changes to adopt. What else do you think we should do ?

zhijian-pro avatar Mar 27 '23 04:03 zhijian-pro

Well, give it a try trough testing and mention it in the docs if you (project owners) think it's fuly compatible :)

solracsf avatar Mar 27 '23 11:03 solracsf

Based on current benchmark, DragonflyDB is 100x slower sometimes, it's not a good replacement for Redis. Will fire a issue for DragonflyDB.

davies avatar May 24 '23 03:05 davies

image

We have created an issue in the dragonfly community that describes the problem in detail. https://github.com/dragonflydb/dragonfly/issues/1285

zhijian-pro avatar May 24 '23 06:05 zhijian-pro

After testing, although the Dragonfly community has marked the issue as resolved, the current performance is still not as good as Redis. We will test this issue again after a period of time to determine if it still persists.

zhijian-pro avatar Jun 09 '23 03:06 zhijian-pro

No problem, maybe https://github.com/dragonflydb/dragonfly/pull/1375 get things better 😉

solracsf avatar Jun 09 '23 05:06 solracsf

@solracsf We tested the https://github.com/dragonflydb/dragonfly/pull/1375, the result still not stable

zhijian-pro avatar Jul 03 '23 03:07 zhijian-pro

@zhijian-pro can you request dragonfly to fix it? they closed the issue

tinyc0der avatar Aug 10 '23 06:08 tinyc0der

@vimaxwell what do you see? Have you tried running dragonfly with --tcp_nodelay ?

romange avatar Aug 10 '23 06:08 romange

@vimaxwell We have tested it but found that it is still not very stable after repair. The test method is https://github.com/dragonflydb/dragonfly/issues/1285 You can test it yourself.

zhijian-pro avatar Aug 10 '23 10:08 zhijian-pro

Can you give some numbers for 'not very stable'? In my tests I see mean: 425.78, standard deviation: 374.26 with some small spikes around 1000us, but definitely not 40ms spikes.

royjacobson avatar Aug 14 '23 13:08 royjacobson

I got it

tinyc0der avatar Aug 17 '23 02:08 tinyc0der

I'll test it again soon.

zhijian-pro avatar Aug 26 '23 05:08 zhijian-pro

2023/08/30 Test results:

Redis

root@ip-10-0-101-131:~/repo/juicefs# addr=redis://10.0.101.178:6379/7 go test -count=1  -v  ./pkg/meta/... -run=TestDgfAndRedis
=== RUN   TestDgfAndRedis
2023/08/30 05:52:54.820961 juicefs[81643] <INFO>: Meta address: redis://10.0.101.178:6379/7 [interface.go:494]
2023/08/30 05:52:54.821797 juicefs[81643] <WARNING>: AOF is not enabled, you may lose data if Redis is not shutdown properly. [info.go:84]
2023/08/30 05:52:54.821953 juicefs[81643] <INFO>: Ping redis latency: 80.821µs [redis.go:3523]
2023/08/30 05:52:54.822138 juicefs[81643] <WARNING>: Existing volume will be overwrited: {
  "Name": "benchmarkAll",
  "UUID": "",
  "Storage": "",
  "Bucket": "",
  "BlockSize": 0,
  "TrashDays": 0
} [config.go:96]
2023/08/30 05:52:54.822780 juicefs[81643] <INFO>: Create session 2 OK with version: 1.1.0-dev+unknown [base.go:474]
    benchmarks_test.go:673: number:  0: cost: 380 us
    benchmarks_test.go:673: number:  1: cost: 371 us
    benchmarks_test.go:673: number:  2: cost: 368 us
    benchmarks_test.go:673: number:  3: cost: 378 us
    benchmarks_test.go:673: number:  4: cost: 385 us
    benchmarks_test.go:673: number:  5: cost: 372 us
    benchmarks_test.go:673: number:  6: cost: 367 us
    benchmarks_test.go:673: number:  7: cost: 372 us
    benchmarks_test.go:673: number:  8: cost: 371 us
    benchmarks_test.go:673: number:  9: cost: 360 us
    benchmarks_test.go:673: number: 10: cost: 372 us
    benchmarks_test.go:673: number: 11: cost: 379 us
    benchmarks_test.go:673: number: 12: cost: 373 us
    benchmarks_test.go:673: number: 13: cost: 364 us
    benchmarks_test.go:673: number: 14: cost: 366 us
    benchmarks_test.go:673: number: 15: cost: 399 us
    benchmarks_test.go:673: number: 16: cost: 381 us
    benchmarks_test.go:673: number: 17: cost: 366 us
    benchmarks_test.go:673: number: 18: cost: 389 us
    benchmarks_test.go:673: number: 19: cost: 380 us
    benchmarks_test.go:673: number: 20: cost: 372 us
    benchmarks_test.go:673: number: 21: cost: 361 us
    benchmarks_test.go:673: number: 22: cost: 369 us
    benchmarks_test.go:673: number: 23: cost: 365 us
    benchmarks_test.go:673: number: 24: cost: 370 us
    benchmarks_test.go:673: number: 25: cost: 391 us
    benchmarks_test.go:673: number: 26: cost: 371 us
    benchmarks_test.go:673: number: 27: cost: 374 us
    benchmarks_test.go:673: number: 28: cost: 366 us
    benchmarks_test.go:673: number: 29: cost: 371 us
    benchmarks_test.go:673: number: 30: cost: 363 us
    benchmarks_test.go:673: number: 31: cost: 376 us
    benchmarks_test.go:673: number: 32: cost: 367 us
    benchmarks_test.go:673: number: 33: cost: 365 us
    benchmarks_test.go:673: number: 34: cost: 366 us
    benchmarks_test.go:673: number: 35: cost: 436 us
    benchmarks_test.go:673: number: 36: cost: 383 us
    benchmarks_test.go:673: number: 37: cost: 368 us
    benchmarks_test.go:673: number: 38: cost: 360 us
    benchmarks_test.go:673: number: 39: cost: 365 us
    benchmarks_test.go:673: number: 40: cost: 371 us
    benchmarks_test.go:673: number: 41: cost: 392 us
    benchmarks_test.go:673: number: 42: cost: 378 us
    benchmarks_test.go:673: number: 43: cost: 402 us
    benchmarks_test.go:673: number: 44: cost: 362 us
    benchmarks_test.go:673: number: 45: cost: 375 us
    benchmarks_test.go:673: number: 46: cost: 474 us
    benchmarks_test.go:673: number: 47: cost: 382 us
    benchmarks_test.go:673: number: 48: cost: 373 us
    benchmarks_test.go:673: number: 49: cost: 367 us
    benchmarks_test.go:673: number: 50: cost: 381 us
    benchmarks_test.go:673: number: 51: cost: 369 us
    benchmarks_test.go:673: number: 52: cost: 366 us
    benchmarks_test.go:673: number: 53: cost: 365 us
    benchmarks_test.go:673: number: 54: cost: 366 us
    benchmarks_test.go:673: number: 55: cost: 398 us
    benchmarks_test.go:673: number: 56: cost: 376 us
    benchmarks_test.go:673: number: 57: cost: 360 us
    benchmarks_test.go:673: number: 58: cost: 359 us
    benchmarks_test.go:673: number: 59: cost: 380 us
    benchmarks_test.go:673: number: 60: cost: 365 us
    benchmarks_test.go:673: number: 61: cost: 377 us
    benchmarks_test.go:673: number: 62: cost: 378 us
    benchmarks_test.go:673: number: 63: cost: 377 us
    benchmarks_test.go:673: number: 64: cost: 375 us
    benchmarks_test.go:673: number: 65: cost: 386 us
    benchmarks_test.go:673: number: 66: cost: 381 us
    benchmarks_test.go:673: number: 67: cost: 364 us
    benchmarks_test.go:673: number: 68: cost: 402 us
    benchmarks_test.go:673: number: 69: cost: 372 us
    benchmarks_test.go:673: number: 70: cost: 375 us
    benchmarks_test.go:673: number: 71: cost: 386 us
    benchmarks_test.go:673: number: 72: cost: 373 us
    benchmarks_test.go:673: number: 73: cost: 373 us
    benchmarks_test.go:673: number: 74: cost: 375 us
    benchmarks_test.go:673: number: 75: cost: 368 us
    benchmarks_test.go:673: number: 76: cost: 375 us
    benchmarks_test.go:673: number: 77: cost: 376 us
    benchmarks_test.go:673: number: 78: cost: 374 us
    benchmarks_test.go:673: number: 79: cost: 374 us
    benchmarks_test.go:673: number: 80: cost: 367 us
    benchmarks_test.go:673: number: 81: cost: 374 us
    benchmarks_test.go:673: number: 82: cost: 364 us
    benchmarks_test.go:673: number: 83: cost: 399 us
    benchmarks_test.go:673: number: 84: cost: 408 us
    benchmarks_test.go:673: number: 85: cost: 376 us
    benchmarks_test.go:673: number: 86: cost: 371 us
    benchmarks_test.go:673: number: 87: cost: 389 us
    benchmarks_test.go:673: number: 88: cost: 381 us
    benchmarks_test.go:673: number: 89: cost: 373 us
    benchmarks_test.go:673: number: 90: cost: 378 us
    benchmarks_test.go:673: number: 91: cost: 378 us
    benchmarks_test.go:673: number: 92: cost: 382 us
    benchmarks_test.go:673: number: 93: cost: 374 us
    benchmarks_test.go:673: number: 94: cost: 420 us
    benchmarks_test.go:673: number: 95: cost: 376 us
    benchmarks_test.go:673: number: 96: cost: 392 us
    benchmarks_test.go:673: number: 97: cost: 387 us
    benchmarks_test.go:673: number: 98: cost: 395 us
    benchmarks_test.go:673: number: 99: cost: 447 us
    benchmarks_test.go:676: --------------------test redis://10.0.101.178:6379/7--------------------
    benchmarks_test.go:677: mean: 378.05, standard deviation: 17.42
--- PASS: TestDgfAndRedis (0.10s)
PASS
ok  	github.com/juicedata/juicefs/pkg/meta	0.115s

Dragonfly without tcp_nodelay (Second run result)

root@ip-10-0-101-131:~/repo/juicefs# addr=redis://10.0.101.178:6378/7 go test -count=1  -v  ./pkg/meta/... -run=TestDgfAndRedis
=== RUN   TestDgfAndRedis
2023/08/30 06:55:50.887379 juicefs[93142] <INFO>: Meta address: redis://10.0.101.178:6378/7 [interface.go:494]
2023/08/30 06:55:50.888428 juicefs[93142] <INFO>: Ping redis latency: 77.277µs [redis.go:3523]
2023/08/30 06:55:50.888640 juicefs[93142] <WARNING>: Existing volume will be overwrited: {
  "Name": "benchmarkAll",
  "UUID": "",
  "Storage": "",
  "Bucket": "",
  "BlockSize": 0,
  "TrashDays": 0
} [config.go:96]
2023/08/30 06:55:50.889807 juicefs[93142] <INFO>: Create session 2 OK with version: 1.1.0-dev+unknown [base.go:474]
2023/08/30 06:55:50.933023 juicefs[93142] <WARNING>: unexpected error for lookup: ERR Error running script (call to 8526c64984678fc27f67f44755c8ba7dcdf7ea60): @user_script:12: script tried accessing undeclared key [redis.go:695]
    benchmarks_test.go:673: number:  0: cost: 43978 us
    benchmarks_test.go:673: number:  1: cost: 43987 us
    benchmarks_test.go:673: number:  2: cost: 44007 us
    benchmarks_test.go:673: number:  3: cost: 43996 us
    benchmarks_test.go:673: number:  4: cost: 43953 us
    benchmarks_test.go:673: number:  5: cost: 43980 us
    benchmarks_test.go:673: number:  6: cost: 43972 us
    benchmarks_test.go:673: number:  7: cost: 43993 us
    benchmarks_test.go:673: number:  8: cost: 44000 us
    benchmarks_test.go:673: number:  9: cost: 43974 us
    benchmarks_test.go:673: number: 10: cost: 43990 us
    benchmarks_test.go:673: number: 11: cost: 44003 us
    benchmarks_test.go:673: number: 12: cost: 43988 us
    benchmarks_test.go:673: number: 13: cost: 43963 us
    benchmarks_test.go:673: number: 14: cost: 43981 us
    benchmarks_test.go:673: number: 15: cost: 44021 us
    benchmarks_test.go:673: number: 16: cost: 43965 us
    benchmarks_test.go:673: number: 17: cost: 44024 us
    benchmarks_test.go:673: number: 18: cost: 43949 us
    benchmarks_test.go:673: number: 19: cost: 43973 us
    benchmarks_test.go:673: number: 20: cost: 43998 us
    benchmarks_test.go:673: number: 21: cost: 43957 us
    benchmarks_test.go:673: number: 22: cost: 44009 us
    benchmarks_test.go:673: number: 23: cost: 44017 us
    benchmarks_test.go:673: number: 24: cost: 43935 us
    benchmarks_test.go:673: number: 25: cost: 44056 us
    benchmarks_test.go:673: number: 26: cost: 43976 us
    benchmarks_test.go:673: number: 27: cost: 43956 us
    benchmarks_test.go:673: number: 28: cost: 43978 us
    benchmarks_test.go:673: number: 29: cost: 43964 us
    benchmarks_test.go:673: number: 30: cost: 43980 us
    benchmarks_test.go:673: number: 31: cost: 44031 us
    benchmarks_test.go:673: number: 32: cost: 43971 us
    benchmarks_test.go:673: number: 33: cost: 43980 us
    benchmarks_test.go:673: number: 34: cost: 44028 us
    benchmarks_test.go:673: number: 35: cost: 43989 us
    benchmarks_test.go:673: number: 36: cost: 43941 us
    benchmarks_test.go:673: number: 37: cost: 44005 us
    benchmarks_test.go:673: number: 38: cost: 43986 us
    benchmarks_test.go:673: number: 39: cost: 44002 us
    benchmarks_test.go:673: number: 40: cost: 43981 us
    benchmarks_test.go:673: number: 41: cost: 43976 us
    benchmarks_test.go:673: number: 42: cost: 43971 us
    benchmarks_test.go:673: number: 43: cost: 43995 us
    benchmarks_test.go:673: number: 44: cost: 43977 us
    benchmarks_test.go:673: number: 45: cost: 44038 us
    benchmarks_test.go:673: number: 46: cost: 43967 us
    benchmarks_test.go:673: number: 47: cost: 43979 us
    benchmarks_test.go:673: number: 48: cost: 43984 us
    benchmarks_test.go:673: number: 49: cost: 43983 us
    benchmarks_test.go:673: number: 50: cost: 44000 us
    benchmarks_test.go:673: number: 51: cost: 43980 us
    benchmarks_test.go:673: number: 52: cost: 43968 us
    benchmarks_test.go:673: number: 53: cost: 43985 us
    benchmarks_test.go:673: number: 54: cost: 44004 us
    benchmarks_test.go:673: number: 55: cost: 43985 us
    benchmarks_test.go:673: number: 56: cost: 43997 us
    benchmarks_test.go:673: number: 57: cost: 43987 us
    benchmarks_test.go:673: number: 58: cost: 44001 us
    benchmarks_test.go:673: number: 59: cost: 43972 us
    benchmarks_test.go:673: number: 60: cost: 43988 us
    benchmarks_test.go:673: number: 61: cost: 43990 us
    benchmarks_test.go:673: number: 62: cost: 43982 us
    benchmarks_test.go:673: number: 63: cost: 43986 us
    benchmarks_test.go:673: number: 64: cost: 43985 us
    benchmarks_test.go:673: number: 65: cost: 43945 us
    benchmarks_test.go:673: number: 66: cost: 43995 us
    benchmarks_test.go:673: number: 67: cost: 43991 us
    benchmarks_test.go:673: number: 68: cost: 44001 us
    benchmarks_test.go:673: number: 69: cost: 43997 us
    benchmarks_test.go:673: number: 70: cost: 43954 us
    benchmarks_test.go:673: number: 71: cost: 44010 us
    benchmarks_test.go:673: number: 72: cost: 44033 us
    benchmarks_test.go:673: number: 73: cost: 43964 us
    benchmarks_test.go:673: number: 74: cost: 43954 us
    benchmarks_test.go:673: number: 75: cost: 43979 us
    benchmarks_test.go:673: number: 76: cost: 43989 us
    benchmarks_test.go:673: number: 77: cost: 44008 us
    benchmarks_test.go:673: number: 78: cost: 43979 us
    benchmarks_test.go:673: number: 79: cost: 44004 us
    benchmarks_test.go:673: number: 80: cost: 43995 us
    benchmarks_test.go:673: number: 81: cost: 43977 us
    benchmarks_test.go:673: number: 82: cost: 43997 us
    benchmarks_test.go:673: number: 83: cost: 43978 us
    benchmarks_test.go:673: number: 84: cost: 43980 us
    benchmarks_test.go:673: number: 85: cost: 44000 us
    benchmarks_test.go:673: number: 86: cost: 43973 us
    benchmarks_test.go:673: number: 87: cost: 44030 us
    benchmarks_test.go:673: number: 88: cost: 43959 us
    benchmarks_test.go:673: number: 89: cost: 43970 us
    benchmarks_test.go:673: number: 90: cost: 43999 us
    benchmarks_test.go:673: number: 91: cost: 43972 us
    benchmarks_test.go:673: number: 92: cost: 43990 us
    benchmarks_test.go:673: number: 93: cost: 44005 us
    benchmarks_test.go:673: number: 94: cost: 43984 us
    benchmarks_test.go:673: number: 95: cost: 43990 us
    benchmarks_test.go:673: number: 96: cost: 44014 us
    benchmarks_test.go:673: number: 97: cost: 43948 us
    benchmarks_test.go:673: number: 98: cost: 43990 us
    benchmarks_test.go:673: number: 99: cost: 44000 us
    benchmarks_test.go:676: --------------------test redis://10.0.101.178:6378/7--------------------
    benchmarks_test.go:677: mean: 43986.71, standard deviation: 21.64
--- PASS: TestDgfAndRedis (9.07s)
PASS
ok  	github.com/juicedata/juicefs/pkg/meta	9.083s

Dragonfly with tcp_nodelay

root@ip-10-0-101-131:~/repo/juicefs# addr=redis://10.0.101.178:6378/7 go test -count=1  -v  ./pkg/meta/... -run=TestDgfAndRedis
=== RUN   TestDgfAndRedis
2023/08/30 05:51:49.680699 juicefs[81430] <INFO>: Meta address: redis://10.0.101.178:6378/7 [interface.go:494]
2023/08/30 05:51:49.681852 juicefs[81430] <INFO>: Ping redis latency: 81.495µs [redis.go:3523]
2023/08/30 05:51:49.682073 juicefs[81430] <WARNING>: Existing volume will be overwrited: {
  "Name": "benchmarkAll",
  "UUID": "",
  "Storage": "",
  "Bucket": "",
  "BlockSize": 0,
  "TrashDays": 0
} [config.go:96]
2023/08/30 05:51:49.682834 juicefs[81430] <INFO>: Create session 4 OK with version: 1.1.0-dev+unknown [base.go:474]
2023/08/30 05:51:49.683599 juicefs[81430] <WARNING>: unexpected error for lookup: ERR Error running script (call to 8526c64984678fc27f67f44755c8ba7dcdf7ea60): @user_script:12: script tried accessing undeclared key [redis.go:695]
    benchmarks_test.go:673: number:  0: cost: 559 us
    benchmarks_test.go:673: number:  1: cost: 580 us
    benchmarks_test.go:673: number:  2: cost: 566 us
    benchmarks_test.go:673: number:  3: cost: 610 us
    benchmarks_test.go:673: number:  4: cost: 578 us
    benchmarks_test.go:673: number:  5: cost: 543 us
    benchmarks_test.go:673: number:  6: cost: 558 us
    benchmarks_test.go:673: number:  7: cost: 561 us
    benchmarks_test.go:673: number:  8: cost: 548 us
    benchmarks_test.go:673: number:  9: cost: 545 us
    benchmarks_test.go:673: number: 10: cost: 561 us
    benchmarks_test.go:673: number: 11: cost: 531 us
    benchmarks_test.go:673: number: 12: cost: 572 us
    benchmarks_test.go:673: number: 13: cost: 555 us
    benchmarks_test.go:673: number: 14: cost: 550 us
    benchmarks_test.go:673: number: 15: cost: 544 us
    benchmarks_test.go:673: number: 16: cost: 552 us
    benchmarks_test.go:673: number: 17: cost: 549 us
    benchmarks_test.go:673: number: 18: cost: 556 us
    benchmarks_test.go:673: number: 19: cost: 564 us
    benchmarks_test.go:673: number: 20: cost: 554 us
    benchmarks_test.go:673: number: 21: cost: 547 us
    benchmarks_test.go:673: number: 22: cost: 556 us
    benchmarks_test.go:673: number: 23: cost: 587 us
    benchmarks_test.go:673: number: 24: cost: 586 us
    benchmarks_test.go:673: number: 25: cost: 594 us
    benchmarks_test.go:673: number: 26: cost: 566 us
    benchmarks_test.go:673: number: 27: cost: 551 us
    benchmarks_test.go:673: number: 28: cost: 543 us
    benchmarks_test.go:673: number: 29: cost: 532 us
    benchmarks_test.go:673: number: 30: cost: 536 us
    benchmarks_test.go:673: number: 31: cost: 537 us
    benchmarks_test.go:673: number: 32: cost: 536 us
    benchmarks_test.go:673: number: 33: cost: 541 us
    benchmarks_test.go:673: number: 34: cost: 538 us
    benchmarks_test.go:673: number: 35: cost: 553 us
    benchmarks_test.go:673: number: 36: cost: 590 us
    benchmarks_test.go:673: number: 37: cost: 565 us
    benchmarks_test.go:673: number: 38: cost: 574 us
    benchmarks_test.go:673: number: 39: cost: 556 us
    benchmarks_test.go:673: number: 40: cost: 550 us
    benchmarks_test.go:673: number: 41: cost: 570 us
    benchmarks_test.go:673: number: 42: cost: 583 us
    benchmarks_test.go:673: number: 43: cost: 564 us
    benchmarks_test.go:673: number: 44: cost: 552 us
    benchmarks_test.go:673: number: 45: cost: 533 us
    benchmarks_test.go:673: number: 46: cost: 565 us
    benchmarks_test.go:673: number: 47: cost: 551 us
    benchmarks_test.go:673: number: 48: cost: 567 us
    benchmarks_test.go:673: number: 49: cost: 544 us
    benchmarks_test.go:673: number: 50: cost: 533 us
    benchmarks_test.go:673: number: 51: cost: 533 us
    benchmarks_test.go:673: number: 52: cost: 545 us
    benchmarks_test.go:673: number: 53: cost: 558 us
    benchmarks_test.go:673: number: 54: cost: 551 us
    benchmarks_test.go:673: number: 55: cost: 542 us
    benchmarks_test.go:673: number: 56: cost: 563 us
    benchmarks_test.go:673: number: 57: cost: 600 us
    benchmarks_test.go:673: number: 58: cost: 590 us
    benchmarks_test.go:673: number: 59: cost: 568 us
    benchmarks_test.go:673: number: 60: cost: 572 us
    benchmarks_test.go:673: number: 61: cost: 564 us
    benchmarks_test.go:673: number: 62: cost: 552 us
    benchmarks_test.go:673: number: 63: cost: 575 us
    benchmarks_test.go:673: number: 64: cost: 600 us
    benchmarks_test.go:673: number: 65: cost: 554 us
    benchmarks_test.go:673: number: 66: cost: 563 us
    benchmarks_test.go:673: number: 67: cost: 528 us
    benchmarks_test.go:673: number: 68: cost: 537 us
    benchmarks_test.go:673: number: 69: cost: 522 us
    benchmarks_test.go:673: number: 70: cost: 547 us
    benchmarks_test.go:673: number: 71: cost: 571 us
    benchmarks_test.go:673: number: 72: cost: 585 us
    benchmarks_test.go:673: number: 73: cost: 592 us
    benchmarks_test.go:673: number: 74: cost: 598 us
    benchmarks_test.go:673: number: 75: cost: 577 us
    benchmarks_test.go:673: number: 76: cost: 565 us
    benchmarks_test.go:673: number: 77: cost: 556 us
    benchmarks_test.go:673: number: 78: cost: 550 us
    benchmarks_test.go:673: number: 79: cost: 543 us
    benchmarks_test.go:673: number: 80: cost: 573 us
    benchmarks_test.go:673: number: 81: cost: 546 us
    benchmarks_test.go:673: number: 82: cost: 544 us
    benchmarks_test.go:673: number: 83: cost: 539 us
    benchmarks_test.go:673: number: 84: cost: 538 us
    benchmarks_test.go:673: number: 85: cost: 562 us
    benchmarks_test.go:673: number: 86: cost: 546 us
    benchmarks_test.go:673: number: 87: cost: 519 us
    benchmarks_test.go:673: number: 88: cost: 546 us
    benchmarks_test.go:673: number: 89: cost: 568 us
    benchmarks_test.go:673: number: 90: cost: 545 us
    benchmarks_test.go:673: number: 91: cost: 555 us
    benchmarks_test.go:673: number: 92: cost: 573 us
    benchmarks_test.go:673: number: 93: cost: 557 us
    benchmarks_test.go:673: number: 94: cost: 581 us
    benchmarks_test.go:673: number: 95: cost: 566 us
    benchmarks_test.go:673: number: 96: cost: 543 us
    benchmarks_test.go:673: number: 97: cost: 543 us
    benchmarks_test.go:673: number: 98: cost: 539 us
    benchmarks_test.go:673: number: 99: cost: 655 us
    benchmarks_test.go:676: --------------------test redis://10.0.101.178:6378/7--------------------
    benchmarks_test.go:677: mean: 558.75, standard deviation: 20.96
--- PASS: TestDgfAndRedis (0.16s)
PASS
ok  	github.com/juicedata/juicefs/pkg/meta	0.174s

When the tcp_nodelay parameter is used, the previous instability problem does not exist. The test results is about 30-50% slower than redis, so we think that in the case of `tcp_nodelay``, Dragonfly can be used as a metadata engine for Juicefs just like redis.

When Dragonfly as the metadata engine for JuiceFS,must use tcp_nodelay or the performance is close to unuseable.( may be caused by my compilation method ? please use pre-compiled 1.8,it is works fine without using tcp_nodelay.)

@vimaxwell @royjacobson @solracsf

zhijian-pro avatar Aug 30 '23 07:08 zhijian-pro

Use Dragonfly version of pre-compiled 1.8 can works fine without using tcp_nodelay.

The above problem may be caused by my compilation method. @vimaxwell @royjacobson @solracsf

zhijian-pro avatar Aug 30 '23 09:08 zhijian-pro

That's really weird. I would not expect that to affect anything in this context. Can you compile from tag v1.8.0 instead of building from latest?

romange avatar Aug 30 '23 09:08 romange

@romange what can explain Dragonfly up to 50% slower than redis? 🤔

solracsf avatar Aug 30 '23 13:08 solracsf

Dragonfly has higher avg latency when running locally since it is designed to serve requests remotely. Its multi threaded shared nothing architecture contributes additional latency.

romange avatar Aug 30 '23 14:08 romange

The latency bug should be fixed now on our side. Thanks again for your help in pointing out and understanding the issue!

royjacobson avatar Sep 13 '23 06:09 royjacobson