ทำไม SD card ของฉันถึงช้า


23

การ์ด SD ของฉันดูเหมือนว่าจะทำงานช้า ฉันมีการ์ด SDHC Class 10 ขนาด 16 GB ของ ADATA ฉันตรวจสอบรายการความเข้ากันได้ซึ่งแสดงรายการการ์ดที่มีข้อกำหนดคล้ายกันและระบุว่าเป็น "ทำงาน" แม้แต่งานง่าย ๆ เช่นการรับรายชื่อไดเรกทอรีในไดเรกทอรีขนาดเล็กอาจใช้เวลาสองสามวินาทีในครั้งแรกที่ฉันขอ มีเครื่องมือใดที่ฉันสามารถใช้เพื่อตรวจสอบประสิทธิภาพการทำงานของการ์ด SD ของฉัน นอกจากนี้ยังมีการเปลี่ยนแปลงการกำหนดค่าใด ๆ ที่ฉันสามารถทำได้เพื่อให้การ์ด SD ตอบสนองได้เร็วขึ้น?

ฉันใช้ Raspberry Pi เป็นBitTorrent seedbox ที่ไม่มีหัวดังนั้นสิ่งที่ฉันกำลังทำอยู่ก็แค่ทำงานบนบรรทัดคำสั่ง ฉันใช้ตัวแยก 240/16 เพื่อให้แน่ใจว่าฉันมีหน่วยความจำเต็มจำนวนสูงสุด

อัพเดท

หลังจากรันการทดสอบบางอย่างตามที่ @Krzysztof Adamski แนะนำด้วย "dd" ฉันได้รับผลลัพธ์ที่ดีบางอย่างโดยมีความเร็วในการอ่าน 20 MB / s และความเร็วในการเขียนประมาณ 10 MB / s อย่างไรก็ตามยังคงมีปัญหาเกี่ยวกับความเร็วของ I / O อยู่ เมื่อทำการทดสอบฉันรันคำสั่ง "dd" ในพื้นหลังและวิ่งไปด้านบนเพื่อดูว่าเกิดอะไรขึ้น ฉันสังเกตเห็นว่ากระบวนการ "mmcqd" นั้นใช้การประมวลผลค่อนข้างน้อยระหว่าง 5% ถึง 10% ฉันมองไปรอบ ๆ บนอินเทอร์เน็ตและพบว่ามีคนหลายคนรายงานว่า "mmcqd" ใช้ซีพียูสักหน่อย จากนั้นฉันก็รันคำสั่งต่อไปนี้เพื่อทดสอบการอ่านและการเขียนในเวลาเดียวกัน

sudo dd if=/dev/mmcblk0 of=test.dat bs=1M count=1024

เมื่อรันคำสั่งนี้ฉันได้รับปริมาณงานเพียง 977 kB / s และ "mmcqd" รายงานการใช้งานตัวประมวลผลระหว่าง 10% ถึง 25% ทุก 5 ถึง 10 วินาทีหลังจากนั้นมันจะกลับไปที่เดิม ดังนั้นฉันจึงทำการทดสอบเพิ่มเติม ฉันรันคำสั่งสองรายการต่อไปนี้ในพื้นหลังแล้วดูว่าเกิดอะไรขึ้นด้านบน

sudo dd if=/dev/mmcblk0 of=/dev/null bs=1M count=1024 &
sudo dd if=/dev/zero of=test.dat bs=1M count=1024 &

ในกรณีนี้ "mmcqd" จะใช้งานโปรเซสเซอร์ได้สูงสุดประมาณ 35% แต่ปริมาณงานนั้นดีกว่ามากที่ประมาณ 7.5 MB / s สำหรับการอ่านและประมาณ 5.3 MB / s สำหรับการเขียน

ดูเหมือนว่ามีปัญหาบางอย่างเกิดขึ้นที่นี่ซึ่งการเขียนหนักทำให้ "mmcqd" ล็อคระบบ สิ่งนี้ทำให้การส่ง daemon ทำให้ช้าลงเกือบเป็นศูนย์ทันทีที่ความเร็วสูงเกินไปเนื่องจากรอการ์ด SD เมื่อใช้ transmission-daemon ฉันเห็นการใช้งาน "mmcqd" สูงมาก


คุณแน่ใจหรือว่าการ์ด SD เป็นสาเหตุของปัญหานี้ คุณลองใช้การ์ดอื่นเพื่อแยกส่วนอื่นของระบบออกก่อนได้หรือไม่?
Dawid Ferenczy Rogožan

