คำถามติดแท็ก buffer

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

13
ปิดการบัฟเฟอร์ในท่อ
ฉันมีสคริปต์ที่เรียกสองคำสั่ง: long_running_command | print_progress long_running_commandพิมพ์ความคืบหน้า แต่ฉันไม่มีความสุขกับมัน ฉันใช้print_progressเพื่อทำให้ดีขึ้น (กล่าวคือฉันพิมพ์ความคืบหน้าในบรรทัดเดียว) ปัญหา: การเชื่อมต่อไปยัง stdout ยังเปิดใช้งานบัฟเฟอร์ 4K เพื่อโปรแกรมการพิมพ์ที่ดีไม่ได้รับอะไรเลย ... ไม่มีอะไร ... ไม่มีอะไร ... ทั้งนั้น ... :) ฉันจะปิดการใช้งานบัฟเฟอร์ 4K สำหรับlong_running_command(ไม่ฉันไม่มีแหล่งที่มา)
395 shell  pipe  buffer 

6
บัฟเฟอร์ของท่อใหญ่แค่ไหน
ในขณะที่ความคิดเห็นในฉันสับสนว่าทำไม "| จริง" ใน makefile มีผลเช่นเดียวกับผู้ใช้"|| จริง"ผู้ใช้cjmเขียน: อีกเหตุผลที่ควรหลีกเลี่ยง | true คือถ้าคำสั่งสร้างเอาต์พุตเพียงพอเพื่อเติมบัฟเฟอร์ของไพพ์มันจะบล็อกการรอให้ true อ่าน เรามีวิธีในการค้นหาขนาดของบัฟเฟอร์ของท่อหรือไม่?
146 pipe  buffer 

12
เป็นกลุ่ม - ฉันจะทำ 'เปลี่ยนคำ' โดยใช้บัฟเฟอร์การวางปัจจุบันได้อย่างไร
ฉันมีข้อความในบัฟเฟอร์การวางของฉันเช่นฉันทำyw(คำว่างัด) และตอนนี้ฉันมี 'foo' ในบัฟเฟอร์ของฉัน ตอนนี้ฉันไปที่คำว่า 'บาร์' และฉันต้องการแทนที่ด้วยบัฟเฟอร์การวางของฉัน หากต้องการแทนที่ข้อความด้วยตนเองฉันสามารถทำได้cwแล้วพิมพ์คำใหม่ ฉันจะ 'เปลี่ยนคำ' แต่ใช้เนื้อหาของบัฟเฟอร์การวางของฉันแทนการพิมพ์คำที่แทนที่ด้วยตนเองได้อย่างไร ตัวเลือกที่ดีที่สุดที่ฉันมีตอนนี้คือไปที่จุดเริ่มต้นของคำที่ฉันต้องการแทนที่และทำdw(ลบคำ) จากนั้นไปที่อื่นและทำyw(คำพูดงัด) จากนั้นกลับไปที่พื้นที่ทดแทนและทำp(วาง) ซึ่งค่อนข้างงุ่มง่ามโดยเฉพาะอย่างยิ่งหากพวกเขาไม่ได้อยู่บนหน้าจอเดียวกัน
86 vim  vi  replace  buffer 

3
มีความจริงกับปรัชญาที่คุณควรซิงค์; ซิงค์; ซิงค์; ซิงค์?
เมื่อฉันได้รับการแนะนำให้รู้จักกับ Linux เป็นครั้งแรกที่ทำงานกับ Cisco Systems ในปี 2000 ฉันได้รับการสอนถึงข้อดีของsyncคำสั่งที่ใช้ในการฟลัชบัฟเฟอร์ลงดิสก์เพื่อป้องกันความเสียหายของระบบไฟล์ / การสูญหายของข้อมูล ฉันได้รับการบอกเล่าจากเพื่อนร่วมงานที่นั่นไม่เพียง แต่จากเพื่อน ๆ ในวิทยาลัยที่มักจะเรียกใช้sync"ไม่กี่" หรือ "พวง" หลายครั้งนั่นอาจจะเป็น 5 - 10 ครั้งแทนที่จะเป็นเพียงครั้งเดียว ฉันยังคงนิสัยนี้มานับ แต่มีบุญใด ๆ นี้ มีใครเคยได้ยินเรื่องนี้บ้างไหม? และที่สำคัญที่สุดคือทุกคนสามารถให้เหตุผล / หลักฐานเชิงประจักษ์ที่ดีสำหรับ / กับความคิดที่คุณต้องใช้syncมากกว่าหนึ่งครั้งเพื่อให้มีประสิทธิภาพหรือไม่

