คำถามติดแท็ก virtual-memory

1
การตั้งค่า / proc / sys / vm / drop_caches เพื่อล้างแคช
ในฐานะที่เป็นส่วนหนึ่งของการทำแคชเวลาเย็นฉันกำลังพยายามเพิ่มแคชระบบปฏิบัติการ เอกสาร kernel (ดึงมกราคม 2019)พูดว่า: drop_caches Writing to this will cause the kernel to drop clean caches, as well as reclaimable slab objects like dentries and inodes. Once dropped, their memory becomes free. To free pagecache: echo 1 > /proc/sys/vm/drop_caches To free reclaimable slab objects (includes dentries and inodes): echo …

1
รับข้อมูลเกี่ยวกับการใช้หน่วยความจำของกระบวนการจาก / proc / pid / smaps
สำหรับกระบวนการที่กำหนดใน/proc/<pid>/smapsสำหรับรายการการแม็พที่กำหนดคือ: Shared_Clean Shared_Dirty Private_Clean Private_Dirty เป็นShared_Clean+ Shared_Dirtyจำนวนหน่วยความจำที่ใช้ร่วมกันกับกระบวนการอื่น ๆ ? มันเหมือนกับ RSS ที่แชร์ใช่ไหม ในทำนองเดียวกันPrivate_Clean+ Private_Dirtyจำนวนหน่วยความจำที่มีอยู่สำหรับกระบวนการเดียวเท่านั้นหรือไม่ ดังนั้นมันจึงเป็นเหมือน RSS ส่วนตัว? ค่า PSS = PrivateRSS + (SharedRSS / จำนวนกระบวนการที่ใช้ร่วมกัน) หรือไม่ บางคำถามเพิ่มเติมหลังจากอ่านลิงค์นี้: LWN ตอนนี้ให้พูดคุยเกี่ยวกับกระบวนการทั้งหมดซึ่ง smaps รายการที่เรากำลังดู ฉันสังเกตเห็นว่าถ้าฉันทำShared_Clean+ Shared_Dirty+ Private_Clean+ Private_Dirtyสำหรับทุกรายการ smaps สำหรับกระบวนการฉันได้รับ RSS ของกระบวนการตามที่รายงานโดยpsซึ่งค่อนข้างเจ๋ง สำหรับเช่น ps -p $$ -o pid,rss จะให้ฉัน (ประมาณ) ค่าเดียวกันสำหรับ RSS เป็นผลรวมของทุกคนShared_Clean, …

