|
@@ -18,6 +18,7 @@
|
|
#include <stdlib.h>
|
|
#include <stdlib.h>
|
|
#include <errno.h>
|
|
#include <errno.h>
|
|
#include <leveldb/db.h>
|
|
#include <leveldb/db.h>
|
|
|
|
+#include <leveldb/options.h>
|
|
|
|
|
|
#include <starpu.h>
|
|
#include <starpu.h>
|
|
#include <core/disk.h>
|
|
#include <core/disk.h>
|
|
@@ -136,26 +137,6 @@ starpu_leveldb_read (void *base, void *obj, void *buf, off_t offset, size_t size
|
|
}
|
|
}
|
|
|
|
|
|
static int
|
|
static int
|
|
-starpu_leveldb_async_read (void *base STARPU_ATTRIBUTE_UNUSED, void *obj, void *buf, off_t offset, size_t size, void * async_channel)
|
|
|
|
-{
|
|
|
|
- struct starpu_leveldb_obj * tmp = (struct starpu_leveldb_obj *) obj;
|
|
|
|
-
|
|
|
|
- struct _starpu_async_channel * channel = (struct _starpu_async_channel *) async_channel;
|
|
|
|
- struct aiocb *aiocb = &channel->event.disk_event._starpu_aiocb_disk;
|
|
|
|
-
|
|
|
|
- memset(aiocb, 0, sizeof(struct aiocb));
|
|
|
|
-
|
|
|
|
- aiocb->aio_fildes = tmp->descriptor;
|
|
|
|
- aiocb->aio_offset = offset;
|
|
|
|
- aiocb->aio_nbytes = size;
|
|
|
|
- aiocb->aio_buf = buf;
|
|
|
|
- aiocb->aio_reqprio = 0;
|
|
|
|
- aiocb->aio_lio_opcode = LIO_NOP;
|
|
|
|
-
|
|
|
|
- return aio_read(aiocb);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static int
|
|
|
|
starpu_leveldb_full_read(unsigned node, void *base, void * obj, void ** ptr, size_t * size)
|
|
starpu_leveldb_full_read(unsigned node, void *base, void * obj, void ** ptr, size_t * size)
|
|
{
|
|
{
|
|
struct starpu_leveldb_obj * tmp = (struct starpu_leveldb_obj *) obj;
|
|
struct starpu_leveldb_obj * tmp = (struct starpu_leveldb_obj *) obj;
|
|
@@ -192,25 +173,6 @@ starpu_leveldb_write (void *base, void *obj, const void *buf, off_t offset, size
|
|
}
|
|
}
|
|
|
|
|
|
static int
|
|
static int
|
|
-starpu_leveldb_async_write (void *base STARPU_ATTRIBUTE_UNUSED, void *obj, void *buf, off_t offset, size_t size, void * async_channel)
|
|
|
|
-{
|
|
|
|
- struct starpu_leveldb_obj * tmp = (struct starpu_leveldb_obj *) obj;
|
|
|
|
-
|
|
|
|
- struct _starpu_async_channel * channel = (struct _starpu_async_channel *) async_channel;
|
|
|
|
- struct aiocb *aiocb = &channel->event.disk_event._starpu_aiocb_disk ;
|
|
|
|
- memset(aiocb, 0, sizeof(struct aiocb));
|
|
|
|
-
|
|
|
|
- aiocb->aio_fildes = tmp->descriptor;
|
|
|
|
- aiocb->aio_offset = offset;
|
|
|
|
- aiocb->aio_nbytes = size;
|
|
|
|
- aiocb->aio_buf = buf;
|
|
|
|
- aiocb->aio_reqprio = 0;
|
|
|
|
- aiocb->aio_lio_opcode = LIO_NOP;
|
|
|
|
-
|
|
|
|
- return aio_write(aiocb);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static int
|
|
|
|
starpu_leveldb_full_write (unsigned node, void * base, void * obj, void * ptr, size_t size)
|
|
starpu_leveldb_full_write (unsigned node, void * base, void * obj, void * ptr, size_t size)
|
|
{
|
|
{
|
|
struct starpu_leveldb_obj * tmp = (struct starpu_leveldb_obj *) obj;
|
|
struct starpu_leveldb_obj * tmp = (struct starpu_leveldb_obj *) obj;
|
|
@@ -325,50 +287,6 @@ get_leveldb_bandwidth_between_disk_and_main_ram(unsigned node)
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
|
|
-static void
|
|
|
|
-starpu_leveldb_wait_request(void * async_channel)
|
|
|
|
-{
|
|
|
|
- struct _starpu_async_channel * channel = (struct _starpu_async_channel *) async_channel;
|
|
|
|
- const struct aiocb * aiocb = &channel->event.disk_event._starpu_aiocb_disk;
|
|
|
|
- const struct aiocb * list[1];
|
|
|
|
- list[0] = aiocb;
|
|
|
|
- int values = -1;
|
|
|
|
- int error_disk = EAGAIN;
|
|
|
|
- while(values < 0 || error_disk == EAGAIN)
|
|
|
|
- {
|
|
|
|
- /* Wait the answer of the request TIMESTAMP IS NULL */
|
|
|
|
- values = aio_suspend(list, 1, NULL);
|
|
|
|
- error_disk = errno;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static int
|
|
|
|
-starpu_leveldb_test_request(void * async_channel)
|
|
|
|
-{
|
|
|
|
- struct timespec time_wait_request;
|
|
|
|
- time_wait_request.tv_sec = 0;
|
|
|
|
- time_wait_request.tv_nsec = 0;
|
|
|
|
-
|
|
|
|
- struct _starpu_async_channel * channel = (struct _starpu_async_channel *) async_channel;
|
|
|
|
- const struct aiocb * aiocb = &channel->event.disk_event._starpu_aiocb_disk;
|
|
|
|
- const struct aiocb * list[1];
|
|
|
|
- list[0] = aiocb;
|
|
|
|
- int values = -1;
|
|
|
|
- int error_disk = EAGAIN;
|
|
|
|
-
|
|
|
|
- /* Wait the answer of the request */
|
|
|
|
- values = aio_suspend(list, 1, &time_wait_request);
|
|
|
|
- error_disk = errno;
|
|
|
|
- /* request is finished */
|
|
|
|
- if (values == 0)
|
|
|
|
- return 1;
|
|
|
|
- /* values == -1 */
|
|
|
|
- if (error_disk == EAGAIN)
|
|
|
|
- return 0;
|
|
|
|
- /* an error occured */
|
|
|
|
- STARPU_ABORT();
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
struct starpu_disk_ops starpu_disk_leveldb_ops = {
|
|
struct starpu_disk_ops starpu_disk_leveldb_ops = {
|
|
.alloc = starpu_leveldb_alloc,
|
|
.alloc = starpu_leveldb_alloc,
|
|
.free = starpu_leveldb_free,
|
|
.free = starpu_leveldb_free,
|
|
@@ -376,14 +294,14 @@ struct starpu_disk_ops starpu_disk_leveldb_ops = {
|
|
.close = starpu_leveldb_close,
|
|
.close = starpu_leveldb_close,
|
|
.read = starpu_leveldb_read,
|
|
.read = starpu_leveldb_read,
|
|
.write = starpu_leveldb_write,
|
|
.write = starpu_leveldb_write,
|
|
- .async_write = starpu_leveldb_async_write,
|
|
|
|
- .async_read = starpu_leveldb_async_read,
|
|
|
|
|
|
+ .async_write = NULL,
|
|
|
|
+ .async_read = NULL,
|
|
.plug = starpu_leveldb_plug,
|
|
.plug = starpu_leveldb_plug,
|
|
.unplug = starpu_leveldb_unplug,
|
|
.unplug = starpu_leveldb_unplug,
|
|
.copy = NULL,
|
|
.copy = NULL,
|
|
.bandwidth = get_leveldb_bandwidth_between_disk_and_main_ram,
|
|
.bandwidth = get_leveldb_bandwidth_between_disk_and_main_ram,
|
|
- .wait_request = starpu_leveldb_wait_request,
|
|
|
|
- .test_request = starpu_leveldb_test_request,
|
|
|
|
|
|
+ .wait_request = NULL,
|
|
|
|
+ .test_request = NULL,
|
|
.full_read = starpu_leveldb_full_read,
|
|
.full_read = starpu_leveldb_full_read,
|
|
.full_write = starpu_leveldb_full_write
|
|
.full_write = starpu_leveldb_full_write
|
|
};
|
|
};
|