ล้างแคชไฟล์เพื่อทดสอบประสิทธิภาพซ้ำ


106

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

แอปพลิเคชั่นที่ฉันกำลังพัฒนาเป็นยูทิลิตี้การบีบอัดแบบพิเศษและคาดว่าจะทำงานอ่านและเขียนไฟล์จำนวนมากที่ระบบปฏิบัติการไม่ได้สัมผัสเมื่อเร็ว ๆ นี้และบล็อกดิสก์ที่ไม่น่าจะถูกแคช

ฉันต้องการลบความแปรปรวนที่ฉันเห็นในเวลา IO เมื่อฉันทำซ้ำภารกิจในการจัดทำโปรไฟล์กลยุทธ์ต่างๆสำหรับการประมวลผลไฟล์

ฉันสนใจโซลูชันสำหรับ Windows XP เป็นหลักเนื่องจากเป็นเครื่องพัฒนาหลักของฉัน แต่ฉันสามารถทดสอบโดยใช้ linux ได้เช่นกันและฉันก็สนใจคำตอบสำหรับสภาพแวดล้อมนั้นเช่นกัน

ฉันลอง SysInternals CacheSetแล้ว แต่การคลิก "ล้าง" ไม่ได้ส่งผลให้เพิ่มขึ้นที่วัดได้ (การคืนค่าตามเวลาหลังจากการบูตเย็น) ในช่วงเวลาที่จะอ่านไฟล์ซ้ำที่ฉันเพิ่งอ่านไม่กี่ครั้ง



1
ทำไมคำถามนี้ถูกลบ ?
Dan Dascalescu

คำตอบ:


82

ใช้ sysinternal ของแอปพลิเค RAMMap

rammap ว่างเปล่าสแตนด์บาย

ตัวเลือกเมนูรายการสแตนด์บายว่าง / ว่างเปล่าจะล้างแคชไฟล์ Windows


2
RAMMap ไม่ทำงานบน Windows XP ตัวเลือกเมนูเหล่านั้นทำอะไรที่แตกต่างจากปุ่ม "ล้าง" ในแอปพลิเคชัน SysInternals Cacheset หรือไม่
Stephen Denne

@stephen เทคนิคนี้ใช้ได้ดีกับฉันใน Windows 8! Windows XP มีอายุ 12 ปีแล้วมีเหตุผลใดบ้างที่คุณไม่สามารถลองใช้กับ Vista, Windows 7 หรือ Windows 8 ได้?
Jeff Atwood

@ เจฟฟ์ฉันไม่ทำงานกับข้อ จำกัด เหล่านั้นอีกต่อไป ดังนั้น "Empty Standby List" จะส่งผลให้การอ่านครั้งต่อไปจากไฟล์ที่เพิ่งอ่านซึ่งต้องใช้ดิสก์ IO?
Stephen Denne

2
กด F5 เพื่อรีเฟรชรายการไฟล์หลังจากคลิกรายการสแตนด์บายว่างเปล่า
JoshG

3
สำหรับวิธีการแบบเป็นโปรแกรมโปรดดูโพสต์ SO นี้: stackoverflow.com/a/23085045/430360
snemarch

16

สำหรับ Windows XP คุณควรจะสามารถล้างแคชของไฟล์เฉพาะได้โดยเปิดไฟล์โดยใช้ CreateFile ด้วยตัวเลือก FILE_FLAG_NO_BUFFERING จากนั้นปิดที่จับ สิ่งนี้ไม่ได้จัดทำเป็นเอกสารและฉันไม่รู้ว่ามันใช้งานได้กับ Windows รุ่นที่ใหม่กว่าหรือไม่ แต่ฉันใช้สิ่งนี้เมื่อนานมาแล้วเมื่อเขียนโค้ดทดสอบเพื่อเปรียบเทียบไลบรารีการบีบอัดไฟล์ ฉันจำไม่ได้ว่าการเข้าถึงแบบอ่านหรือเขียนส่งผลต่อเคล็ดลับนี้หรือไม่