2
เหตุใดการปิดเครื่องของฉันหลังจากที่ `` RM 'ไม่ดีบันทึกไฟล์ของฉัน
สถานการณ์แบบคลาสสิก: ฉันวิ่งได้ไม่ดีrmและรับรู้ได้ทันทีหลังจากนั้นฉันก็ลบไฟล์ผิด (ไม่มีอะไรสำคัญและฉันมีการสำรองข้อมูลล่าสุดอย่างอดทน แต่ก็น่ารำคาญ) รู้ว่ากิจกรรมของดิสก์ต่อไปเป็นศัตรูของฉันถ้าฉันต้องการกู้คืนไฟล์ด้วยextundeleteหรือเครื่องมือดังกล่าวฉันก็ขับเคลื่อนเครื่องลงทางกายภาพทันที (เช่นด้วยปุ่มเปิดปิดไม่ใช่ด้วยhaltหรือคำสั่งใด ๆ ) นี่เป็นแล็ปท็อปที่ไม่มีงานสำคัญที่ทำงานอยู่หรือมีอะไรเปิดอยู่ดังนั้นจึงเป็นการทำงานที่ยอมรับได้ (โดยวิธีการที่ฉันได้เรียนรู้ตั้งแต่นั้นมาสิ่งแรกที่ต้องทำในสถานการณ์ดังกล่าวจะประเมินก่อนหากไฟล์ที่หายไปอาจจะยังคงเปิดโดยกระบวนการhttps://unix.stackexchange.com/a/101247 - หากเป็นเช่นนั้นคุณควรกู้คืนด้วยวิธีนี้แทนที่จะปิดเครื่อง) ถึงกระนั้นเมื่อเครื่องถูกปิดฉันคิดว่าในขณะที่และตัดสินใจว่าไฟล์ไม่คุ้มค่ากับการลงทุนในการบูทระบบสดเพื่อการพิสูจน์หลักฐานที่เหมาะสม ดังนั้นฉันจึงขับเคลื่อนเครื่องสำรอง แล้วฉันก็ค้นพบว่าไฟล์ของฉันยังคงนั่งอยู่บนดิสก์: สิ่งที่rmไม่ได้แพร่กระจายไปยังดิสก์ก่อนที่ฉันจะปิดตัวลง ฉันเต้นเล็กน้อยและขอบคุณพระเจ้าแห่งดูแลระบบสำหรับการให้อภัยที่ไม่คาดคิดของเขา คำถามของฉันคือตอนนี้เพื่อทำความเข้าใจว่ามันเป็นไปได้อย่างไรและอะไรคือความล่าช้าทั่วไปก่อนที่rmจะแพร่กระจายสู่ดิสก์ ฉันรู้ว่าดิสก์ IO ไม่ได้ถูกลบทิ้งทันที แต่มันอยู่ในหน่วยความจำระยะหนึ่ง แต่ฉันคิดว่าดิสก์เจอร์นัลจะทำให้แน่ใจได้อย่างรวดเร็วว่าการดำเนินการที่ค้างอยู่จะไม่สูญหายทั้งหมด https://unix.stackexchange.com/a/78766ดูเหมือนจะบอกกล่าวกับกลไกแยกต่างหากเพื่อล้างหน้าสกปรกและเพื่อล้างการดำเนินการของวารสาร แต่ไม่ได้ให้รายละเอียดที่เพียงพอเกี่ยวกับวิธีที่วารสารจะเกี่ยวข้องกับrmและความล่าช้าที่คาดไว้ก่อนหน้า การดำเนินการจะถูกล้างออก รายละเอียดเพิ่มเติม: ข้อมูลอยู่ในพาร์ติชัน ext4 ภายในโวลุ่ม LUKS และเมื่อบูตเครื่องสำรองข้อมูลฉันเห็นสิ่งต่อไปนี้ในsyslog: Sep 24 10:24:58 gamma kernel: [ 11.457007] EXT4-fs (dm-0): 1 orphan inode deleted Sep 24 10:24:58 gamma kernel: …

2
นี่เป็นวิธีที่เพจจิ้งของ Linux ควรทำงานหรือไม่
เมื่อระบบลีนุกซ์ของฉันเข้าใกล้เพจจิ้ง (เช่นในกรณีของฉัน, RAM 16GB เกือบเต็ม, 16GB swap ว่างเปล่าอย่างสมบูรณ์) หากกระบวนการใหม่ X พยายามจัดสรรหน่วยความจำบางส่วนที่ระบบล็อคอย่างสมบูรณ์ นั่นคือจนกว่าจะมีจำนวนหน้าไม่สมบูรณ์ (wrt ขนาดรวมและอัตราของการร้องขอการจัดสรรหน่วยความจำของ X) ได้ถูกสลับออก โปรดสังเกตว่าไม่เพียง แต่ gui เท่านั้นที่ไม่ตอบสนองอย่างสมบูรณ์ แต่บริการพื้นฐานอย่าง sshd จะถูกบล็อกอย่างสมบูรณ์ เหล่านี้เป็นรหัสสองชิ้น (หยาบยอมรับ) ที่ฉันใช้เพื่อเรียกพฤติกรรมนี้ในทาง "วิทยาศาสตร์" มากขึ้น คนแรกที่ได้รับสองตัวเลข x, y จากบรรทัดคำสั่งและดำเนินการเพื่อจัดสรรและเริ่มต้นชิ้นจำนวนมากของ y ไบต์จนกว่า x ไบต์ทั้งหมดได้รับการจัดสรร และจากนั้นก็นอนหลับไปเรื่อย ๆ สิ่งนี้จะถูกใช้เพื่อนำระบบเข้าสู่เพจ #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> int main(int argc, …

5
Linux ไม่ได้ใช้การแบ่งกลุ่ม แต่แบ่งหน้าเท่านั้น
Linux Programming Interfaceแสดงโครงร่างของพื้นที่ที่อยู่เสมือนของกระบวนการ แต่ละภูมิภาคในแผนภาพเป็นเซ็กเมนต์หรือไม่ จากความเข้าใจ Linux Kernel , ถูกต้องหรือไม่ว่าต่อไปนี้หมายความว่าหน่วยการแบ่งเซ็กเมนต์ใน MMU แมปเซ็กเมนต์และออฟเซ็ตภายในเซ็กเมนต์ไปยังที่อยู่หน่วยความจำเสมือนและหน่วยเพจจะแมปที่อยู่หน่วยความจำเสมือนกับที่อยู่หน่วยความจำทางกายภาพ หน่วยความจำการจัดการหน่วย (MMU) แปลงที่อยู่เชิงตรรกะเป็นที่อยู่เชิงเส้นโดยใช้วงจรของฮาร์ดแวร์ที่เรียกว่าหน่วยการแบ่งส่วน; ต่อมาวงจรฮาร์ดแวร์ตัวที่สองที่เรียกว่าหน่วยเพจจะแปลงที่อยู่เชิงเส้นเป็นที่อยู่ทางกายภาพ (ดูรูปที่ 2-1) ถ้าอย่างนั้นทำไมมันถึงบอกว่าลีนุกซ์ไม่ได้ใช้การแบ่งกลุ่ม แต่เป็นเพจจิ้งเท่านั้น? การแบ่งกลุ่มได้รวมอยู่ในไมโครโปรเซสเซอร์ 80x86 เพื่อสนับสนุนให้โปรแกรมเมอร์แยกแอปพลิเคชันของพวกเขาออกเป็นเอนทิตีที่เกี่ยวข้องกับเหตุผลเช่นรูทีนย่อยหรือพื้นที่ข้อมูลทั่วโลกและท้องถิ่น อย่างไรก็ตาม Linux ใช้การแบ่งกลุ่มในวิธีที่ จำกัด มาก ในความเป็นจริงการแบ่งส่วนและการแบ่งหน้าค่อนข้างซ้ำซ้อนเนื่องจากทั้งสองสามารถใช้เพื่อแยกพื้นที่ที่อยู่ทางกายภาพของกระบวนการ: การแบ่งส่วนสามารถกำหนดพื้นที่ที่อยู่เชิงเส้นที่แตกต่างกันให้กับแต่ละกระบวนการในขณะที่เพจจิ้งสามารถแมป . Linux ต้องการแบ่งหน้าเป็นการแบ่งกลุ่มด้วยเหตุผลต่อไปนี้: •การจัดการหน่วยความจำง่ายขึ้นเมื่อกระบวนการทั้งหมดใช้ค่าการลงทะเบียนเซกเมนต์เดียวกันนั่นคือเมื่อพวกเขาแชร์ที่อยู่เชิงเส้นชุดเดียวกัน •หนึ่งในวัตถุประสงค์การออกแบบของ Linux คือการพกพาไปยังสถาปัตยกรรมที่หลากหลาย โดยเฉพาะอย่างยิ่งสถาปัตยกรรม RISC ได้รับการสนับสนุนอย่าง จำกัด สำหรับการแบ่งส่วน Linux เวอร์ชัน 2.6 ใช้การแบ่งส่วนเมื่อจำเป็นโดยสถาปัตยกรรม 80x86 เท่านั้น

3
ทำไม Debian Linux อนุญาตพื้นที่ที่อยู่เสมือนสูงสุด 128TiB ต่อกระบวนการ แต่เพียงหน่วยความจำฟิสิคัล 64TiB
ฉันเพิ่งอ่านที่นี่ : พื้นที่แอดเดรสเสมือนสูงสุด 128TiB ต่อกระบวนการ (แทน 2GiB) รองรับหน่วยความจำฟิสิคัล 64TiB แทน 4GiB (หรือ 64GiB ที่มีนามสกุล PAE) ทำไมถึงเป็นอย่างนั้น? ฉันหมายถึงการสนับสนุนหน่วยความจำกายภาพถูก จำกัด โดยเคอร์เนลหรือโดยฮาร์ดแวร์ปัจจุบัน ทำไมคุณต้องการพื้นที่หน่วยความจำเสมือนสองเท่ากว่าหน่วยความจำกายภาพที่คุณสามารถระบุได้จริง

6
Linux สามารถ“ ใช้งาน RAM หมด” ได้หรือไม่?
ฉันเห็นหลายโพสต์ในเว็บของผู้คนเห็นได้ชัดว่าบ่นเกี่ยวกับ VPS โฮสต์โดยไม่คาดคิดกระบวนการฆ่าเพราะพวกเขาใช้แรมมากเกินไป เป็นไปได้อย่างไร? ฉันคิดว่าระบบปฏิบัติการสมัยใหม่ทั้งหมดให้ "infinite RAM" โดยใช้ disk swap สำหรับทุกอย่างที่มากกว่า RAM จริง ถูกต้องหรือไม่ อาจเกิดอะไรขึ้นถ้ากระบวนการ "ถูกฆ่าเนื่องจาก RAM ต่ำ"

3
การใช้หน่วยความจำจริงของกระบวนการ
ต่อไปนี้เป็นการใช้หน่วยความจำของmysqlและapacheตามลำดับบนเซิร์ฟเวอร์ของฉัน ตามผลลัพธ์ของการpmapพูดmysqlใช้ประมาณ 379M และapacheใช้ 277M [root@server ~]# pmap 10436 | grep total total 379564K [root@server ~]# pmap 10515 | grep total total 277588K เปรียบเทียบสิ่งนี้กับผลลัพธ์ของtopฉันเห็นค่าเกือบจะตรงกัน PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 10515 apache 20 0 271m 32m 3132 S 0.0 6.6 0:00.73 /usr/sbin/httpd 10436 mysql …

3
การจัดสรรสแต็คทำงานใน Linux อย่างไร
ระบบปฏิบัติการสำรองพื้นที่เสมือนที่ถูกต้องตามจำนวนที่แน่นอนสำหรับกองซ้อนหรืออย่างอื่นหรือไม่? ฉันสามารถสร้าง stack overflow โดยใช้ตัวแปรท้องถิ่นขนาดใหญ่ได้หรือไม่? ฉันได้เขียนCโปรแกรมขนาดเล็กเพื่อทดสอบสมมติฐานของฉัน มันทำงานบน X86-64 CentOS 6.5 #include <string.h> #include <stdio.h> int main() { int n = 10240 * 1024; char a[n]; memset(a, 'x', n); printf("%x\n%x\n", &a[0], &a[n-1]); getchar(); return 0; } เรียกใช้โปรแกรมให้&a[0] = f0ceabe0และ&a[n-1] = f16eabdf แม็พ proc แสดงสแต็ก: 7ffff0cea000-7ffff16ec000. (10248 * 1024B) จากนั้นฉันก็พยายามเพิ่ม n = …

3
จะเกิดอะไรขึ้นเมื่อไฟล์ที่เพจได้ 100% ในเพจแคชได้รับการแก้ไขโดยกระบวนการอื่น
ฉันรู้ว่าเมื่อมีการแก้ไขหน้าแคชหน้ามันมีการทำเครื่องหมายสกปรกและต้องมีการเขียนกลับ แต่สิ่งที่เกิดขึ้นเมื่อ สถานการณ์จำลอง: ไฟล์ / apps / EXE ซึ่งเป็นไฟล์ที่เรียกทำงานได้ถูกทำเพจไว้ในแคชของเพจอย่างสมบูรณ์ (เพจทั้งหมดอยู่ในแคช / หน่วยความจำ) และถูกดำเนินการโดยกระบวนการ P ปล่อยอย่างต่อเนื่องแล้วแทนที่ / apps / EXE ด้วยปฏิบัติการใหม่ล่าสุด ข้อสันนิษฐานที่ 1: ฉันถือว่ากระบวนการ P (และทุกคนที่มีตัวอธิบายไฟล์ที่อ้างอิงถึงไฟล์ปฏิบัติการเก่า) จะยังคงใช้ไฟล์เก่าต่อไปในหน่วยความจำ / แอป / EXE โดยไม่มีปัญหาและกระบวนการใหม่ที่พยายามเรียกใช้เส้นทางนั้น ปฏิบัติการใหม่ ข้อสันนิษฐานที่ 2: ฉันสมมติว่าหากไม่มีการแมปหน้าไฟล์ทั้งหมดในหน่วยความจำสิ่งต่าง ๆ ก็จะถูกต้องจนกว่าจะมีข้อผิดพลาดของหน้าซึ่งต้องใช้หน้าจากไฟล์ที่ถูกแทนที่และอาจเป็น segfault หรือไม่ คำถามที่ 1: ถ้าคุณ mlock ทุกหน้าของไฟล์ด้วย vmtouch สิ่งนั้นเปลี่ยนแปลงสถานการณ์ได้หรือไม่? คำถามที่ 2: หาก / …

5
ชิป MMU (หน่วยจัดการหน่วยความจำ) จำเป็นสำหรับหน่วยประมวลผลเพื่อรองรับหน่วยความจำเสมือนหรือไม่?
ชิป MMU (หน่วยจัดการหน่วยความจำ) จำเป็นสำหรับหน่วยประมวลผลเพื่อรองรับหน่วยความจำเสมือนหรือไม่? เป็นไปได้หรือไม่ที่จะจำลองฟังก์ชันการทำงานของ MMU ในซอฟต์แวร์ (ฉันทราบว่าอาจมีผลกระทบอย่างมากต่อประสิทธิภาพ)

2
ฉันจะเพิ่มพื้นที่สว็อปสูงสุดใน Mac OS X ได้อย่างไร
ใน Mac OS X Yosemite 10.10.5 เมื่อฉันพยายามเรียกใช้การคำนวณที่จำเป็นต้องจัดสรรและใช้หน่วยความจำ 128 GB (เป็นโปรแกรมบรรทัดคำสั่งที่เขียนด้วย C) เคอร์เนลจะฆ่ากระบวนการของฉันด้วยอคติอย่างรุนแรง รายการบันทึกคอนโซลนี้เป็นตัวอย่างหนึ่งอินสแตนซ์: 9/25/15 7: 08: 40.000 PM เคอร์เนล [0]: การแลกเปลี่ยนต่ำ: ฆ่า pid 6202 (huffgrp) การคำนวณใช้งานได้ดีและใช้เวลาพอสมควรเมื่อจัดสรรและใช้หน่วยความจำ 64 GB Mac ของฉันมี RAM ขนาด 32 GB และพื้นที่ว่างบนฮาร์ดไดรฟ์ ฉันยังลองใช้มันใน Mac เครื่องอื่นที่มี RAM ขนาด 8 GB ซึ่งการคำนวณ 64 GB ก็ทำงานได้ดีเช่นกันใช้เวลานานขึ้น แต่การคำนวณ 128 GB ก็ถูกฆ่าโดยเคอร์เนลด้วยวิธีเดียวกัน …

1
ความหมายของการส่งออกของ PMAP
ฉันเขียนmain.cใน Linux: int main() { while (1){} } เมื่อฉันรวบรวมและเริ่มมันฉันสามารถpmap: # pmap 28578 28578: ./a.out 0000000000400000 4K r-x-- /root/a.out 0000000000600000 4K r---- /root/a.out 0000000000601000 4K rw--- /root/a.out 00007f87c16c2000 1524K r-x-- /lib/libc-2.11.1.so 00007f87c183f000 2044K ----- /lib/libc-2.11.1.so 00007f87c1a3e000 16K r---- /lib/libc-2.11.1.so 00007f87c1a42000 4K rw--- /lib/libc-2.11.1.so 00007f87c1a43000 20K rw--- [ anon ] 00007f87c1a48000 128K …

1
Gnome 3.28 daemons จำนวนมากใช้ VIRT มากกว่า 100 GB ทำไม?
ฉันเพิ่งอัปเดตแล็ปท็อปนี้เป็น Fedora 28 Beta และใช้กับ Gnome 3.28 สิ่งที่ดีส่วนใหญ่ แต่บางสิ่งก็แปลก นี่ไม่ได้ทำให้เกิดปัญหาเพราะนี่คือหน่วยความจำเสมือนทั้งหมด แต่ทำไม daemons เหล่านี้จึงจัดสรรหน่วยความจำเสมือน 100+ GB? 0 1000 2012 1719 20 0 101649024 32904 SyS_po Sl ? 0:00 /usr/libexec/goa-daemon 0 1000 1983 1719 20 0 101704260 46416 SyS_po Sl ? 0:00 /usr/libexec/gnome-shell-calendar-server 0 1000 2210 1765 20 0 101736292 33656 SyS_po …

1
สถานการณ์การใช้งานเดสก์ท็อป Zswap, Zram, Zcache
ฉันพยายามเข้าใจถึงความแตกต่างของกรณีการใช้งานสำหรับ Zswap, Zram และ Zcache ขออภัยล่วงหน้าสำหรับคำถามที่มีคำยาว / เล็กน้อยเลอะเทอะ ฉันทำ googling เสร็จแล้วและฉันเข้าใจว่า zram นั้นเป็นอุปกรณ์บล็อกสำหรับการแลกเปลี่ยนแบบบีบอัดในขณะที่ zswap บีบอัดในเคอร์เนลโดยใช้ frontswap api ปรากฏว่าข้อดีอย่างหนึ่งของ zswap คือสามารถย้ายหน้าบางหน้าไปยัง swap swap ได้เมื่ออยู่ภายใต้ความกดดันในลักษณะ LRU ในขณะที่ zram ไม่สามารถทำได้ (โปรดยืนยันไม่แน่ใจว่านี่เป็นเรื่องจริงหรือไม่) ดังนั้นนี่คือคำถามของฉัน: 1. ) ในฐานะผู้ใช้เดสก์ท็อปประสิทธิภาพของ zcache / zswap / zram โดยเฉพาะ zswap และ zram คืออะไร? ตัวอย่างเช่นหนึ่งดีขึ้น / แย่ลงที่การกระจายตัวของหน่วยความจำ (ชนิดที่นำไปสู่การใช้งานหน่วยความจำมากเกินไปและเสีย)? คำถามโบนัส: 2. ) มีการผสมผสานที่ลงตัวของข้างต้น …

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