forked from vitalif/vitastor
Set request size in NBD
parent
e65a28e27e
commit
7619a789c0
|
@ -75,7 +75,7 @@ public:
|
||||||
}
|
}
|
||||||
fcntl(sockfd[0], F_SETFL, fcntl(sockfd[0], F_GETFL, 0) | O_NONBLOCK);
|
fcntl(sockfd[0], F_SETFL, fcntl(sockfd[0], F_GETFL, 0) | O_NONBLOCK);
|
||||||
nbd_fd = sockfd[0];
|
nbd_fd = sockfd[0];
|
||||||
if (run_nbd(sockfd, cfg["nbd_device"].string_value().c_str(), cfg["size"].uint64_value(), NBD_FLAG_SEND_FLUSH, 30) < 0)
|
if (run_nbd(sockfd, cfg["dev_num"].int64_value(), cfg["size"].uint64_value(), NBD_FLAG_SEND_FLUSH, 30) < 0)
|
||||||
{
|
{
|
||||||
perror("run_nbd");
|
perror("run_nbd");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -110,15 +110,22 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int run_nbd(int sockfd[2], const char *dev, uint64_t size, uint64_t flags, unsigned timeout)
|
int run_nbd(int sockfd[2], int dev_num, uint64_t size, uint64_t flags, unsigned timeout)
|
||||||
{
|
{
|
||||||
// Check handle size
|
// Check handle size
|
||||||
assert(sizeof(cur_req.handle) == 8);
|
assert(sizeof(cur_req.handle) == 8);
|
||||||
int r, nbd = open(dev, O_RDWR);
|
char path[64] = { 0 };
|
||||||
|
sprintf(path, "/dev/nbd%d", dev_num);
|
||||||
|
int r, nbd = open(path, O_RDWR), qd_fd;
|
||||||
if (nbd < 0)
|
if (nbd < 0)
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
r = ioctl(nbd, NBD_CLEAR_SOCK);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
goto end_close;
|
||||||
|
}
|
||||||
r = ioctl(nbd, NBD_SET_SOCK, sockfd[1]);
|
r = ioctl(nbd, NBD_SET_SOCK, sockfd[1]);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
{
|
{
|
||||||
|
@ -143,6 +150,15 @@ protected:
|
||||||
goto end_close;
|
goto end_close;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Configure request size
|
||||||
|
sprintf(path, "/sys/block/nbd%d/queue/max_sectors_kb", dev_num);
|
||||||
|
qd_fd = open(path, O_WRONLY);
|
||||||
|
if (qd_fd < 0)
|
||||||
|
{
|
||||||
|
goto end_close;
|
||||||
|
}
|
||||||
|
write(qd_fd, "32768", 5);
|
||||||
|
close(qd_fd);
|
||||||
if (!fork())
|
if (!fork())
|
||||||
{
|
{
|
||||||
// Run in child
|
// Run in child
|
||||||
|
@ -184,7 +200,7 @@ protected:
|
||||||
data->callback = [this](ring_data_t *data) { handle_send(data->res); };
|
data->callback = [this](ring_data_t *data) { handle_send(data->res); };
|
||||||
send_msg.msg_iov = send_list.data();
|
send_msg.msg_iov = send_list.data();
|
||||||
send_msg.msg_iovlen = send_list.size();
|
send_msg.msg_iovlen = send_list.size();
|
||||||
my_uring_prep_sendmsg(sqe, nbd_fd, &send_msg, 0);
|
my_uring_prep_sendmsg(sqe, nbd_fd, &send_msg, MSG_ZEROCOPY);
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_send(int result)
|
void handle_send(int result)
|
||||||
|
|
Loading…
Reference in New Issue