คุณได้ตรวจสอบ syslog และ kernel log ของคุณสำหรับข้อความที่เกี่ยวข้องกับอุปกรณ์ mmc หรือไม่? การ์ดบางใบก็ไม่ทำงานใน Raspberry Pi บางคนต้องการการปรับแต่งเล็กน้อยเพื่อให้ทำงานได้อย่างน่าเชื่อถือ
Joppe

ลิงก์การ์ด SD ได้ถูกย้ายแล้ว
ray023

1
@ Ray023 ขอบคุณ ฉันอัพเดทลิงค์ ในอนาคตคุณสามารถแก้ไขคำถามได้ ฉันคิดว่าเพราะคุณเป็นคนใหม่การแก้ไขจะไม่ถูกดำเนินการทันที แต่จะถูกบันทึกไว้สำหรับผู้โพสต์ดั้งเดิมหรือผู้ใช้ตัวแทนระดับสูงอื่น ๆ เพื่ออนุมัติ
Kibbee

คำตอบ:


21

ทดสอบความเร็วในการอ่านการ์ด:

มีสองวิธีง่าย ๆ ในการทดสอบความเร็วในการอ่าน (ไดเรกทอรีรายการเป็นเพียงการดำเนินการอ่าน):

  • ใช้คำสั่ง dd:

    sudo dd if=/dev/mmcblk0 of=/dev/null bs=8M count=100

    นี่จะอ่านข้อมูล 800MB จากการ์ด SD ของคุณและลบทิ้งเป็น / dev / null หากใช้เวลานานคุณสามารถเปลี่ยน count = 100 เป็น count = 10 เป็น 80MB เท่านั้น หลังจากคำสั่งเสร็จสิ้นควรพิมพ์ข้อความด้วยความเร็วในการอ่าน คุณควรได้รับอย่างน้อยสอง MB / s

  • ใช้คำสั่ง hdparm:

    sudo hdparm -t /dev/mmcblk0

    สิ่งนี้ควรให้ผลลัพธ์ความเร็วใกล้เคียงกันกับคำสั่งแรกและควรมีอย่างน้อยสอง MB / s

การทดสอบความเร็วในการเขียนการ์ด:

ไม่มีวิธีง่ายๆในการทดสอบความเร็วในการเขียนเนื่องจากคุณจะต้องเขียนข้อมูลลงในการ์ด หากคุณต้องการทำเช่นนี้ในระดับต่ำ (ละเว้นระบบไฟล์) คุณจะต้องแทนที่ข้อมูลบางอย่างในการ์ดและคุณอาจไม่ต้องการทำเช่นนี้ สิ่งนี้สามารถทำได้หากคุณมี swap พาร์ติชั่นเนื่องจากสามารถปิดการใช้งานได้อย่างง่ายดาย (ด้วยswapoff -a), ทดสอบกับ dd (ด้วยdd if=/dev/zero of=/dev/{yourswappartitionnanehare} bs=8M count=25) แล้วสร้างใหม่ (พร้อมmkswap /dev/{yourswappartitionnanehare})

หากคุณไม่มี swap partition คุณสามารถทดสอบความเร็วในการเขียนระบบไฟล์โดยใช้คำสั่ง dd:

dd if = / dev / zero of = / home / pi / testfile bs = 8M count = 25

นี้จะสร้างไฟล์ 200MB /home/pi/testfileใน คุณสามารถใช้ชื่อไฟล์อื่นที่คุณต้องการ

หมายเหตุ:

  • ขณะทำการทดสอบความเร็วตรวจสอบให้แน่ใจว่าไม่มีโปรแกรมอื่นใดที่ทำงานอยู่ในระบบของคุณ
  • หลังจากการทดสอบคุณสามารถตรวจสอบผลลัพธ์ของdmesgคำสั่งเพื่อดูว่ามีข้อความใด ๆ เกี่ยวกับระบบย่อย mmc
  • ให้แน่ใจว่าคุณติดตั้งเฟิร์มแวร์ล่าสุดแล้ว มีแพทช์โดยไม่คำนึงถึงความเร็วของการ์ด SD เป็นครั้งคราว
  • คุณอาจต้องการตรวจสอบเฟิร์มแวร์ที่เก่ากว่าเนื่องจากอาจมีการถดถอย วิธีที่ง่ายที่สุดในการทำเช่นนี้ (แต่ไม่ใช่ดีที่สุด) คือการทดสอบอิมเมจระบบอื่น ๆ วิธีที่ยากกว่าคือการใช้ GitHub และตรวจสอบไฟล์ประวัติเฟิร์มแวร์

