ความแตกต่างของประสิทธิภาพระหว่าง ramfs และ tmpfs


23

ฉันต้องติดตั้งระบบจัดเก็บข้อมูลในหน่วยความจำสำหรับข้อมูลประมาณ 10 GB ซึ่งประกอบด้วยไฟล์เดียว (ภาพ) 100 kb จำนวนมาก จะมีการอ่านจำนวนมากและมีการเขียนเป็นระยะ ๆ (การเพิ่มไฟล์ใหม่การลบไฟล์เก่า)
ตอนนี้ฉันรู้ว่าtmpfsทำงานเหมือนระบบไฟล์ปกติที่คุณสามารถทำได้เช่นตรวจสอบพื้นที่ว่าง / ใช้แล้วด้วยdfซึ่งเป็นคุณสมบัติที่ดีที่มี อย่างไรก็ตามฉันสนใจว่าramfsจะให้ประโยชน์บางอย่างเกี่ยวกับความเร็วของการปฏิบัติการ IO ฉันรู้ว่าฉันไม่สามารถควบคุมขนาดของหน่วยความจำที่ใช้ไปแล้วเมื่อใช้ramfsและระบบของฉันสามารถหยุดทำงานได้หากใช้ RAM ฟรีอย่างสมบูรณ์ แต่นั่นจะไม่เป็นปัญหาในสถานการณ์นี้

เพื่อสรุปมันฉันสนใจ:
- ประสิทธิภาพฉลาดซึ่งเร็วกว่า: ramfsหรือtmpfs (และอาจเป็นสาเหตุ)
- tmpfsใช้พื้นที่สว็อปเมื่อใด มันย้ายข้อมูลที่บันทึกไว้ไปแล้วเพื่อสลับ (เพื่อเพิ่ม RAM สำหรับโปรแกรมอื่นที่กำลังรันอยู่) หรือเฉพาะข้อมูลใหม่ถ้าในขณะนั้นไม่มี RAM ว่างเหลืออยู่หรือไม่


อืม, RAM ในเซิร์ฟเวอร์มีเท่าไหร่?
ewwhite

1
เซิร์ฟเวอร์มี RAM รวม 16 GB สิ่งที่ควรสังเกตคือฉันไม่มีที่เก็บข้อมูล SSD แต่มี HDD 7200 รอบต่อนาทีเดียว นั่นคือเหตุผลที่ฉันกำลังพิจารณาใช้หน่วยความจำ RAM บางประเภท
Ivan Kovacevic

คำตอบ:


21

คำแนะนำของฉัน:

วัดและสังเกตกิจกรรมในชีวิตจริงภายใต้สภาวะปกติ

ไฟล์เหล่านั้นไม่น่าจะถูกต้องการและให้บริการจากแคชตลอดเวลา แต่มีเครื่องมือที่ดีที่เรียกว่าvmtouchที่สามารถบอกคุณได้ว่ามีอะไรอยู่ในแคชในช่วงเวลาหนึ่ง คุณยังสามารถใช้มันเพื่อล็อคไดเรกทอรีหรือไฟล์บางอย่างลงในแคช ดังนั้นดูว่าสิ่งที่ดูเหมือนหลังจากใช้งานปกติบางอย่าง การใช้ tmpfs และ ramfs ไม่จำเป็นสำหรับสถานการณ์นี้

ดู: http://hoytech.com/vmtouch/

ฉันคิดว่าคุณจะประหลาดใจเมื่อเห็นว่าไฟล์ที่แอคทีฟส่วนใหญ่อาจจะอยู่ในแคชอยู่แล้ว


เท่าที่ tmpfs กับ ramfs ไม่มีความแตกต่างของประสิทธิภาพที่เห็นได้ มีความแตกต่างในการปฏิบัติงาน กรณีการใช้งานจริงคือ Oracle ซึ่ง ramfs ถูกใช้เพื่ออนุญาตให้ Oracle จัดการข้อมูลใน RAM โดยไม่ต้องเสี่ยงกับการสลับสับเปลี่ยน ข้อมูล tmpfs สามารถสลับออกได้ภายใต้ความกดดันของหน่วยความจำ นอกจากนี้ยังมีความแตกต่างในการปรับขนาดและแก้ไขการตั้งค่าได้ทันที


