# fio calls
Sources
https://www.thomas-krenn.com/de/wiki/Fio_Grundlagen#Welche_Blockgr.C3.B6.C3.9Fe_soll_eingesetzt_werden.3F
https://git.kernel.dk/?p=fio.git;a=blob;f=HOWTO;h=025443be406669ece150b28858c67ed9cb2f56d9;hb=HEAD
## Sequential read/write, thread count can be varied
//Basic structure
`sudo fio --name FIO-BANDWIDTH --filename=/mnt/md0/mp_test_dir/test --rw={read|randread|write|randwrite} --size={10|100|1000}m --ioengine={sync|libaio} --blocksize=128k --iodepth={1,2,4,8,16,24,32,48,64} --direct=1 --numjobs={1,2,4,8,16,24,32,48,64} --runtime=60 --group_reporting --time_based --thread --refill_buffers`
// 1GB sequential file read using libaio(), 64 threads, --refill_buffers to avoid SSD compression effects, --direct to avoid using page cache and therefore RAM, --thread to avoid forking jobs but instead creating threads
`sudo fio --name FIO-BANDWIDTH --filename=/mnt/md0/mp_test_dir/test --rw=read --size=1000m --ioengine=libaio --blocksize=128k --iodepth=64 --direct=1 --numjobs=64 --runtime=60 --group_reporting --time_based --thread --refill_buffers`
// 1GB sequential file read using read(), 1 thread, --refill_buffers to avoid SSD compression effects, --direct to avoid using page cache and therefore RAM
`sudo fio --name FIO-BANDWIDTH --filename=/mnt/md0/mp_test_dir/test --rw=read --size=1000m --ioengine=sync --blocksize=128k --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting --time_based --refill_buffers`
// 1GB sequential file write using libaio(), 64 threads, --refill_buffers to avoid SSD compression effects, --direct to avoid using page cache and therefore RAM, --thread to avoid forking jobs but instead creating threads
`sudo fio --name FIO-BANDWIDTH --filename=/mnt/md0/mp_test_dir/test --rw=write --size=1000m --ioengine=libaio --blocksize=128k --iodepth=64 --direct=1 --numjobs=64 --runtime=60 --group_reporting --time_based --thread --refill_buffers`
// 1GB sequential file read using write(), 1 thread, --refill_buffers to avoid SSD compression effects, --direct to avoid using page cache and therefore RAM
`sudo fio --name FIO-BANDWIDTH --filename=/mnt/md0/mp_test_dir/test --rw=write --size=1000m --ioengine=sync --blocksize=128k --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting --time_based --refill_buffers`
## Random read/write, thread count can be varied
// 1GB random file read using libaio(), 64 threads, --refill_buffers to avoid SSD compression effects, --direct to avoid using page cache and therefore RAM, --thread to avoid forking jobs but instead creating threads
`sudo fio --name FIO-BANDWIDTH --filename=/mnt/md0/mp_test_dir/test --rw=randread --size=1000m --ioengine=libaio --blocksize=128k --iodepth=64 --direct=1 --numjobs=64 --runtime=60 --group_reporting --time_based --thread --refill_buffers`
// 1GB random file read using read(), 1 thread, --refill_buffers to avoid SSD compression effects, --direct to avoid using page cache and therefore RAM
`sudo fio --name FIO-BANDWIDTH --filename=/mnt/md0/mp_test_dir/test --rw=randread --size=1000m --ioengine=sync --blocksize=128k --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting --time_based --refill_buffers`
// 1GB random file write using libaio(), 64 threads, --refill_buffers to avoid SSD compression effects, --direct to avoid using page cache and therefore RAM, --thread to avoid forking jobs but instead creating threads
`sudo fio --name FIO-BANDWIDTH --filename=/mnt/md0/mp_test_dir/test --rw=randwrite --size=1000m --ioengine=libaio --blocksize=128k --iodepth=64 --direct=1 --numjobs=64 --runtime=60 --group_reporting --time_based --thread --refill_buffers`
// 1GB random file read using write(), 1 thread, --refill_buffers to avoid SSD compression effects, --direct to avoid using page cache and therefore RAM
`sudo fio --name FIO-BANDWIDTH --filename=/mnt/md0/mp_test_dir/test --rw=randwrite --size=1000m --ioengine=sync --blocksize=128k --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting --time_based --refill_buffers`
##
name,iterations,real_time,cpu_time,time_unit,bytes_per_second,items_per_second,label,error_occurred,error_message
"FileIOMicroReadBenchmarkFixture/FIO_READ_DRAM/1000/64/real_time",1,0,0,ns,1.413e+11,,,,
"FileIOMicroReadBenchmarkFixture/FIO_READ_SEQUENTIAL_THREADED_SSD/1000/64/real_time",1,0,0,ns,1.25e+10,,,,
"FileIOMicroReadBenchmarkFixture/FIO_READ_SEQUENTIAL_THREADED_LOW_LATENCY_SSD/1000/64/real_time",1,0,0,ns,2.4e+9,,,,
Meeting Notes
Exercise
- problem an datenstruktur: müssten gesamten chunk zugreifen, um einen wert zu holen
- laden von daten sollte spaltenorientiert sein
- sozusagen: wir brauchen nur diesen eintrag und wollen nicht komplett laden
- column muss auf mmap schon vorhanden sein
- sanity check
- warum umap tricky
- umap mal mit weniger threads
- umap ein filler und ein evictor
Follow up übung: wie sähe es mit dictionary segments aus?
Zwischenpräsi
- benchmark was gemacht
- überlegung für vereinfachte segmente
- wollen das gleernte auf hyrise anwenden
- ausblick was noch in den verbleibendne wochen
Was genauer use case
-> Gesammtes datenset kann ohne kompression nicht im hauptspeicher gehalten werden - wenn wir z.B. datensatz von 1tb aben
-> wie daten genau dann im HS haben wenn wir sie brauchen
-> bei mmap ist das der page cache
-> wollen mittels eines bereitgestellten buffer managers (mmap), dass wir daten, die wir akutell nicht prozessieren auslagern können