CPPFLAGS=-ITurboPFor-Integer-Compression/
INSTALL ?= install
PREFIX ?= /usr/local
+URING_LIBS = $(shell pkg-config --libs liburing)
+
+ifeq ($(URING_LIBS),)
+ CPPFLAGS += -DWITHOUT_URING
+endif
all: plocate plocate-build
plocate: plocate.o io_uring_engine.o TurboPFor-Integer-Compression/libic.a
- $(CXX) -o $@ $^ -lzstd $(shell pkg-config --libs liburing)
+ $(CXX) -o $@ $^ -lzstd $(URING_LIBS)
plocate-build: plocate-build.o TurboPFor-Integer-Compression/libic.a
$(CXX) -o $@ $^ -lzstd
#include <string.h>
+#ifndef WITHOUT_URING
#include <liburing.h>
+#endif
#include <stdint.h>
#include <unistd.h>
#include <memory>
IOUringEngine::IOUringEngine()
{
+#ifdef WITHOUT_URING
+ int ret = -1;
+#else
int ret = io_uring_queue_init(queue_depth, &ring, 0);
+#endif
using_uring = (ret >= 0);
}
return;
}
+#ifndef WITHOUT_URING
if (pending_reads < queue_depth) {
io_uring_sqe *sqe = io_uring_get_sqe(&ring);
if (sqe == nullptr) {
} else {
queued_reads.push(QueuedRead{ fd, len, offset, move(cb) });
}
+#endif
}
+#ifndef WITHOUT_URING
void IOUringEngine::submit_read_internal(io_uring_sqe *sqe, int fd, size_t len, off_t offset, function<void(string)> cb)
{
void *buf;
io_uring_sqe_set_data(sqe, pending);
++pending_reads;
}
+#endif
void IOUringEngine::finish()
{
return;
}
+#ifndef WITHOUT_URING
int ret = io_uring_submit(&ring);
if (ret < 0) {
fprintf(stderr, "io_uring_submit: %s\n", strerror(-ret));
}
}
}
+#endif
}
void complete_pread(int fd, void *ptr, size_t len, off_t offset)
#include <queue>
#include <string>
#include <stdint.h>
+#ifndef WITHOUT_URING
#include <liburing.h>
+#endif
+#include <sys/socket.h>
class IOUringEngine {
public:
size_t get_waiting_reads() const { return pending_reads + queued_reads.size(); }
private:
+#ifndef WITHOUT_URING
void submit_read_internal(io_uring_sqe *sqe, int fd, size_t len, off_t offset, std::function<void(std::string)> cb);
io_uring ring;
+#endif
size_t pending_reads = 0; // Number of requests we have going in the ring.
bool using_uring;