3
วิธีเปลี่ยนชื่อของบัฟเฟอร์ vim
เป็นไปได้ไหมที่จะเปลี่ยนชื่อของบัฟเฟอร์ในกลุ่ม? โดยเฉพาะฉันใช้Conque Shellเพื่อเปิดเชลล์ในกลุ่ม (แต่ละเชลล์อยู่ในบัฟเฟอร์) และมีหลายเชลล์ฉันเห็น: 10: bash - 1 11: bash - 2 ในรายการบัฟเฟอร์ของฉัน ฉันต้องการเปลี่ยนชื่อบัฟเฟอร์เหล่านี้ด้วยชื่อที่มีความหมายมากกว่า (เช่น "mercurial" แทนที่จะเป็น "bash - 2") มันเป็นไปได้?
26 vim  buffer 

5
จำกัด ขนาดของบัฟเฟอร์แคชใน Linux
มีวิธีบอกเคอร์เนล Linux ให้ใช้หน่วยความจำเปอร์เซ็นต์หนึ่งสำหรับแคชบัฟเฟอร์หรือไม่? ฉันรู้ว่า/proc/sys/vm/drop_cachesสามารถใช้ล้างแคชชั่วคราวได้ แต่มีการตั้งค่าถาวรใด ๆ ที่ป้องกันไม่ให้เพิ่มขึ้นเป็นมากกว่า 50% ของหน่วยความจำหลักหรือไม่ เหตุผลที่ฉันต้องการทำเช่นนี้คือฉันมีเซิร์ฟเวอร์ที่ใช้ Ceph OSD ซึ่งให้บริการข้อมูลจากดิสก์อย่างต่อเนื่องและจัดการเพื่อใช้หน่วยความจำกายภาพทั้งหมดเป็นบัฟเฟอร์แคชภายในไม่กี่ชั่วโมง ในเวลาเดียวกันฉันจำเป็นต้องเรียกใช้แอปพลิเคชันที่จะจัดสรรหน่วยความจำกายภาพจำนวนมาก (หลาย 10s of GB) ตรงกันข้ามกับความเชื่อที่ได้รับความนิยม (ดูคำแนะนำในเกือบทุกคำถามเกี่ยวกับบัฟเฟอร์แคช) การเพิ่มหน่วยความจำโดยอัตโนมัติโดยการทิ้งรายการแคชสะอาดไม่ได้เกิดขึ้นทันที: การเริ่มต้นแอปพลิเคชันของฉันอาจใช้เวลาหนึ่งนาทีเมื่อบัฟเฟอร์แคชเต็ม *) ในขณะที่หลังจากล้างแคช (โดยใช้echo 3 > /proc/sys/vm/drop_caches) แอปพลิเคชันเดียวกันจะเริ่มต้นขึ้นทันที (*) ในช่วงนาทีของเวลานี้เริ่มต้นโปรแกรมจะ faulting ในหน่วยความจำใหม่ แต่ใช้จ่าย 100% ของเวลาใน kernel ตาม VTune pageblock_pfn_to_pageในการทำงานที่เรียกว่า ฟังก์ชั่นนี้ดูเหมือนจะเกี่ยวข้องกับการบีบอัดหน่วยความจำที่จำเป็นในการค้นหาหน้าเว็บขนาดใหญ่ซึ่งทำให้ฉันเชื่อว่าการแตกแฟรกเมนต์เป็นปัญหา

