io_submit(2) - wariua/manpages-ko GitHub Wiki

NAME

io_submit - ๋น„๋™๊ธฐ I/O ์ฒ˜๋ฆฌ ์š”์ฒญ ์ œ์ถœํ•˜๊ธฐ

SYNOPSIS

#include <linux/aio_abi.h>          /* ํ•„์š”ํ•œ ํƒ€์ž… ์ •์˜ */

int io_submit(aio_context_t ctx_id, long nr, struct iocb **iocbpp);

์ฃผ์˜: ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ๋Œ€ํ•œ glibc ๋ž˜ํผ๊ฐ€ ์—†๋‹ค. NOTES ์ฐธ๊ณ .

DESCRIPTION

io_submit() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ AIO ๋ฌธ๋งฅ ctx_id์—์„œ ์ฒ˜๋ฆฌ ํ์— nr ๊ฐœ I/O ์š”์ฒญ ๋ธ”๋ก์„ ๋„ฃ๋Š”๋‹ค. iocbpp ์ธ์ž๋Š” nr ๊ฐœ AIO ์ œ์–ด ๋ธ”๋ก์˜ ๋ฐฐ์—ด์ด์–ด์•ผ ํ•˜๋ฉฐ ์ด๋ฅผ ๋ฌธ๋งฅ ctx_id๋กœ ์ œ์ถœํ•˜๊ฒŒ ๋œ๋‹ค.

linux/aio_abi.h์— ์ •์˜๋ผ ์žˆ๋Š” iocb(I/O ์ œ์–ด ๋ธ”๋ก) ๊ตฌ์กฐ์ฒด์— I/O ๋™์ž‘์„ ์ œ์–ดํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค์ด ์žˆ๋‹ค.

#define <linux/aio_abi.h>

struct iocb {
    __u64   aio_data;
    __u32   PADDED(aio_key, aio_rw_flags);
    __u16   aio_lio_opcode;
    __s16   aio_reqprio;
    __u32   aio_fildes;
    __u64   aio_buf;
    __u64   aio_nbytes;
    __s64   aio_offset;
    __u64   aio_reserved2;
    __u32   aio_flags;
    __u32   aio_resfd;
};

์ด ๊ตฌ์กฐ์ฒด์˜ ํ•„๋“œ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

aio_data
I/O ์™„๋ฃŒ ์‹œ ์ด ๋ฐ์ดํ„ฐ๊ฐ€ io_event ๊ตฌ์กฐ์ฒด์˜ data ํ•„๋“œ๋กœ ๋ณต์‚ฌ๋œ๋‹ค. (io_getevents(2) ์ฐธ๊ณ .)
aio_key
์ปค๋„ ๋‚ด๋ถ€์šฉ ํ•„๋“œ์ด๋‹ค. io_submit() ํ˜ธ์ถœ ํ›„์— ์ด ํ•„๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ๋ง ๊ฒƒ.
aio_rw_flags

๊ตฌ์กฐ์ฒด์™€ ํ•จ๊ป˜ ์ „๋‹ฌํ•˜๋Š” ์ฝ๊ธฐ/์“ฐ๊ธฐ ํ”Œ๋ž˜๊ทธ๋“ค์ด๋‹ค. ์œ ํšจํ•œ ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

