]> git.proxmox.com Git - ceph.git/blame - ceph/qa/workunits/rbd/krbd_rxbounce.sh
import quincy beta 17.1.0
[ceph.git] / ceph / qa / workunits / rbd / krbd_rxbounce.sh
CommitLineData
20effc67
TL
1#!/usr/bin/env bash
2
3set -ex
4
5rbd create --size 256 img
6
7IMAGE_SIZE=$(rbd info --format=json img | python3 -c 'import sys, json; print(json.load(sys.stdin)["size"])')
8OBJECT_SIZE=$(rbd info --format=json img | python3 -c 'import sys, json; print(json.load(sys.stdin)["object_size"])')
9NUM_OBJECTS=$((IMAGE_SIZE / OBJECT_SIZE))
10[[ $((IMAGE_SIZE % OBJECT_SIZE)) -eq 0 ]]
11OP_SIZE=16384
12
13DEV=$(sudo rbd map img)
14{
15 for ((i = 0; i < $NUM_OBJECTS; i++)); do
16 echo pwrite -b $OP_SIZE -S $i $((i * OBJECT_SIZE)) $OP_SIZE
17 done
18 echo fsync
19 echo quit
20} | xfs_io $DEV
21sudo rbd unmap $DEV
22
23g++ -xc++ -o racereads - -lpthread <<EOF
24#include <assert.h>
25#include <fcntl.h>
26#include <stdlib.h>
27#include <sys/types.h>
28#include <sys/stat.h>
29#include <unistd.h>
30
31#include <thread>
32#include <vector>
33
34const int object_size = $OBJECT_SIZE;
35const int num_objects = $NUM_OBJECTS;
36const int read_len = $OP_SIZE;
37const int num_reads = 1024;
38
39int main() {
40 int fd = open("$DEV", O_DIRECT | O_RDONLY);
41 assert(fd >= 0);
42
43 void *buf;
44 int r = posix_memalign(&buf, 512, read_len);
45 assert(r == 0);
46
47 std::vector<std::thread> threads;
48 for (int i = 0; i < num_objects; i++) {
49 threads.emplace_back(
50 [fd, buf, read_off = static_cast<off_t>(i) * object_size]() {
51 for (int i = 0; i < num_reads; i++) {
52 auto len = pread(fd, buf, read_len, read_off);
53 assert(len == read_len);
54 }
55 });
56 }
57
58 for (auto &t : threads) {
59 t.join();
60 }
61}
62EOF
63
64DEV=$(sudo rbd map -o ms_mode=legacy img)
65sudo dmesg -C
66./racereads
67[[ $(dmesg | grep -c 'libceph: osd.* bad crc/signature') -gt 100 ]]
68sudo rbd unmap $DEV
69
70DEV=$(sudo rbd map -o ms_mode=legacy,rxbounce img)
71sudo dmesg -C
72./racereads
73[[ $(dmesg | grep -c 'libceph: osd.* bad crc/signature') -eq 0 ]]
74sudo rbd unmap $DEV
75
76DEV=$(sudo rbd map -o ms_mode=crc img)
77sudo dmesg -C
78./racereads
79[[ $(dmesg | grep -c 'libceph: osd.* integrity error') -gt 100 ]]
80sudo rbd unmap $DEV
81
82DEV=$(sudo rbd map -o ms_mode=crc,rxbounce img)
83sudo dmesg -C
84./racereads
85[[ $(dmesg | grep -c 'libceph: osd.* integrity error') -eq 0 ]]
86sudo rbd unmap $DEV
87
88# rxbounce is a no-op for secure mode
89DEV=$(sudo rbd map -o ms_mode=secure img)
90sudo dmesg -C
91./racereads
92[[ $(dmesg | grep -c 'libceph: osd.* integrity error') -eq 0 ]]
93sudo rbd unmap $DEV
94
95DEV=$(sudo rbd map -o ms_mode=secure,rxbounce img)
96sudo dmesg -C
97./racereads
98[[ $(dmesg | grep -c 'libceph: osd.* integrity error') -eq 0 ]]
99sudo rbd unmap $DEV
100
101rbd rm img
102
103echo OK