Właśnie skończyłem budowę sprzętu, oczekując dużego zysku z nowego napędu NVMe. Moja poprzednia wydajność była niższa niż oczekiwano (przesłano około 3 GB), więc wymieniłem płytę główną / procesor / pamięć / dysk twardy. Chociaż wydajność jest dwukrotnie, co to było , to jeszcze pół co mam na mojego 3-letniego macbook pro z napędem SATA6.
- Procesor: i7-5820k 6core
- Mobo: MSI X99A MPOWER
- Pamięć: 32 GB
- Dysk: Samsung 950 pro NVMe PCIe
Ubuntu (również potwierdzone za pomocą 16.04.1 LTS
):
Release: 15.10
Codename: wily
4.2.0-16-generic
$ sudo blkid
[sudo] password for kross:
/dev/nvme0n1p4: UUID="2997749f-1895-4581-abd3-6ccac79d4575" TYPE="swap"
/dev/nvme0n1p1: LABEL="SYSTEM" UUID="C221-7CA5" TYPE="vfat"
/dev/nvme0n1p3: UUID="c7dc0813-3d18-421c-9c91-25ce21892b9d" TYPE="ext4"
Oto moje wyniki testu:
sysbench --test=fileio --file-total-size=128G prepare
sysbench --test=fileio --file-total-size=128G --file-test-mode=rndrw --max-time=300 --max-requests=0 run
sysbench --test=fileio --file-total-size=128G cleanup
Operations performed: 228000 Read, 152000 Write, 486274 Other = 866274 Total
Read 3.479Gb Written 2.3193Gb Total transferred 5.7983Gb (19.791Mb/sec)
1266.65 Requests/sec executed
Test execution summary:
total time: 300.0037s
total number of events: 380000
total time taken by event execution: 23.6549
per-request statistics:
min: 0.01ms
avg: 0.06ms
max: 4.29ms
approx. 95 percentile: 0.13ms
Threads fairness:
events (avg/stddev): 380000.0000/0.00
execution time (avg/stddev): 23.6549/0.00
Harmonogram jest ustawiony na none
:
# cat /sys/block/nvme0n1/queue/scheduler
none
Oto lspci
informacje:
# lspci -vv -s 02:00.0
02:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a802 (rev 01) (prog-if 02 [NVM Express])
Subsystem: Samsung Electronics Co Ltd Device a801
Physical Slot: 2-1
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Interrupt: pin A routed to IRQ 45
Region 0: Memory at fb610000 (64-bit, non-prefetchable) [size=16K]
Region 2: I/O ports at e000 [size=256]
Expansion ROM at fb600000 [disabled] [size=64K]
Capabilities: [40] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [50] MSI: Enable- Count=1/8 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [70] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset+
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop+ FLReset-
MaxPayload 128 bytes, MaxReadReq 512 bytes
DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr+ TransPend-
LnkCap: Port #0, Speed 8GT/s, Width x4, ASPM L1, Exit Latency L0s <4us, L1 <64us
ClockPM+ Surprise- LLActRep- BwNot- ASPMOptComp+
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 8GT/s, Width x4, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Not Supported, TimeoutDis+, LTR+, OBFF Not Supported
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+, EqualizationPhase1+
EqualizationPhase2+, EqualizationPhase3+, LinkEqualizationRequest-
Capabilities: [b0] MSI-X: Enable+ Count=9 Masked-
Vector table: BAR=0 offset=00003000
PBA: BAR=0 offset=00002000
Capabilities: [100 v2] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
Capabilities: [148 v1] Device Serial Number 00-00-00-00-00-00-00-00
Capabilities: [158 v1] Power Budgeting <?>
Capabilities: [168 v1] #19
Capabilities: [188 v1] Latency Tolerance Reporting
Max snoop latency: 0ns
Max no snoop latency: 0ns
Capabilities: [190 v1] L1 PM Substates
L1SubCap: PCI-PM_L1.2+ PCI-PM_L1.1+ ASPM_L1.2+ ASPM_L1.1+ L1_PM_Substates+
PortCommonModeRestoreTime=10us PortTPowerOnTime=10us
Kernel driver in use: nvme
hdparm
:
$ sudo hdparm -tT --direct /dev/nvme0n1
/dev/nvme0n1:
Timing O_DIRECT cached reads: 2328 MB in 2.00 seconds = 1163.98 MB/sec
Timing O_DIRECT disk reads: 5250 MB in 3.00 seconds = 1749.28 MB/sec
hdparm -v
:
sudo hdparm -v /dev/nvme0n1
/dev/nvme0n1:
SG_IO: questionable sense data, results may be incorrect
multcount = 0 (off)
readonly = 0 (off)
readahead = 256 (on)
geometry = 488386/64/32, sectors = 1000215216, start = 0
fstab
UUID=453cf71b-38ca-49a7-90ba-1aaa858f4806 / ext4 noatime,nodiratime,errors=remount-ro 0 1
# /boot/efi was on /dev/sda1 during installation
#UUID=C221-7CA5 /boot/efi vfat defaults 0 1
# swap was on /dev/sda4 during installation
UUID=8f716653-e696-44b1-8510-28a1c53f0e8d none swap sw 0 0
UUID=C221-7CA5 /boot/efi vfat defaults 0 1
fio
Ma kilka porównywalnych testów, to jest daleko. Kiedy testowałem z FIO i wyłączone sync
, to inna historia:
sync=1
1 job - write: io=145712KB, bw=2428.5KB/s, iops=607, runt= 60002msec
7 jobs - write: io=245888KB, bw=4097.9KB/s, iops=1024, runt= 60005msec
sync=0
1 job - write: io=8157.9MB, bw=139225KB/s, iops=34806, runt= 60001msec
7 jobs - write: io=32668MB, bw=557496KB/s, iops=139373, runt= 60004msec
Oto pełne sync
wyniki dla jednego zadania i 7 zadań:
$ sudo fio --filename=/dev/nvme0n1 --direct=1 --sync=1 --rw=write --bs=4k --numjobs=1 --iodepth=1 --runtime=60 --time_based --group_reporting --name=journal-test
journal-test: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
fio-2.1.11
Starting 1 process
Jobs: 1 (f=1): [W(1)] [100.0% done] [0KB/2368KB/0KB /s] [0/592/0 iops] [eta 00m:00s]
journal-test: (groupid=0, jobs=1): err= 0: pid=18009: Wed Nov 18 18:14:03 2015
write: io=145712KB, bw=2428.5KB/s, iops=607, runt= 60002msec
clat (usec): min=1442, max=12836, avg=1643.09, stdev=546.22
lat (usec): min=1442, max=12836, avg=1643.67, stdev=546.23
clat percentiles (usec):
| 1.00th=[ 1480], 5.00th=[ 1496], 10.00th=[ 1512], 20.00th=[ 1528],
| 30.00th=[ 1576], 40.00th=[ 1592], 50.00th=[ 1608], 60.00th=[ 1608],
| 70.00th=[ 1608], 80.00th=[ 1624], 90.00th=[ 1640], 95.00th=[ 1672],
| 99.00th=[ 2192], 99.50th=[ 6944], 99.90th=[ 7328], 99.95th=[ 7328],
| 99.99th=[ 7520]
bw (KB /s): min= 2272, max= 2528, per=100.00%, avg=2430.76, stdev=61.45
lat (msec) : 2=98.44%, 4=0.58%, 10=0.98%, 20=0.01%
cpu : usr=0.39%, sys=3.11%, ctx=109285, majf=0, minf=8
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued : total=r=0/w=36428/d=0, short=r=0/w=0/d=0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
WRITE: io=145712KB, aggrb=2428KB/s, minb=2428KB/s, maxb=2428KB/s, mint=60002msec, maxt=60002msec
Disk stats (read/write):
nvme0n1: ios=69/72775, merge=0/0, ticks=0/57772, in_queue=57744, util=96.25%
$ sudo fio --filename=/dev/nvme0n1 --direct=1 --sync=1 --rw=write --bs=4k --numjobs=7 --iodepth=1 --runtime=60 --time_based --group_reporting --name=journal-test
journal-test: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
...
fio-2.1.11
Starting 7 processes
Jobs: 6 (f=6): [W(2),_(1),W(4)] [50.4% done] [0KB/4164KB/0KB /s] [0/1041/0 iops] [eta 01m:00s]
journal-test: (groupid=0, jobs=7): err= 0: pid=18025: Wed Nov 18 18:15:10 2015
write: io=245888KB, bw=4097.9KB/s, iops=1024, runt= 60005msec
clat (usec): min=0, max=107499, avg=6828.48, stdev=3056.21
lat (usec): min=0, max=107499, avg=6829.10, stdev=3056.16
clat percentiles (usec):
| 1.00th=[ 0], 5.00th=[ 2992], 10.00th=[ 4512], 20.00th=[ 4704],
| 30.00th=[ 5088], 40.00th=[ 6176], 50.00th=[ 6304], 60.00th=[ 7520],
| 70.00th=[ 7776], 80.00th=[ 9024], 90.00th=[10048], 95.00th=[12480],
| 99.00th=[15936], 99.50th=[18048], 99.90th=[22400], 99.95th=[23936],
| 99.99th=[27008]
bw (KB /s): min= 495, max= 675, per=14.29%, avg=585.60, stdev=28.07
lat (usec) : 2=4.41%
lat (msec) : 2=0.57%, 4=4.54%, 10=80.32%, 20=9.92%, 50=0.24%
lat (msec) : 250=0.01%
cpu : usr=0.14%, sys=0.72%, ctx=173735, majf=0, minf=63
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued : total=r=0/w=61472/d=0, short=r=0/w=0/d=0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
WRITE: io=245888KB, aggrb=4097KB/s, minb=4097KB/s, maxb=4097KB/s, mint=60005msec, maxt=60005msec
Disk stats (read/write):
nvme0n1: ios=21/122801, merge=0/0, ticks=0/414660, in_queue=414736, util=99.90%
Wyrównanie
Sprawdziłem wyrównanie parted
, a także zrobiłem matematykę na podstawie http://www.intel.com/content/dam/www/public/us/en/documents/technology-briefs/ssd-partition-alignment-tech -brief.pdf
kross@camacho:~$ sudo parted
GNU Parted 3.2
Using /dev/nvme0n1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s
(parted) print all
Model: Unknown (unknown)
Disk /dev/nvme0n1: 1000215216s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 2048s 206847s 204800s fat32 EFI system partition boot, esp
2 206848s 486957055s 486750208s ntfs msftdata
3 486957056s 487878655s 921600s ntfs hidden, diag
4 590608384s 966787071s 376178688s ext4
5 966787072s 1000214527s 33427456s linux-swap(v1)
kross@camacho:~$ sudo parted /dev/nvme0n1
GNU Parted 3.2
Using /dev/nvme0n1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) align-check opt 1
1 aligned
(parted) align-check opt 2
2 aligned
(parted) align-check opt 3
3 aligned
(parted) align-check opt 4
4 aligned
(parted) align-check opt 5
5 aligned
TLDR;
Wydaje mi się, że mam coś fundamentalnie niepoprawnie ustawionego, chociaż moje badania niczego nie wykazały. Oczekuję przepustowości ~ 4x mojego 3-letniego starego MacBooka Pro w / SATA6, a otrzymuję 1/2 z niej dzięki NVMe. Dodałem, noatime,nodiratime
co dało mi bardzo małą poprawę, ale nic takiego jak 4x, którego oczekuję. Ponownie partycjonowałem / ponownie instalowałem nowy serwer 15.10, aby upewnić się, że nie mam żadnych problemów z utrzymaniem się i mam te same wyniki.
Czy moje fio
wyniki powyżej synchronizacji / brak synchronizacji wskazują na problem?
Mam więc czyste konto i mogę spróbować wszystkiego. Co mogę spróbować, aby moja wydajność osiągnęła poziom równy? Wszelkie referencje są mile widziane.
źródło
smartctl --scan
a następniesmartctl --all /dev/xxx
gdziexxx
jest to, co pojawiło się w pierwszym poleceniu?apt-get install smartmontools
kończy się niepowodzeniemgrub-probe: error: cannot find a GRUB drive for /dev/nvme0n1p3. Check your device.map.
. Wydaje się (w oparciu o moje wysiłki), żeupdate-grub
nie działa dobrze z powodugrub-probe
błędu.smartctl -i /dev/nvme0n1
zwraca/dev/nvme0n1: Unable to detect device type. Please specify device type with the -d option.
NVMe nie pojawia sięsmartctl -h
jako jako typ urządzenia.uname --kernel-release&&lsb_release --code --short
???4.2.0-16-generic wily
Skylake
procesora, aby uruchomić te dyski SSD z pełną prędkością ...Odpowiedzi:
Dziękuję za pytanie, było dla mnie niezwykle pomocne.
Mam bardzo podobne wrażenia, inną konfigurację sprzętową (używam dysku SSD Intel NVMe). Ale uruchamiam również Ubuntu 16.04. Biorąc pod uwagę twoje dowody i podobny wynik znaleziony w tym artykule, byłem przekonany, że problem dotyczy sposobu konfigurowania dysków NVMe przez Ubuntu.
Postanowiłem rozwiązać problem, nie rezygnując całkowicie z Ubuntu. Ale bez względu na to, co zrobiłem, nie byłem w stanie uzyskać prędkości powyżej 2000 MB / s podczas testowania z hdparm dokładnie tak, jak to opisałeś.
Więc trochę kopałem i znalazłem przewodnik dostarczony przez Intela. Próbowałem wszystkiego, co zasugerowali w tym przewodniku i odkryłem, że jedna część była inna. W dolnej części omówiono prawidłowe wyrównywanie partycji dysku. To jedna część, która nie pasowała do mojej instalacji. Mój blok początkowy nie był podzielny przez 4096 bajtów. Używał rozmiaru sektora 512 bajtów zamiast rozmiaru sektora 4k.
Jasne, sformatowałem dysk, aby uruchomić partycję z wartością podzielną przez 4096 i WRESZCIE byłem w stanie przerwać prędkość 2000 MB / s.
W tej chwili wynosi średnio 2,3 GB / s, gdy spodziewam się, że będzie nieco wyższy. Obwiniam to za to, że kiedy uruchamiam,
sudo fdisk -l
napęd NVMe wciąż pokazuje rozmiar sektora fizycznego 512 bajtów. Planuję kontynuować dochodzenie, ale mam nadzieję, że to ci pomoże!źródło
parted
mówi, że jest wyrównany na podstawie rozmiaru bloku 512, ale nie jest podzielny przez 4096. Więc chcę tylko potwierdzić: rozmiar sektora pozostaje na 512, a jedyne co zrobiłeś, to uruchomić partycję w miejscu podzielnym przez 4096 prawda?Uwaga: ta odpowiedź jest stara. W Linuksie 4.19 domyślnym harmonogramem jest blk_mq . Najprawdopodobniej problem z wolnym dyskiem SSD PCIe NVMe działa gdzie indziej.
Oryginalna odpowiedź:
Proszę dodać
do parametrów rozruchowych jądra, w przeciwnym razie nie sądzę, że zobaczysz korzyści płynące ze zwiększonej kolejki poleceń NVMe i poleceń dla kolejki.
Uwaga: Wiem, że jest to arch, ale możesz także zajrzeć na Wiki, aby uzyskać więcej informacji na temat strojenia we / wy.
źródło
Wątek ten ma jeden rok (październik 2016 r.). Jedna z najwyżej ocenianych odpowiedzi zaleca sterownik Intel NVMe, który ma dwa lata (2015).
W lutym 2017 r. Samsung wydał aktualizację oprogramowania układowego, która wykorzystuje instalator rozruchowy ISO oparty na systemie Linux. Pod tym samym linkiem znajdują się sterowniki, które można zainstalować w systemie Windows 7/8/10. Wkrótce będę instalować zarówno na moim nowym Samsung 960 Pro, jak i na nowym laptopie i7-6700 firmy Dell. Wraz z flashowaniem systemu BIOS i aktualizowaniem innych sterowników opartych na Dell.
Myślę, że ważne jest, aby ponownie przejrzeć te stare wątki i zapewnić nowym użytkownikom bieżące (w każdym razie od 11 października 2017 r.) Linki, aby mieli wszystkie opcje otwarte.
Wiele wyszukiwań w Google zwróciło niską wydajność Samsunga 960 Pro pod Linuksem, czyli o połowę mniejszą niż Windows, więc zachęcam wszystkich do wyszukiwania jak największej liczby opcji.
Po zaimplementowaniu
scsi_mod.use_blk_mq=1
parametru jądra:Usunięcie parametru jądra i ponowne uruchomienie:
Wygląda na to, że teraz
scsi_mod.use_blk_mq=1
system działa wolniej, a nie szybciej. W pewnym momencie mogło to być korzystne.źródło
Oto kilka interesujących informacji: w systemie Windows dysk nie działa zgodnie z testami porównawczymi, dopóki nie zostanie wyłączone opróżnianie pamięci podręcznej. Zwykle nie odbywa się to bezpośrednio; zamiast tego instalowany jest sterownik dostawcy (w tym przypadku sterownik Samsung NVMe).
Jeśli wykonasz test porównawczy ze sterownikiem dostawcy, a następnie wyłączysz opróżnianie pamięci podręcznej w systemie Windows, otrzymasz te same liczby. Byłoby to mało prawdopodobne, gdyby sprzedawca nie ignorował opróżniania pamięci podręcznej.
Przetłumaczone na Linux-land, co oznacza, że w systemie Windows, aby uzyskać duże liczby testów, które widzisz we wszystkich recenzjach, musisz je wyłączyć
fsync
, przy czym wszystko to oznacza niezawodność (brak fsync, a konkretnie brak bariery zapisu, oznacza, że moc utrata w niewłaściwym czasie może zepsuć cały FS, w zależności od implementacji - uporządkowane zapisy tworzą sytuacje „niemożliwe”.Dyski SSD „data center” firmy Samsung są wyposażone w kondensatory, które zapewniają prawidłowe opróżnianie buforowanych danych. Nie dotyczy to ich napędów konsumenckich.
Właśnie opracowałem to od pierwszych zasad, dodając wczoraj 1 TB NVMe do mojej nowej wersji. Nie jestem szczególnie szczęśliwy i nawiązałem kontakt z pomocą techniczną Samsunga, aby zobaczyć, co mówią - ale wątpię, czy wrócę.
źródło
Nie mogę jeszcze komentować, więc muszę odpowiedzieć. :-(
Nie mam porównywalnego napędu, ale zgaduję, że wartości z hdparm są w porządku. Jeśli tak, to zakładam, że używasz sysbench w sposób nieoptymalny. Spróbuj eksperymentować z parametrem --num-Threads, aby wygenerować większe obciążenie dysku. Przynajmniej na moim komputerze różnica między 1 wątkiem (domyślnym) a 16 wątkami wynosiła około 1: 4 na standardowym dysku SATA SSD. Rozumiem, że dyski NVMe zaczynają świecić, im bardziej równoległe zadania obciążają je.
źródło
fio
test z 1 i 7 wątkami oraz odniesienie do wielu testów porównawczych, używając go jako podstawy.Większość dysków SSD pada płasko na twarz, jeśli flaga synchronizacji = 1 (D_SYNC). Niestety jest to dobrze znany problem w czasopismach Ceph. Zobacz tę stronę, aby uzyskać więcej informacji i listę napędów, które działają dobrze przy włączonej synchronizacji:
http://www.sebastien-han.fr/blog/2014/10/10/ceph-how-to-test-if-your-ssd-is-suitable-as-a-journal-device/
źródło
Intel 750 NVMe 400GB 261 MB/s (1 job) 884 MB/s (5 jobs)
z dużym marginesem synchronizacji, a nawet gorzej niż w przypadku poprzedniej generacjiSamsung XP941 256GB 2.5 MB/s (1 job) 5 MB/s (7 jobs)
. Choć może być dobrze znany, wciąż jest mniejszy niż powinien.Mój slot M.2 był ograniczony do 10 Mb / s. Użyłem adaptera PCIe, aby obejść to ograniczenie: https://www.amazon.com/Lycom-DT-120-M-2-PCIe-to-PCIe-3-0-x4-Adapter-Support-M-2 -PCIe-2280-2260-2242 / dp / B00MYCQP38 /
Twoja płyta główna mówi, że jest pełna 32 Mb / s w obie strony i może to prawda, ale pomyślałem, że wspomnę o adapterze, ponieważ zadziałał dla mnie (mam około dwukrotnie większą szybkość podłączania do wbudowanego gniazda M.2). Myślę, że było to 25 USD, a jeśli spędziłeś już wystarczająco dużo czasu na majstrowaniu, warto spróbować.
O swoich doświadczeniach z recenzją Amazon napisałem: https://www.amazon.com/gp/customer-reviews/R21BXILGXW4D9C/ref=cm_cr_arp_d_rvw_ttl?ie=UTF8&ASIN=B01639694M
źródło