คำชมของฉัน บน MacBook Air ฉันได้ 1.4 MB / วินาทีเมื่อเขียนไฟล์ img ไปยังการ์ด SD ขนาด 4GB 4GB การทดสอบการอ่าน PI รายงาน 20 MB / วินาที!
ScrollerBlaster

ฉันมีสิ่งเดียวกัน ความเร็วในการอ่านของฉันคือ 500MB / วินาที ฉันทำอะไรผิดหรือเปล่า?
Dark ที่สุด N2O

12

สำหรับประสิทธิภาพของการ์ด SD มันมีความสำคัญมากไม่ว่าจะเป็นการเข้าถึงตามลำดับ (เช่นเดียวกับ dd) หรือการเข้าถึงแบบสุ่มในบล็อกขนาดเล็ก การ์ด SD โดยเฉพาะการ์ดระดับสูงนั้นดูจะเหมาะสำหรับการเข้าถึงแบบลำดับซึ่งเหมาะสำหรับการจัดเก็บภาพถ่ายหรือวิดีโอ อย่างไรก็ตามสำหรับการรันระบบปฏิบัติการของการเข้าถึงแบบสุ่ม SD การ์ดมีความสำคัญมากกว่าเนื่องจากไฟล์ขนาดเล็กจำนวนมากจะถูกอ่านและเขียน ฉันเดาว่า Bitcoin จะสร้างการเข้าถึงแบบสุ่มบ้างเช่นกัน

หัวข้อการสนทนาทั้งสองนี้มีการวัดและการสนทนาใน SD card มากมาย โดยทั่วไปแล้วความเร็วในการเขียนแบบสุ่มนั้นแตกต่างกันไปตามการตอบสนองของการรันระบบปฏิบัติการของการ์ด ความเร็วนี้มักจะต่ำกว่าความเร็วของการเขียนตามลำดับซึ่งเป็นความเร็วที่ผู้ผลิตต้องการรายงาน คลาสการ์ด SD นั้นขึ้นอยู่กับความเร็วต่อเนื่องและคลาสที่ต่ำกว่า (4 หรือ 6) อาจเหมาะสำหรับการใช้ราสเบอร์รี่มากกว่า

iozoneเครื่องมือวัดความเร็วของหลาย ๆ รูปแบบการเข้าถึงที่แตกต่างกัน ผมได้โพสต์คำแนะนำสั้น ๆ สำหรับการรวบรวม iozone ในราสเบอร์รี่ที่นี่


2
คำตอบที่น่าสนใจ ทำได้ดีนี่.
Jivings