1
อรรถประโยชน์เล็ก ๆ น้อย ๆ ที่น่ากลัว! +1
Janne Pikkarainen

1
@ whitewhite คำตอบที่ยอดเยี่ยม ในกรณีของเราเมื่อไม่กี่ปีก่อนเราพบว่าไฟล์ที่ใช้ส่วนใหญ่เป็นไฟล์แคชอยู่แล้ว คำแนะนำ: ทุกวันนี้ระบบไฟล์นั้นฉลาดกว่าที่ฉันคิดไว้มาก
giannisapi

13

อย่าคิดมากเกินไป ใส่ RAM ให้เพียงพอในระบบของคุณและให้ดิสก์แคชของเคอร์เนลดูแลสิ่งต่าง ๆ สำหรับคุณ วิธีนี้ทำให้คุณได้รับประโยชน์จากการอ่านที่มาจากหน่วยความจำโดยตรงในขณะที่ยังคงสามารถเก็บข้อมูลบนดิสก์ได้


1
ขณะนี้ระบบของฉันมี RAM 16 GB มันเป็น Debian ธรรมดาที่ติดตั้งใช้ Nginx เพื่อให้บริการภาพเหล่านั้น ฉันมีการเชื่อมต่อเครือข่าย 1 Gbit ซึ่งจะโหลดไม่ถึง 100% ตลอดเวลาแสดงภาพเหล่านั้นตามลำดับโดยเฉพาะ คุณคิดว่าเคอร์เนลจะโหลดรูปภาพ 10 กิกะไบต์เหล่านั้นทั้งหมดในแคชในสถานการณ์นี้หรือไม่
Ivan Kovacevic

3
ใช่หากมี RAM เพียงพอในระบบและแอปพลิเคชันอื่น ๆ บนเซิร์ฟเวอร์ไม่ได้แข่งขันกับทรัพยากร RAM ไฟล์เหล่านั้นจะยังคงอยู่ในแคช
EEAA

2
ฉันใช้ระบบยูนิกซ์มาแล้วประมาณ 15 ปีและฉันไม่เคยเจอสถานการณ์ที่ tmpfs / ramfs จะให้ประโยชน์ใด ๆกับแคชเคอร์เนล fs ไม่ได้หมายความว่าสถานการณ์จะไม่มีอยู่ที่นั่นซึ่งจะได้รับการรับประกัน แต่ก็ค่อนข้างหายาก โดยทั่วไปหากคุณต้องการแคช RAM สำหรับสิ่งหนึ่งจะใช้เลเยอร์แคชเพื่อสร้างจุดประสงค์ (Redis / Memcache / ฯลฯ )
EEAA

4
การแคชดิสก์จะใช้งานได้ในกรณีที่จำเป็นต้องอ่านรูปภาพ แต่ tmpfs หรือ ramfs ยังคงมีประโยชน์หากคุณต้องการเพิ่มความเร็วในการเขียนแบบสุ่ม / เล็ก ๆ จำนวนมาก แต่ถูกผูกไว้กับดิสก์ที่ช้าด้วยการสุ่ม I / ทุม โปรดจำไว้ว่าหากเครื่องขัดข้องหรือเกิดปัญหาไฟดับเนื้อหาของ tmpfs จะหายไปตั้งแต่ที่ (เท่านั้น) ในหน่วยความจำ
Martijn

1
@Martijn ถูกต้อง tmpfs และ ramfs มีประโยชน์แน่นอน ตัวอย่างเช่นฉันกำลังทำการเขียนอย่างเข้มข้น (ตัวกรองสาขา) ของที่เก็บ git การทำในหน่วยความจำนั้นเป็น gobs เร็วกว่าทำบน SSD ของฉัน การแคชช่วยในการอ่านที่ไม่ได้เขียนเนื่องจาก (โดยปกติ) Linux ต้องปฏิบัติตามการรับประกันบางประการเกี่ยวกับความคงทนของการใช้งานดิสก์
พอลเดรเปอร์

7

1) เกณฑ์มาตรฐานประสิทธิภาพ

การใช้หน้านี้เป็นข้อมูลอ้างอิงฉันทำการเปรียบเทียบ I / O ระหว่าง tmpfs และ ramfs และผลลัพธ์ก็คือมันเหมือนกันมากในแง่ของประสิทธิภาพ:

