#keywords workload,test,측정,random,access,read,write,disk,speed #title workload [wiki:Home 대문] / [wiki:CategoryOpenProject 공개프로젝트] / [wiki:workload] ---- == [wiki:workload] == * 개발자 조재혁([mailto:minzkn@minzkn.com]) * 기록사항 2010년 어느날 ~ : 개인의 목적에 맞게 구현[[br]] 2019년 3월 20일 : 공개[[br]] [[TableOfContents]] === 개요 === Filesystem 을 경유한 Random R/W access부하를 주어 성능을 측정하는 프로그램 workload는 이러한 Random 특성을 기본적인 옵션 및 설정을 통해서 부하를 발생시킵니다. (Random 특성은 실제 다양한 flow가 있을 수 있기 때문에 정량화된 측정방식은 아니라는 점) [attachment:workload_1.png] === 사용권한 === workload source 는 수정없이 사용하신다면 누구나 그대로 사용하셔도 좋습니다. 단, source를 수정하셔서 사용하시려고 한다면 해당 수정사항에 대한 부분을 저에게 알려주시길 바랍니다. === 사용방법 === * normal 실행 {{{#!plain # workload }}} * verbose mode로 실행 (기동시 자세한 초기화 과정이 표시됩니다.) {{{#!plain # workload -v }}} * background 로 실행 ( 이렇게 실행하면 상태 view는 확인할 수 없지만 좀더 높은 성능으로 부하를 줄 수 있습니다. ) {{{#!plain # workload -d }}} * threads 수치 설정 (CPU Core 개수의 2배 이상을 지정하면 다소나마 부하를 높일 수 있습니다. threads를 1로 지정하) {{{#!plain # workload --threads 16 }}} * 특정 시간동안만 부하를 주려면 {{{#!plain # workload --duration }}} * 최대 부하를 주기위해서는 (threads는 Core의 2배수, filecount는 많을수록, filesize는 작을수록 단편화 심한 작업 => 랜덤 부하는 그 특성에 따른 parameter가 다를 필요가 있다는 것.) {{{#!plain # workload -v --threads 64 --filecount 1000 --filesize 4096 }}} * workload Ramdom access 방식 조정 옵션에 대한 주요 옵션 정리. * --threads * --filecount <생성/삭제/변경등의 접근을 위한 임시 파일 개수> * --filesize <하나의 파일에 접근시 단일 I/O 크기> * 측정 성능 수치가 높게 나오려면 1. thread 수치를 Core의 2배수로 설정 (단, 16이하인 경우 16으로 설정) 1. filecount 수치를 Core의 2배수로 설정 1. filesize 수치를 크게 잡을수록 (Ramdom 보다는 순차적인 접근률이 높아집니다.) * 측정 수치가 극악으로 나오게 하려면 1. thread수치를 1 1. filecount 를 1 또는 매우 큰값 1. filesize를 1 * 순수 MySQL(None-thread, Table lock) 특성과 가장 유사한 접근을 위해서는 (유사하다고 생각되는 R/W 특성에 따른 예) 1. thread 수치를 1 1. filecount를 10 1. filesize를 4096 * 현재 workload 기본값 (즉, 아무런 인자 없이 실행하는 경우) 1. threads 16 1. filecount 1000 1. filesize 4096 * 추가적인 특성을 부여하기 위한 옵션 * -v : 초기 구동시 구동내용을 표시하고 syslog 로 관련 내용을 기록 * -d : view를 표시하지 않고 daemonize 로 실행 (순수 I/O를 일으키고 상태를 모니터링하지 않고자 할 때 사용) * --left --right : 임시파일들을 균등하게 접근하지 않고 비율로 접근하는 값 (기본값은 7:1) * --interval : I/O 접근 간격 강제 조정 * --duration : 측정 시간 (이 시간이 지나면 workload는 자동 종료) * --assign-method : 임시 파일을 disk경로 단위로 분산하는 알고리즘 선택 (기본값: even) * --relocate : 임시 파일을 비율에 따라서 재배치(파일 move) 병행 * 그 밖에 본래 구현은 있으나 빌드시 기본적으로 포함되지 않은 기능 * sqlite3 또는 Mysql 또는 MS-SQL 로 workload 실행 결과를 리포팅(push) 생성하는 기능 (이를 통해서 리포팅된 DB를 기반으로 분석하기 위한 기능) * 중간중간에 리포팅을 모니터링하는 기능인 --dump-disk, --dump-file 옵션이 여기에 관여함. === 다운로드 === * 소스 * 최신 소스 다운로드 : [^https://github.com/minzkn/workload] * [attachment:workload-source-20190320.tar.gz] * [^https://www.minzkn.com/public/release/workload/] * 설정파일 예시 ("/etc/workload.xml"로 저장하고 적절히 수정하여 사용. 설정파일이 없는 경우 내장된 기본 설정으로 동작.) * [^https://www.minzkn.com/public/release/workload/workload.xml] {{{#!plain ./workload.db 127.0.0.1 0 workload workload workload 7 1 0 1000 workload .bin 4096 0 rw ./test/disk1 ./test/disk2 ./test/disk3 ./test/disk4 ./test/disk5 ./test/disk6 ./test/disk7 ./test/disk8 ./test/disk9 ./test/disk10 ./test/disk11 ./test/disk12 ./test/disk13 ./test/disk14 ./test/disk15 ./test/disk16 }}} === 참고자료 === * dd 명령은 Sequential 한 Write 성능을 측정 {{{#!plain dd if=/dev/zero of= bs= count= conv=fsync }}} * iotop 명령은 각 프로세스별 R/W 속도와 총합에 대한 속도를 실시간 정보로 표시 * Generic Netlink protocol을 이용한 TASKSTATS정보로 계산 * "/proc//io" 정보를 활용하는 방법도 있으나 iotop은 Netlink 로 구현됨. * netlink_iotop 예제소스(하기 링크) 현재 실행되고 있는 각 프로세스별 R/W 총량을 정보로 표시. 즉, process 중에서 어떤게 제일 많은 I/O를 일으켰는가를 실시간이 아닌 누적 총량으로 확인 * [^https://www.minzkn.com/public/release/netlink_iotop/] * hdparm/sdparm/smartctl 명령등은 Filesystem 과 상관없는 access 성능 측정 (즉, Disk I/O는 어느정도 의미 있으나 Filesystem을 고려하지 않음) * Filesystem의 성능에 크게 영향을 주는 사항 * mount option * nobarrier vs barrier * noatime vs relatime * jounal 유무 * Disk 탐색(seek) 응답 시간