요약·해설, 영어 원문, 전체 번역을 구분해 실었습니다. API 이름, 코드 심벌, 소스 경로는 원문 표기를 유지합니다.
1. 요약·해설
원문의 핵심 내용을 정리하고 커널 프로그래밍에 필요한 설명을 덧붙였습니다. 아래의 전체 번역과는 별도로 작성한 해설입니다.
dmsetup script
delay.rst:29-54동일 device 지연, read/write device 분리, read·write·flush별 독립 delay 예시를 제공합니다.
2. 영어 원문 전체
번역에 사용한 Linux v6.18.37 원문입니다. 줄 번호는 해당 버전의 소스 파일을 기준으로 합니다.
원문 전체 펼치기
========
dm-delay
========
Device-Mapper's "delay" target delays reads and/or writes
and/or flushes and optionally maps them to different devices.
Arguments::
<device> <offset> <delay> [<write_device> <write_offset> <write_delay>
[<flush_device> <flush_offset> <flush_delay>]]
Table line has to either have 3, 6 or 9 arguments:
3: apply offset and delay to read, write and flush operations on device
6: apply offset and delay to device, also apply write_offset and write_delay
to write and flush operations on optionally different write_device with
optionally different sector offset
9: same as 6 arguments plus define flush_offset and flush_delay explicitly
on/with optionally different flush_device/flush_offset.
Offsets are specified in sectors.
Delays are specified in milliseconds.
Example scripts
===============
::
#!/bin/sh
#
# Create mapped device named "delayed" delaying read, write and flush operations for 500ms.
#
dmsetup create delayed --table "0 `blockdev --getsz $1` delay $1 0 500"
::
#!/bin/sh
#
# Create mapped device delaying write and flush operations for 400ms and
# splitting reads to device $1 but writes and flushes to different device $2
# to different offsets of 2048 and 4096 sectors respectively.
#
dmsetup create delayed --table "0 `blockdev --getsz $1` delay $1 2048 0 $2 4096 400"
::
#!/bin/sh
#
# Create mapped device delaying reads for 50ms, writes for 100ms and flushes for 333ms
# onto the same backing device at offset 0 sectors.
#
dmsetup create delayed --table "0 `blockdev --getsz $1` delay $1 0 50 $2 0 100 $1 0 333"
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미에 맞춰 전체 내용을 번역했습니다. 코드, 함수명, 코드 심벌, URL은 원문 표기를 유지합니다.
dm-delay argument 형식
1-28Device-Mapper의 `delay` target은 read, write, flush를 지연시키며 선택적으로 서로 다른 device로 map할 수 있습니다.
Argument 형식은 다음과 같습니다.
<device> <offset> <delay> [<write_device> <write_offset> <write_delay>
[<flush_device> <flush_offset> <flush_delay>]]
Table line에는 정확히 3개, 6개 또는 9개 argument가 와야 합니다.
Offset은 sector 단위이고 delay는 millisecond 단위입니다.
Read, write, flush 지연 예
29-54첫 script는 `delayed`라는 mapped device를 만들고 read, write, flush를 모두 500ms 지연합니다.
#!/bin/sh
#
# Create mapped device named "delayed" delaying read, write and flush operations for 500ms.
#
dmsetup create delayed --table "0 `blockdev --getsz $1` delay $1 0 500"
두 번째 script는 read를 `$1` device의 2048-sector offset으로 보내고, write와 flush는 다른 `$2` device의 4096-sector offset으로 보내면서 400ms 지연합니다. Argument가 6개이므로 write와 flush가 같은 두 번째 설정을 공유합니다.
#!/bin/sh
#
# Create mapped device delaying write and flush operations for 400ms and
# splitting reads to device $1 but writes and flushes to different device $2
# to different offsets of 2048 and 4096 sectors respectively.
#
dmsetup create delayed --table "0 `blockdev --getsz $1` delay $1 2048 0 $2 4096 400"
세 번째 script는 같은 backing device의 offset 0에서 read를 50ms, write를 100ms, flush를 333ms 지연하도록 9개 argument를 사용합니다.
#!/bin/sh
#
# Create mapped device delaying reads for 50ms, writes for 100ms and flushes for 333ms
# onto the same backing device at offset 0 sectors.
#
dmsetup create delayed --table "0 `blockdev --getsz $1` delay $1 0 50 $2 0 100 $1 0 333"
각 operation의 device, offset, delay 설정을 비교합니다.
3·6·9 argument 형식
delay.rst:1-28Operation별 device, sector offset과 delay를 공유하거나 분리하는 table 형식을 설명합니다.