# !mount
mount | grep -E "tmp|ram"
tmpfs on /dev/shm type tmpfs (rw)
ramfs on /mnt/ram type ramfs (rw,size=1G)

# dd bs=1M count=1024 if=/dev/zero of=/dev/shm/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.634054 s, 1.7 GB/s

# dd bs=1M count=1024 if=/dev/zero of=/mnt/ram/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.559557 s, 1.9 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/dev/shm/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.5104 s, 1.7 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/mnt/ram/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.36923 s, 1.8 GB/s

2) ตามหน้านี้ tmpfs ใช้ swap และ ramfs ไม่ได้ใช้ swap


2
คำตอบของคุณอยู่ในเส้นทางที่ถูกต้อง อย่างไรก็ตามฉันจะไม่เห็นด้วยกับข้อสรุปของคุณเกี่ยวกับประสิทธิภาพการทดสอบของคุณแสดงให้เห็นว่ามีความแตกต่างของ 0.2 GB / s และ 0.1 GB / s ในความโปรดปรานของ ramfs ฉันเชื่อว่าสิ่งนี้ควรได้รับการทดสอบยิ่งขึ้นเพื่อให้ตัวอย่างทางสถิติที่ถูกต้อง เกี่ยวกับ 2) ใช่แล้วเป็นที่รู้จัก แต่ฉันหวังว่าฉันจะได้รับข้อมูลเชิงลึกที่ดีขึ้นว่าจะใช้ swap เมื่อใด
Ivan Kovacevic

หากเราทำเกณฑ์มาตรฐานหลายครั้งด้วยไฟล์ขนาดต่างกันฉันไม่คิดว่าเราจะเห็นความแตกต่าง คุณจะสังเกตเห็นว่าเมื่อฉันเพิ่มขนาดให้ใหญ่ขึ้นสี่เท่าความแตกต่างก็จะแคบลงมากกว่าที่จะขยับขยาย
Michael Martinez

1
สิ่งที่เกี่ยวกับกรณีที่คุณมีไฟล์ขนาดเล็ก ตัวอย่างเช่นการเขียนไฟล์ที่มีขนาด 100-200 kb นอกจากนี้คุณยังได้รับความแตกต่าง 0.2 GB / s ซ้ำ ๆ สำหรับขนาดไฟล์เดียวกัน ซึ่งแน่นอนจะชี้ให้เห็นถึงความแตกต่างของประสิทธิภาพ ฉันอาจจะทดสอบตัวเองเมื่อถึงกำหนด แต่นั่นคือเหตุผลที่ฉันถามที่นี่ดังนั้นฉันอาจจะข้ามมันจากรายการที่ต้องทำถ้ามีคนอื่นทำไปแล้ว
Ivan Kovacevic

ใช่วิธีเดียวที่จะรู้แน่นอนคือการทำแบบทดสอบ
Michael Martinez

1

หากคุณมี RAM เพียงพอในการติดตั้งเพื่อโฮสต์บัฟเฟอร์เคอร์เนลต่างๆแอปพลิเคชันสแต็คและฮีปแคชระบบไฟล์ปกติและไฟล์ทั้งหมดที่คุณตั้งใจจะใส่ramfsไม่ควรช้าลงกว่านี้tmpfsเพราะจะไม่มีความเสี่ยง I / O จริงโดยการออกแบบ I / O ทางกายภาพนั้นเป็นสาเหตุหลักของการเสื่อมประสิทธิภาพในพื้นที่นั้นอย่างไม่ต้องสงสัย

อย่างไรก็ตามหากคุณยังไม่ได้ติดตั้ง RAM จำนวนมากการใช้ramfsอาจและอาจจะช้ากว่าtmpfsเมื่อใช้หน่วยความจำเสมือนเพื่อตัดสินใจว่าอะไรควรจะดีกว่าบนดิสก์ (เช่นในพื้นที่สลับ) กับสิ่งที่ควรอยู่บน RAM ในขณะที่tmpfsข้อมูลระบบไฟล์ของคุณติดอยู่บน RAM ซึ่งอาจเป็นการสิ้นเปลืองทรัพยากร

เพื่อที่จะตอบคำถามที่สองคุณtmpfsจะย้ายข้อมูลเก่าไปยังพื้นที่ swap ไม่ใช่ "hot" อันสุดท้าย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.