น่าสนใจมากเพราะฉันเพิ่งซื้อ 4x คลาส 10 ... แดง! :-(
BerggreenDK

@ BerggreenDK : บางทีในอนาคตคุณอาจใช้การ์ดเพื่อจุดประสงค์ที่แตกต่างกันและบางทีคุณอาจมีความสุขที่คุณซื้อคลาสการ์ด 10
เนเวอร์แลนด์

1
ความเร็วในการเขียนแบบสุ่มควรมีผลเพียงเล็กน้อยในงานทั่วไปเช่นลำดับการบูตหรือรายการไดเรกทอรี แม้สำหรับ torrents ผลการทดสอบด้วยการเขียนแบบ 4KB นั้นไม่เกี่ยวข้อง: ขนาดก้อนโดยทั่วไปอยู่ที่ประมาณ 1MB และถ้าคุณไม่มี RAM ว่างแคชดิสก์จะจัดกลุ่มเหล่านี้เป็นการเขียนตามลำดับที่ใหญ่กว่า
Dmitry Grigoryev

0

สำหรับสล็อตออนบอร์ด RasPI มีการพูดคุยกันอย่างกว้างขวางในเว็บไซต์ RasPI: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=63&t=5057&sid=ee346e3e7cea48d2858a143bcf086362

ไม่มีเวลาอ่านการสนทนาทั้ง 12 หน้า แต่ดูเหมือนว่าจะมีปัญหากับสัญญาณ CLK


0

คุณเขียน "bittorrent" และนั่นทำให้ฉันเดา / คำตอบ

โปรโตคอล torrent ได้รับแพคเกจแบบสุ่มจาก seeders แบบสุ่ม

เมื่อคุณเริ่มใช้ฝนตกหนักบนระบบไฟล์ใด ๆ มันจะค่อนข้างกระจัดกระจาย สิ่งนี้จะส่งผลเสียต่อการแสดงครั้งใหญ่

จากสิ่งที่ฉันรู้เกี่ยวกับ SDCARD FAT / FAT32 ที่กำลังทำงานอยู่และที่แย่กว่านั้นคือการจัดการการแยกส่วน

หาวิธีจัดเรียง SDCARD ของคุณหรือคัดลอกไฟล์ทั้งหมดออกไปจากนั้นติดตั้งระบบปฏิบัติการใหม่

ท้ายสุดการเขียนล็อต (ตามกลไกของ bittorrent) จะทำให้ SDCARD ของคุณฉีกขาดเร็วกว่าการใช้งานปกติ ฉันไม่ได้บอกว่ามันผิดที่จะทำมัน infact ฉันคิดว่าจะคล้ายกับตัวเอง แต่นั่นอาจเป็นสาเหตุของปัญหาของคุณ

ฉันหวังว่าจะมีไคลเอนต์ฝนตกหนักที่จะถ่ายโอน / ย้ายไฟล์ที่ดาวน์โหลดไปยังปลายทางอื่นโดยอัตโนมัติเมื่อการดาวน์โหลด + "เวลาอัปโหลดที่สงวนไว้" เสร็จสมบูรณ์

จากนั้นการจัดเรียงข้อมูลจะเร็วขึ้นมาก


การแตกแฟรกเมนต์มีผลกับการ์ด SD อย่างไร ฉันคิดว่าการแตกแฟรกเมนต์เป็นเพียงปัญหาของดิสก์หมุนเนื่องจากไฟล์จะอยู่ในส่วนที่ไม่ต่อเนื่องกันทำให้หัวอ่าน / เขียนต้องเลื่อนไปทั่วทุกที่เพื่อเข้าถึงไฟล์ ในที่จัดเก็บข้อมูลโซลิดสเตตเช่นการ์ด SD นี่ไม่ใช่ปัญหา อย่างไรก็ตามฉันจะเห็นด้วยกับคุณเกี่ยวกับจำนวนของการกระทำการเขียนที่เกิดจาก BitTorrent ฉันคิดว่ามันมีส่วนเกี่ยวข้องกับปัญหามาก รวมกับหน่วยความจำขนาดเล็กบน RPi (ของฉันมี 256 MB) และดูเหมือนว่าจะเป็นสูตรสำหรับการเข้าถึงดิสก์ที่ช้า การ์ด SD ก็ช้าเช่นกัน
Kibbee

โครงสร้าง FAT / FAT32 นั้นแย่และช้าเมื่อคุณเริ่มมีไฟล์จำนวนมาก และราสเบอร์รี่ตัวน้อยไม่มีพลังมากนักในการเคลื่อนที่ ดังนั้นอะไรก็ตามที่เข้ามาขวางมันให้ช้าลง แต่อีกครั้งมันเป็นเพียงการคาดเดาของฉัน ฉันไม่มีข้อเท็จจริงเกี่ยวกับเรื่องนี้
BerggreenDK

1
RPi ไม่ได้ใช้ FAT / FAT32 ระบบไฟล์คือ EXT4
Kibbee

3
คำตอบมีจุดดีใน bittorrent ที่อาจเขียนข้อมูลลงในไฟล์เป็นชิ้นเล็ก ๆ ตามลำดับแบบสุ่ม การเขียนแบบสุ่มชนิดนี้ไม่มีประสิทธิภาพในการ์ด SD แต่ฉันไม่คิดว่าการจัดเรียงข้อมูลจะช่วยได้ ที่จริงแล้ว FAT นั้นถูกใช้บน Pi แต่สำหรับพาร์ติชันสำหรับบูตเท่านั้น
Frepa

1
@Kibbee: ดูคำตอบของฉันที่raspberrypi.stackexchange.com/questions/8850/ …เพื่อทำความเข้าใจว่าทำไมการ์ด SD จึงมีปัญหาการกระจายตัวของตนเอง เทคนิคซอฟต์แวร์จำนวนมากที่จะหลีกเลี่ยงการแตกแฟรกเมนต์ของฟิสิคัลดิสก์ (เช่นการจัดสรรไฟล์ล่วงหน้า) นั้นไม่มีประโยชน์กับการ์ด SD เนื่องจากจะมีการวางเซกเตอร์ (หรือย้าย) เมื่อมีการเขียนข้อมูลไปยังพวกเขา
supercat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.