ทำงานได้อย่างสมบูรณ์แบบสำหรับฉันใน Windows 7 SP1, x64 เคล็ดลับดีๆ!
cxxl

2
ดังนั้นจะต้องทำซ้ำทุกไฟล์ ? ตัวอย่างเช่นหากคุณคัดลอกไดเร็กทอรีที่มี 100MB ที่กระจายไปทั่ว 30 ไฟล์ใน 10 ไดเรกทอรีย่อยคุณต้องเปิดทีละรายการแยกกันเพื่อให้แน่ใจว่าคุณอ่านดิสก์จริงแทนที่จะเป็นแคช?
Synetech

คำตอบอื่น ๆ บนไซต์ยืนยันว่าสิ่งนี้ใช้ได้ใน Win7 และ 8 เช่นกัน ฉันคิดว่ามันใช้งานได้บน vista ใช่คุณต้องเรียกใช้ในแต่ละไฟล์ แต่ใช้เวลาไม่นาน สิ่งที่คุณต้องทำคือเปิดและปิดแต่ละไฟล์และเมื่อคุณปิด Windows จะล้างแคช หลังจากที่คุณทำเสร็จแล้วคุณก็ทำการทดสอบประสิทธิภาพของคุณ
หมูปิ้ง

1
นี่เป็นคำตอบที่สมบูรณ์แบบ ง่ายต่อการเขียนโค้ดมีประสิทธิภาพและควรใช้กับระบบปฏิบัติการ Windows ส่วนใหญ่ (รวมถึง XP ด้วยฉันได้ทดสอบกับ Win7x64 เท่านั้น) ฉันเปิดไฟล์ที่มีสิทธิ์อ่านและไม่มีการแบ่งปัน ไม่แน่ใจว่าคอมโบมีความสำคัญอย่างไร
Rosco

การทำงานที่คล้ายกันบน Linux (2.4.10 เป็นต้นไป) พร้อมกับแฟล็ก O_DIRECT ใน syscall แบบเปิด (2) จากสิ่งที่ฉันเข้าใจอย่างแม่นยำมากขึ้น O_DIRECT ไม่ได้ล้างแคชของไฟล์นั้น แต่จะพยายามข้ามมันให้ดีที่สุด
kaiwan

14

googling อย่างรวดเร็วให้ตัวเลือกเหล่านี้สำหรับ Linux

  1. ถอนการต่อเชื่อมและติดตั้งพาร์ติชันที่เก็บไฟล์
  2. sync && echo 1 > /proc/sys/vm/drop_caches

2
ขอบคุณที่ดูมีประโยชน์มากแม้ว่าฉันจะต้องการ echo 3 แทน 1 ฉันสนใจ Windows XP เป็นหลักซึ่งเป็นสาเหตุที่ฉันไม่พบสิ่งนั้นใน googling ของฉัน
Stephen Denne

น่าเสียดายที่สภาพแวดล้อม linux ที่ฉันสามารถใช้สิ่งนี้ได้มีเคอร์เนลเวอร์ชัน 2.6.9 มีการเพิ่ม drop_caches ในเคอร์เนล 2.6.16
Stephen Denne

โพสต์อื่น ๆ อีกมากมายที่ฉันได้อ่านแนะนำว่าคุณสามารถยกเลิกการต่อเชื่อมและเมานต์ระบบไฟล์เพื่อลบรายการที่แตกออกทั้งหมดได้ฉันคิดว่าเป็นกรณีก่อน 2.6.16 และในเคอร์เนลล่าสุด
TafT

12

ยูทิลิตี้บรรทัดคำสั่งสามารถพบได้ที่นี่

จากแหล่งที่มา:

EmptyStandbyList.exe เป็นเครื่องมือบรรทัดคำสั่งสำหรับ Windows (Vista ขึ้นไป) ที่สามารถว่าง:

  • ประมวลผลชุดการทำงาน
  • รายการหน้าที่แก้ไข
  • รายการสแตนด์บาย (ลำดับความสำคัญ 0 ถึง 7) หรือ
  • ลำดับความสำคัญ 0 รายการสแตนด์บายเท่านั้น