RWF_APPEND (๋ฆฌ๋ˆ…์Šค 4.16๋ถ€ํ„ฐ)
ํŒŒ์ผ ๋์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ง๋ถ™์ž„. pwritev2(2)์— ์žˆ๋Š” ๊ฐ™์€ ์ด๋ฆ„์˜ ํ”Œ๋ž˜๊ทธ ์„ค๋ช…๊ณผ open(2)์˜ O_APPEND ์„ค๋ช… ์ฐธ๊ณ .
RWF_DSYNC (๋ฆฌ๋ˆ…์Šค 4.7๋ถ€ํ„ฐ)
๋™๊ธฐํ™” I/O ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์š”๊ฑด์— ๋”ฐ๋ผ ์“ฐ๊ธฐ ๋™์ž‘์ด ์™„๋ฃŒ๋จ. pwritev2(2)์— ์žˆ๋Š” ๊ฐ™์€ ์ด๋ฆ„์˜ ํ”Œ๋ž˜๊ทธ ์„ค๋ช…๊ณผ open(2)์˜ O_DSYNC ์„ค๋ช… ์ฐธ๊ณ .
RWF_HIPRI (๋ฆฌ๋ˆ…์Šค 4.6๋ถ€ํ„ฐ)
๋†’์€ ์šฐ์„ ๋„ ์š”์ฒญ. ๊ฐ€๋Šฅํ•˜๋ฉด ํด๋ง.
RWF_NOWAIT (๋ฆฌ๋ˆ…์Šค 4.14๋ถ€ํ„ฐ)
์ปค๋„ ๋‚ด์—์„œ ํŒŒ์ผ ๋ธ”๋ก ํ• ๋‹น์ด๋‚˜ ๋ณ€๊ฒฝ ํŽ˜์ด์ง€ ํ”Œ๋Ÿฌ์‹ฑ, ๋ฎคํ…์Šค ๋ฝ ๊ฐ™์€ ๋™์ž‘์ด๋‚˜ ํ˜ผ์žกํ•œ ๋ธ”๋ก ์žฅ์น˜ ๋•Œ๋ฌธ์— I/O๊ฐ€ ๋ธ”๋ก ๋˜๋ ค๋Š” ๊ฒฝ์šฐ์— ๋Œ€๊ธฐํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด ์ค‘ ํ•œ ์กฐ๊ฑด์ด๋ผ๋„ ํ•ด๋‹นํ•˜๋ฉด io_event ๊ตฌ์กฐ์ฒด์˜ res ํ•„๋“œ์— ๋ฐ˜ํ™˜ ๊ฐ’ -EAGAIN์„ ๋‹ด์•„์„œ ์ œ์–ด ๋ธ”๋ก์„ ์ฆ‰์‹œ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (io_getevents(2) ์ฐธ๊ณ .)
RWF_SYNC (๋ฆฌ๋ˆ…์Šค 4.7๋ถ€ํ„ฐ)
๋™๊ธฐํ™” I/O ํŒŒ์ผ ๋ฌด๊ฒฐ์„ฑ ์š”๊ฑด์— ๋”ฐ๋ผ ์“ฐ๊ธฐ ๋™์ž‘์ด ์™„๋ฃŒ๋จ. pwritev2(2)์— ์žˆ๋Š” ๊ฐ™์€ ์ด๋ฆ„์˜ ํ”Œ๋ž˜๊ทธ ์„ค๋ช…๊ณผ open(2)์˜ O_SYNC ์„ค๋ช… ์ฐธ๊ณ .
aio_opcode

iocb ๊ตฌ์กฐ์ฒด๋กœ ์ˆ˜ํ–‰ํ•  I/O ์ข…๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์œ ํšจํ•œ ๊ฐ’๋“ค์ด linux/aio_abi.h์— ์—ด๊ฑฐํ˜•์œผ๋กœ ์ •์˜๋ผ ์žˆ๋‹ค.

enum {
    IOCB_CMD_PREAD = 0,
    IOCB_CMD_PWRITE = 1,
    IOCB_CMD_FSYNC = 2,
    IOCB_CMD_FDSYNC = 3,
    IOCB_CMD_NOOP = 6,
    IOCB_CMD_PREADV = 7,
    IOCB_CMD_PWRITEV = 8,
};
aio_reqprio
์š”์ฒญ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
aio_fildes
I/O ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ์ด๋‹ค.
aio_buf
์ฝ๊ธฐ ๋˜๋Š” ์“ฐ๊ธฐ ๋™์ž‘์—์„œ ๋ฐ์ดํ„ฐ ์ด๋™์— ์‚ฌ์šฉํ•  ๋ฒ„ํผ์ด๋‹ค.
aio_nbytes
aio_buf๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฒ„ํผ์˜ ํฌ๊ธฐ์ด๋‹ค.
aio_offset
I/O ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ํŒŒ์ผ ์˜คํ”„์…‹์ด๋‹ค.
aio_flags

iocb ๊ตฌ์กฐ์ฒด์— ์—ฐ๊ณ„ํ•  ํ”Œ๋ž˜๊ทธ๋“ค์˜ ์ง‘ํ•ฉ์ด๋‹ค. ์œ ํšจํ•œ ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

IOCB_FLAG_RESFD
๋น„๋™๊ธฐ I/O ์ œ์–ด ๋กœ์ง์—์„œ ์™„๋ฃŒ ์‹œ aio_resfd์— ์žˆ๋Š” ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋กœ ์•Œ๋ฆผ์„ ์ค˜์•ผ ํ•œ๋‹ค.
IOCB_FLAG_IOPRIO (๋ฆฌ๋ˆ…์Šค 4.18๋ถ€ํ„ฐ)
aio_reqprio ํ•„๋“œ๋ฅผ linux/ioprio.h์— ์ •์˜๋œ IOPRIO_VALUE๋กœ ํ•ด์„ํ•œ๋‹ค.
aio_resfd
๋น„๋™๊ธฐ I/O ์™„๋ฃŒ ์‹œ์— ์•Œ๋ฆผ์„ ๋ณด๋‚ผ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ์ด๋‹ค.

RETURN VALUE