1
อะไรคือ scrollback และ scrollback buffer?
อะไรคือ "scrollback" และ "scrollback บัฟเฟอร์" ในโปรแกรมเช่นbashและscreenและวิธีการทำพวกเขาเกี่ยวข้องกับ TTY ที่โปรแกรมถูกเรียกใช้และ stdin / stdout / stderr? นี่คือคำจำกัดความเดียวของ "scrollback" ที่ฉันพบจนถึงตอนนี้ (ในarchlinux wiki ): Scrollback เป็นฟังก์ชั่นที่นำมาใช้ในคอนโซลข้อความเพื่อให้ผู้ใช้กลับไปดูบรรทัดข้อความที่เลื่อนออกจากหน้าจอ สิ่งนี้เกิดขึ้นได้โดยบัฟเฟอร์ที่สร้างขึ้นสำหรับวัตถุประสงค์นี้ระหว่างอะแดปเตอร์วิดีโอและอุปกรณ์แสดงผลเท่านั้น บัฟเฟอร์ scrollback แต่นี่ทำให้เกิดคำถามเพิ่มเติมสำหรับฉัน: มันหมายความว่า "ฟังก์ชั่น" ใน "subroutine" หรือใน "คุณสมบัติ"? มีมาตรฐาน Unix หรือ API สำหรับบัฟเฟอร์การเลื่อนนี้หรือไม่? ใน "สแต็ค" ของโปรแกรมเช่นvimเปิดตัวในscreenเปิดตัวในbashเปิดตัวในsshเปิดตัวเทอร์มินัลอีมูเลเตอร์โปรแกรมใดบ้างที่ควบคุมการเลื่อนบัฟเฟอร์? ฉันยังใช้screenในการถ่ายโอนข้อมูล scrollback ไปยังแฟ้ม ไฟล์นี้มีพื้นที่สีขาวจำนวนมากที่ด้านบนและดูเหมือนว่า "มุมมอง" ตัวจำลองเทอร์มินัลของฉันแสดงให้ฉันเห็นว่าเป็นเพียงไม่กี่บรรทัดด้านล่างของบัฟเฟอร์ นี่เป็นสาเหตุที่โปรแกรมอย่างเช่นvim"ล้าง" หน้าต่างเทอร์มินัลทั้งหมดของฉันเพราะได้รับการเข้าถึงชั่วคราวกับบัฟเฟอร์การเลื่อนกลับของพาเรนต์เชลล์หรือไม่? หรือไม่vimใช้ buffer scrollback …

2
ท่อการไหลของข้อมูลในไปป์ไลน์เป็นอย่างไร
ฉันไม่เข้าใจว่าข้อมูลไหลในท่อและหวังว่าใครบางคนสามารถชี้แจงสิ่งที่เกิดขึ้นที่นั่น ฉันคิดว่าไพพ์ไลน์ของคำสั่งประมวลผลไฟล์ (ข้อความ, อาร์เรย์ของสตริง) ในลักษณะทีละบรรทัด (หากคำสั่งแต่ละคำสั่งใช้งานได้ทีละบรรทัด) แต่ละบรรทัดของข้อความจะผ่านไปป์ไลน์คำสั่งจะไม่รอให้การประมวลผลอินพุตทั้งหมดเสร็จสิ้นก่อนหน้า แต่ดูเหมือนว่ามันจะไม่เป็นเช่นนั้น นี่คือตัวอย่างการทดสอบ มีข้อความบางบรรทัด ฉันพิมพ์ใหญ่และทำซ้ำแต่ละบรรทัดสองครั้ง cat text | tr '[:lower:]' '[:upper:]' | sed 'p'ผมทำด้วย ที่จะปฏิบัติตามกระบวนการที่เราสามารถเรียกมันว่า "การโต้ตอบ" - catข้ามชื่อไฟล์การป้อนข้อมูลใน แต่ละส่วนของไปป์ไลน์ทำงานทีละบรรทัด: $ cat | tr '[:lower:]' '[:upper:]' alkjsd ALKJSD sdkj SDKJ $ cat | sed 'p' line1 line1 line1 line 2 line 2 line 2 แต่ไปป์ไลน์ที่สมบูรณ์รอให้ฉันเสร็จสิ้นอินพุตด้วยEOFและจากนั้นพิมพ์ผลลัพธ์: …

3
ป้องกันไม่ให้บัฟเฟอร์ที่ไม่ต้องการเปิด
ฉันใช้ emacs สำหรับการแก้ไขจาวาสคริปต์ทุกวันเพื่อสลับไปมาระหว่างบัฟเฟอร์ที่ฉันใช้ Cx LEFT และ Cx RIGHT และฉันก็โอเคกับเรื่องนี้ (แม้ว่าฉันจะพบว่ามันยากที่จะรู้เส้นทางของไฟล์ที่ฉันแก้ไข) ปัญหาของฉัน: เมื่อเริ่มต้นฉันมักจะมี*scratch*และ*Messages*เปิดฉันคิดว่าการใส่(kill-buffer "*scratch*"). ems ของฉันจะช่วยแก้ปัญหาได้ แต่ก็ไม่มีคุณมีข้อเสนอแนะหรือไม่ เมื่อฉันเปิดไฟล์ฉันจะเติมข้อความอัตโนมัติ TAB เสมอดังนั้นทุกครั้งที่ฉันสร้าง*Messages*บัฟเฟอร์ใหม่ที่มีตัวเลือกสำหรับการเติมให้สมบูรณ์ฉันจะป้องกันไม่ให้เกิดการสร้างหรือดีกว่าฉันจะทำให้ emacs ฆ่ามันได้อย่างไรหลังจากฉัน ทำให้ฉันเลือก? พูดความคิดเห็นของคุณถ้าคุณคิดว่าฉันกำลังทำสิ่งที่ไม่ใช่ "วิธีที่ควรเป็น" กับฉันการนำทางตามที่ฉันพูดไว้ด้านบน
18 emacs  buffer 