การใช้งาน:

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist

3
คำตอบที่ประเมินต่ำมากท่ามกลางเสียงรบกวนยูทิลิตี้ง่ายๆที่ทำงานเดียวและทำได้ดี คุณควรใส่รายละเอียดเพิ่มเติมในคำตอบเพื่อรับคะแนนโหวตที่คุณสมควรได้รับ
Prometheus

4
 #include <fcntl.h>

int posix_fadvise(int fd, off_t offset, off_t len, int advice);

พร้อมตัวเลือกคำแนะนำPOSIX_FADV_DONTNEED:
ข้อมูลที่ระบุจะไม่สามารถเข้าถึงได้ในอนาคตอันใกล้นี้


เฉพาะสำหรับ Linux และ POSIX อื่น ๆ ไม่สำหรับ Windows: stackoverflow.com/questions/29752064/... stackoverflow.com/questions/1201168/...
osgx

3

ฉันพบเทคนิคหนึ่ง (นอกเหนือจากการรีบูตเครื่อง) ที่ดูเหมือนจะใช้ได้:

  1. เรียกใช้MemAllocสองสามชุด
  2. ให้จัดสรรหน่วยความจำขนาดใหญ่สองสามครั้งด้วยกัน
  3. ใช้ Process Explorer เพื่อสังเกตขนาดแคชของระบบลดลงเหลือระดับต่ำมาก
  4. ออกจากโปรแกรม MemAlloc

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


ที่มีผลข้างเคียงของการผลักดันสิ่งต่างๆลงในไฟล์เพจซึ่งจะฆ่าประสิทธิภาพในขณะนั้น หากคุณกำลังจะใช้ kludge คุณอาจจะอ่านไฟล์ขนาดใหญ่อื่น ๆ อย่างน้อยก็ล้างเฉพาะดิสก์แคชและไม่มีอะไรอื่น
Synetech

3

สำหรับมุมมองที่ดีขึ้นของ Windows XP Filesystem Cache - ลองใช้ATM โดย Tim Murgent - ช่วยให้คุณเห็นทั้งขนาดชุดการทำงานของแคชของระบบไฟล์และขนาดรายการสแตนด์บายในมุมมองที่ละเอียดและแม่นยำยิ่งขึ้น สำหรับ Windows XP - คุณต้องใช้ ATM 1 เวอร์ชันเก่าซึ่งสามารถดาวน์โหลดได้ที่นี่ตั้งแต่V2และV3ต้องใช้ Server 2003, Vista หรือสูงกว่า

คุณจะสังเกตได้ว่าแม้ว่าSysinternals Cachesetจะลด "Cache WS Min" แต่ข้อมูลจริงยังคงมีอยู่ในรูปแบบของรายการสแตนด์บายซึ่งสามารถใช้งานได้จนกว่าจะถูกแทนที่ด้วยอย่างอื่น แล้วแทนที่ด้วยสิ่งอื่นใช้เครื่องมือเช่นMemAllocหรือflushmem โดย Chad ออสตินหรือ Consume.exe จากWindows Server 2003 ทรัพยากร Kit เครื่องมือ


0

ในฐานะที่เป็นคำถามที่ยังถามสำหรับลินุกซ์มีคำตอบที่เกี่ยวข้องกันที่นี่

เครื่องมือบรรทัดคำสั่งvmtouchอนุญาตให้เพิ่มและลบไฟล์และไดเร็กทอรีออกจากแคชไฟล์ระบบและอื่น ๆ


0

มีการเรียก windows API https://docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-setsystemfilecachesizeที่สามารถใช้เพื่อล้างแคชของระบบไฟล์ นอกจากนี้ยังสามารถใช้เพื่อ จำกัด ขนาดแคชให้มีค่าน้อยมาก ดูเหมาะสำหรับการทดสอบประเภทนี้

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