์„ฑ๊ณต ์‹œ io_submit()์€ ์ œ์ถœ๋œ iocb ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (nr๋ณด๋‹ค ์ž‘์„ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ nr์ด 0์ด๋ฉด 0์ผ ์ˆ˜๋„ ์žˆ๋‹ค.) ์‹คํŒจ ๋ฐ˜ํ™˜์— ๋Œ€ํ•ด์„  NOTES๋ฅผ ๋ณด๋ผ.

ERRORS

EAGAIN
iocb๋ฅผ ํ์— ๋„ฃ๊ธฐ ์œ„ํ•œ ์ž์›์ด ์ถฉ๋ถ„์น˜ ์•Š๋‹ค.
EBADF
์ฒซ ๋ฒˆ์งธ iocb์— ์ง€์ •ํ•œ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๋‹ค.
EFAULT
ํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค.
EINVAL
ctx_id๋กœ ์ง€์ •ํ•œ AIO ๋ฌธ๋งฅ์ด ์œ ํšจํ•˜์ง€ ์•Š๋‹ค. nr์ด 0๋ณด๋‹ค ์ž‘๋‹ค. *iocbpp[0]์— ์žˆ๋Š” iocb๊ฐ€ ์ œ๋Œ€๋กœ ์ดˆ๊ธฐํ™” ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค. ์ง€์ •ํ•œ ๋™์ž‘์ด iocb์˜ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ์— ์œ ํšจํ•˜์ง€ ์•Š๋‹ค. aio_reqprio ํ•„๋“œ์˜ ๊ฐ’์ด ์œ ํšจํ•˜์ง€ ์•Š๋‹ค.
ENOSYS
์ด ์•„ํ‚คํ…์ฒ˜์— io_submit()์ด ๊ตฌํ˜„๋ผ ์žˆ์ง€ ์•Š๋‹ค.
EPERM
aio_reqprio ํ•„๋“œ๊ฐ€ ํด๋ž˜์Šค IOPRIO_CLASS_RT๋กœ ์„ค์ •๋ผ ์žˆ์ง€๋งŒ ์ œ์ถœ ๋™์ž‘์„ ํ•˜๋Š” ๋ฌธ๋งฅ์— CAP_SYS_ADMIN ์—ญ๋Šฅ์ด ์—†๋‹ค.

VERSIONS

๋ฆฌ๋ˆ…์Šค 2.5์—์„œ ๋น„๋™๊ธฐ I/O ์‹œ์Šคํ…œ ํ˜ธ์ถœ๋“ค์ด ์ฒ˜์Œ ๋“ฑ์žฅํ–ˆ๋‹ค.

CONFORMING TO

io_submit()์€ ๋ฆฌ๋ˆ…์Šค ์ „์šฉ์ด๋ฏ€๋กœ ์ด์‹์„ฑ์ด ์žˆ์–ด์•ผ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค.

NOTES

glibc์—์„œ ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์˜ ๋ž˜ํผ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค. syscall(2)์„ ์ด์šฉํ•ด ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„๋งˆ ๊ทธ๋ณด๋‹ค๋Š” libaio์—์„œ ์ œ๊ณตํ•˜๋Š” io_submit() ๋ž˜ํผ ํ•จ์ˆ˜๋ฅผ ์“ฐ๊ณ  ์‹ถ์„ ๊ฒƒ์ด๋‹ค.

์ฐธ๊ณ ๋กœ libaio ๋ž˜ํผ ํ•จ์ˆ˜์—์„œ๋Š” ctx_id ์ธ์ž์— ๋‹ค๋ฅธ ํƒ€์ž…(io_context_t)์„ ์“ด๋‹ค. ๋˜ํ•œ libaio ๋ž˜ํผ์—์„œ๋Š” ์ผ๋ฐ˜์ ์ธ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜ค๋ฅ˜ ํ‘œ์‹œ ๊ด€ํ–‰์„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰ ์˜ค๋ฅ˜ ์‹œ์— ์Œ์ˆ˜ ์˜ค๋ฅ˜ ๋ฒˆํ˜ธ๋ฅผ (ERRORS์— ๋‚˜์—ด๋œ ๊ฐ’๋“ค ์ค‘ ํ•˜๋‚˜์˜ ์Œ์ˆ˜ ๊ฐ’์„) ๋ฐ˜ํ™˜ํ•œ๋‹ค. syscall(2)์„ ํ†ตํ•ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ๋ถ€๋ฅด๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์ด ์ผ๋ฐ˜์ ์ธ ์˜ค๋ฅ˜ ํ‘œ์‹œ ๊ด€ํ–‰์„ ๋”ฐ๋ฅธ๋‹ค. ์ฆ‰ -1์ด๊ณ  errno์— ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” (์–‘์ˆ˜) ๊ฐ’์ด ์„ค์ •๋œ๋‹ค.

SEE ALSO

io_cancel(2), io_destroy(2), io_getevents(2), io_setup(2), aio(7)


2018-04-30

โš ๏ธ **GitHub.com Fallback** โš ๏ธ