1
ขนาดบัฟเฟอร์สำหรับการจับแพ็กเก็ตในพื้นที่เคอร์เนล?
หากผ่านหน้า man ของtcpdumpดูเหมือนว่าเคอร์เนลสามารถวางแพ็กเก็ตได้หากบัฟเฟอร์เต็ม ฉันสงสัยว่า: ขนาดนั้นสามารถกำหนดค่าได้และ / หรือ ฉันจะดูขนาดของ distro ของฉันได้ที่ไหน จากหน้าคน (สำหรับการอ้างอิงง่าย ๆ ): แพ็กเก็ต `` ดร็อปโดยเคอร์เนล '' (นี่คือจำนวนแพ็กเก็ตที่ถูกดร็อปเนื่องจากการขาดพื้นที่บัฟเฟอร์โดยกลไกการดักจับแพ็กเก็ตในระบบปฏิบัติการที่ tcpdump ทำงานอยู่หากระบบปฏิบัติการรายงานข้อมูลไปยังแอปพลิเคชัน มิฉะนั้นจะถูกรายงานเป็น 0)

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

2
“ tail -f | iconv -fsjis” ไม่ส่งสัญญาณอะไรเลย
ฉันต้องการtail -fไฟล์ แต่เนื้อหาของมันกำลังอยู่ในการsjisเข้ารหัสดังนั้นฉันจึงต้องแปลงมันเป็นการเข้ารหัสเนทีฟ (utf-8) ของเทอร์มินัลของฉัน เมื่อฉันทำ tail -fx | iconv -fsjis จะไม่มีเอาต์พุต เช่น หาง x | iconv -fsjis ใช้งานได้ในตอนแรกฉันคิดว่ามันเป็นปัญหาบัฟเฟอร์ แต่การลองunbufferและstdbufตามที่อธิบายไว้ในการปิดการบัฟเฟอร์ในไพพ์ไม่ได้ช่วยอะไร ในความเป็นจริงแม้หลังจากเพิ่มข้อมูลมากกว่า 10k ลงใน x แล้วก็จะไม่มีเอาต์พุตดังนั้นฉันเดาว่ามันไม่ใช่ปัญหาบัฟเฟอร์ (บัฟเฟอร์คือ 4k ถ้าฉันไม่เข้าใจผิด) แต่ไอคอนvจะเริ่มแสดงผลเมื่อ มันได้รับ EOF ดังนั้นฉันจะติดตามไฟล์เข้ารหัส sjis ของฉันได้อย่างไร
14 tail  buffer 

5
ยูทิลิตี้เพื่อบัฟเฟอร์จำนวนข้อมูลที่ไม่ จำกัด ในไปป์ไลน์หรือไม่?
มียูทิลิตี้ที่ฉันสามารถติดในไปป์ไลน์เพื่อแยกความเร็วในการอ่านและเขียนได้หรือไม่? $ producer | buf | consumer โดยทั่วไปฉันต้องการยูทิลิตี้bufที่อ่านอินพุตเร็วที่สุดเท่าที่จะเป็นไปได้เก็บไว้ในหน่วยความจำเพื่อให้consumerสามารถใช้ช่วงเวลาที่หวานในขณะที่producerรันเร็วที่สุด
14 pipe  io  buffer 

1
`unbuffer` หรือ` stdbuf` สำหรับการลบ stdout buffering?
มีความแตกต่างระหว่าง unbuffer (1) และ stdbuf (1) หรือไม่? จากสิ่งที่ฉันรวบรวม unbuffer ทำมากกว่า "ความพยายามที่ดีที่สุด" ในการเรียกใช้ฟังก์ชัน libc set (X) buf ที่จุดเริ่มต้นแล้วปล่อยให้สิ่งต่าง ๆ เป็นอย่างไร
13 utilities  io  stdout  buffer 

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