Score:3

RAM ช้ามาก ความเร็วในการเขียนต่ำและเวลาแฝงสูง

ธง bv

ฉันพบปัญหาเกี่ยวกับความเร็วของหน่วยความจำและเวลาแฝงบนเซิร์ฟเวอร์ของฉัน ฉันเช่าเซิร์ฟเวอร์นี้จาก OVH และหนึ่งในข้อกำหนดก่อนที่จะเปลี่ยน RAM ก็คือ

ในการเริ่มการแทรกแซง คุณต้องส่งบันทึกในตั๋วของคุณ แสดงตัวระบุและโมดูล RAM ที่ได้รับผลกระทบ

ฉันจะตรวจจับชิป DRAM ที่ผิดพลาดได้อย่างไรโดยไม่ต้องเรียกใช้ memtest86+ เป็นเวลาหลายวัน เนื่องจากนี่เป็นเซิร์ฟเวอร์การผลิตขนาดใหญ่ (RAM 1TB)

sysbench --test=memory --memory-block-size=4G --memory-total-size=32G เรียกใช้

คำเตือน: ตัวเลือก --test เลิกใช้แล้ว คุณสามารถส่งชื่อสคริปต์หรือเส้นทางบนบรรทัดคำสั่งโดยไม่มีตัวเลือกใดๆ
sysbench 1.0.18 (ใช้ระบบ LuaJIT 2.1.0-beta3)

ทำการทดสอบด้วยตัวเลือกต่อไปนี้:
จำนวนเธรด: 1
กำลังเริ่มต้นตัวสร้างตัวเลขสุ่มจากเวลาปัจจุบัน


เรียกใช้การทดสอบความเร็วหน่วยความจำด้วยตัวเลือกต่อไปนี้:
  ขนาดบล็อก: 4194304KiB
  ขนาดรวม: 32768MiB
  การดำเนินการ: เขียน
  ขอบเขต: ทั่วโลก

กำลังเริ่มต้นเธรดผู้ปฏิบัติงาน...

กระทู้เริ่ด!

การทำงานทั้งหมด: 2 ( 0.15 ต่อวินาที)

8192.00 MiB ที่ถ่ายโอน (630.16 MiB/วินาที)


สถิติทั่วไป:
    เวลาทั้งหมด: 12.9937 วินาที
    จำนวนเหตุการณ์ทั้งหมด: 2

เวลาแฝง (มิลลิวินาที):
         นาที: 6338.94
         เฉลี่ย: 6496.29
         สูงสุด: 6653.64
         เปอร์เซ็นไทล์ที่ 95: 6594.16
         ผลรวม: 12992.58

ความเป็นธรรมของเธรด:
    เหตุการณ์ (เฉลี่ย/stddev): 2.0000/0.00
    เวลาดำเนินการ (เฉลี่ย/stddev): 12.9926/0.00

sysbench --test=memory --memory-block-size=1K --memory-total-size=100G --num-threads=1 รัน

คำเตือน: ตัวเลือก --test เลิกใช้แล้ว คุณสามารถส่งชื่อสคริปต์หรือเส้นทางบนบรรทัดคำสั่งโดยไม่มีตัวเลือกใดๆ
sysbench 1.0.18 (ใช้ระบบ LuaJIT 2.1.0-beta3)

ทำการทดสอบด้วยตัวเลือกต่อไปนี้:
จำนวนเธรด: 1
กำลังเริ่มต้นตัวสร้างตัวเลขสุ่มจากเวลาปัจจุบัน


เรียกใช้การทดสอบความเร็วหน่วยความจำด้วยตัวเลือกต่อไปนี้:
  ขนาดบล็อก: 1KiB
  ขนาดรวม: 102400MiB
  การดำเนินการ: เขียน
  ขอบเขต: ทั่วโลก

กำลังเริ่มต้นเธรดผู้ปฏิบัติงาน...

กระทู้เริ่ด!

การดำเนินการทั้งหมด: 48693603 (4868132.10 ต่อวินาที)

47552.35 MiB ที่ถ่ายโอน (4754.04 MiB/วินาที)


สถิติทั่วไป:
    เวลาทั้งหมด: 10.0002 วินาที
    จำนวนเหตุการณ์ทั้งหมด: 48693603

เวลาแฝง (มิลลิวินาที):
         นาที: 0.00
         เฉลี่ย: 0.00
         สูงสุด: 0.47
         เปอร์เซ็นไทล์ที่ 95: 0.00
         ผลรวม: 4155.88

ความเป็นธรรมของเธรด:
    เหตุการณ์ (เฉลี่ย/stddev): 48693603.0000/0.00
    เวลาดำเนินการ (เฉลี่ย/stddev): 4.1559/0.00

sudo lshw -short -C หน่วยความจำ

เส้นทาง H/W คำอธิบายคลาสอุปกรณ์
================================================== ========
/0/0 หน่วยความจำ 64KiB BIOS
/0/20 หน่วยความจำ 1TiB หน่วยความจำระบบ
/0/20/0 หน่วยความจำ [ว่าง]
/0/20/1 หน่วยความจำ 128GiB DIMM DDR4 ซิงโครนัส LRDIMM 2933 MHz (0.3 ns)
/0/20/2 หน่วยความจำ [ว่าง]
/0/20/3 หน่วยความจำ 128GiB DIMM DDR4 ซิงโครนัส LRDIMM 2933 MHz (0.3 ns)
/0/20/4 หน่วยความจำ [ว่าง]
/0/20/5 หน่วยความจำ 128GiB DIMM DDR4 ซิงโครนัส LRDIMM 2933 MHz (0.3 ns)
/0/20/6 หน่วยความจำ [ว่างเปล่า]
/0/20/7 หน่วยความจำ 128GiB DIMM DDR4 ซิงโครนัส LRDIMM 2933 MHz (0.3 ns)
/0/20/8 หน่วยความจำ [ว่างเปล่า]
/0/20/9 หน่วยความจำ 128GiB DIMM DDR4 ซิงโครนัส LRDIMM 2933 MHz (0.3 ns)
/0/20/a หน่วยความจำ [ว่าง]
/0/20/b หน่วยความจำ 128GiB DIMM DDR4 ซิงโครนัส LRDIMM 2933 MHz (0.3 ns)
/0/20/c หน่วยความจำ [ว่าง]
/0/20/d หน่วยความจำ 128GiB DIMM DDR4 ซิงโครนัส LRDIMM 2933 MHz (0.3 ns)
/0/20/e หน่วยความจำ [ว่าง]
/0/20/f หน่วยความจำ 128GiB DIMM DDR4 ซิงโครนัส LRDIMM 2933 MHz (0.3 ns)
/0/23 หน่วยความจำแคช 3MiB L1
/0/24 หน่วยความจำแคช 24MiB L2
/0/25 หน่วยความจำแคช 256MiB L3
Score:1
ธง gn

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

ระบบทดสอบมีหน่วยความจำ 32G บน 4X8G DIMM เท่านั้น

ขั้นแรก ให้เรียกใช้ sysbench ตามปกติ แต่เพิ่มระยะเวลาการทดสอบให้เพียงพอสำหรับเวลาในการรับข้อมูลบางอย่างในขณะที่ดำเนินการ:

doug@s19:~/c$ sysbench --test=memory --memory-block-size=4G --memory-total-size=512G --num-threads=1 --time=60 run
คำเตือน: ตัวเลือก --test เลิกใช้แล้ว คุณสามารถส่งชื่อสคริปต์หรือเส้นทางบนบรรทัดคำสั่งโดยไม่มีตัวเลือกใดๆ
sysbench 1.0.18 (ใช้ระบบ LuaJIT 2.1.0-beta3)

ทำการทดสอบด้วยตัวเลือกต่อไปนี้:
จำนวนเธรด: 1
กำลังเริ่มต้นตัวสร้างตัวเลขสุ่มจากเวลาปัจจุบัน


เรียกใช้การทดสอบความเร็วหน่วยความจำด้วยตัวเลือกต่อไปนี้:
  ขนาดบล็อก: 4194304KiB
  ขนาดรวม: 524288MiB
  การดำเนินการ: เขียน
  ขอบเขต: ทั่วโลก

กำลังเริ่มต้นเธรดผู้ปฏิบัติงาน...

กระทู้เริ่ด!

การดำเนินการทั้งหมด: 128 ( 3.05 ต่อวินาที)

โอน 524288.00 MiB (12509.51 MiB/วินาที)


สถิติทั่วไป:
    เวลาทั้งหมด: 41.9101 วินาที
    จำนวนเหตุการณ์ทั้งหมด: 128

เวลาแฝง (มิลลิวินาที):
         นาที: 327.22
         เฉลี่ย: 327.42
         สูงสุด: 328.09
         เปอร์เซ็นไทล์ที่ 95: 325.98
         ผลรวม: 41909.72

ความเป็นธรรมของเธรด:
    เหตุการณ์ (เฉลี่ย/stddev): 128.0000/0.00
    เวลาดำเนินการ (เฉลี่ย/stddev): 41.9097/0.00

และในช่วง 41 วินาทีที่การทดสอบดำเนินการ และในเทอร์มินัลอื่น ฉันทำสิ่งนี้:

doug@s19:~$ ps aux | grep sysbench
ดั๊ก 10489 92.2 12.8 4227496 4204436 pts/1 Sl+ 09:48 0:03 sysbench --test=memory --memory-block-size=4G --memory-total-size=512G --num-threads=1 --time = 60 วิ่ง
ดั๊ก 10492 0.0 0.0 9040 732 pts/2 S+ 09:48 0:00 grep --color=auto sysbench
doug@s19:~$ pmap 10489 | grep อานนท์ | เกรป " 4195"
00007f25cbb5a000 4195456K rw--- [ ไม่ระบุ ]

ฉันทำทั้งวงจรสองสามครั้ง:

00007fa4bd7b4000 4195456K rw--- [ อานนท์ ]
00007f32c9878000 4195456K rw--- [ อานนท์ ]
00007f4837211000 4195456K rw--- [ อานนท์ ]

ซึ่งแสดงว่าเราไม่รู้จริง ๆ ว่าใช้หน่วยความจำใดหรือแผนที่กลับไปที่ DIMM ยังไงก็ไปกันต่อนะครับ

แก้ไข: ด้านบนสามารถทำซ้ำได้โดยการปิดการใช้งาน Address Space Layout Randomization (ASLR):

sudo sysctl kernel.randomize_va_space=0

ตอนนี้สำรองหน่วยความจำบางส่วนเพื่อบังคับให้จัดสรรบัฟเฟอร์ sysbench ไว้ที่อื่น บางคนอาจมีความคิดที่ดีกว่า แต่ฉันเขียนโปรแกรม:

doug@s19:~/c$ แมวสำรองm.c
/************************************************ ****************************
*
* Reservem.c 2021.07.20 สมีธีส์
* จัดสรรหน่วยความจำก้อนชั่วขณะ
* การใช้งานปัจจุบันคือการบังคับให้โปรแกรมอื่นใช้พื้นที่อื่น
* ของหน่วยความจำ
* ดูเพิ่มเติม: https://askubuntu.com/questions/1352756/ram-has-become-very-slow-low-write-speed-and-high-latency
* ดู slao testm.c ที่รหัสนี้เริ่มต้น
*
************************************************** ***************************/

#รวม <stdio.h>
#รวม <stdlib.h>
#รวม <unistd.h>

int หลัก () {
   ถ่าน * ftr;
   ฉันยาว, k;

/* ปรับตามความจำเป็นในการใช้งาน */
   ฉัน = 8589934592;

   ถ้า(( fptr = (ถ่าน *)malloc(i)) == NULL){
      printf("สำรอง: การจัดสรรหน่วยความจำล้มเหลว กำลังออกจาก...\n");
      ทางออก (-1);
   }
   ในขณะที่ (( fptr == NULL) && (i > 0));
   for(k = 0; k < i; k++){ /* เพื่อให้หน่วยความจำได้รับการจัดสรรจริงๆ ไม่ใช่เพียงแค่สงวนไว้ */
      fptr[k] = (ถ่าน) (k & 255);
   } /* เอนฟอร์ */
   printf("reservem: หน่วยความจำที่จองและจัดสรรแล้ว ตอนนี้อยู่ในโหมด sleep...\n");
   นอน (180); /* เพื่อให้การทดสอบและการสังเกตอื่นๆ สามารถทำได้ ปรับตามความต้องการ */
   ฟรี (fptr);
   printf("reservem: หน่วยความจำถูกปล่อยให้ว่าง เสร็จสิ้นและออกจาก...\n");
   กลับ (0);
} /* สิ้นสุดโปรแกรม */

รวบรวมมัน:

doug@s19:~/c$ cc reservem.c -o สำรอง

จากนั้นรันและทำซ้ำขั้นตอนก่อนหน้าในขณะที่บล็อกหน่วยความจำถูกจองและจัดสรร ได้รับ:

doug@s19:~$ ps aux | grep sysbench
ดั๊ก 11324 93.8 12.8 4227496 4204340 pts/1 Sl+ 13:58 0:09 sysbench --test=memory --memory-block-size=4G --memory-total-size=512G --num-threads=1 --time = 60 วิ่ง
ดั๊ก 11327 0.0 0.0 9040 664 pts/2 S+ 13:59 0:00 grep --color=auto sysbench
doug@s19:~$ pmap 11324 | grep อานนท์ | เกรป " 4195"
00007fc5f2df8000 4195456K rw--- [ อานนท์ ]

และสำหรับหน่วยความจำที่สงวนไว้:

doug@s19:~$ ps aux | grep สำรอง
ดั๊ก 11314 55.0 25.6 8391108 8389584 pts/0 S+ 13:57 0:11 ./สำรอง
ดั๊ก 11318 0.0 0.0 9040 740 แต้ม/2 S+ 13:57 0:00 grep --color=สำรองอัตโนมัติ
doug@s19:~$ pmap 11314 | grep อานนท์ | เกรป " 8388612K"
00007f11a6bfc000 8388612K rw--- [ อานนท์ ]

และ:

โอน 524288.00 MiB (12499.79 MiB/วินาที)

ในทำนองเดียวกันสำหรับการจองและจัดสรร 8G 2 และ 3 เท่า:

doug@s19:~$ ps aux | grep สำรอง
ดั๊ก 11335 85.0 25.6 8391108 8389704 pts/0 S 14:07 0:11 ./สำรอง
ดั๊ก 11336 92.0 25.6 8391108 8389672 pts/0 S 14:07 0:11 ./สำรอง
ดั๊ก 11340 0.0 0.0 9040 736 pts/2 S+ 14:08 0:00 grep --color=auto reservem
doug@s19:~$ pmap 11335 | grep อานนท์ | เกรป " 8388612K"
00007fae2ce3f000 8388612K rw--- [ ไม่ระบุ ]
doug@s19:~$ pmap 11336 | grep อานนท์ | เกรป " 8388612K"
00007f20cb627000 8388612K rw--- [ อานนท์ ]
doug@s19:~$ ps aux | grep sysbench
ดั๊ก 11347 96.6 12.8 4227496 4204468 pts/1 Sl+ 14:08 0:12 sysbench --test=memory --memory-block-size=4G --memory-total-size=512G --num-threads=1 --time = 60 วิ่ง
ดั๊ก 11350 0.0 0.0 9040 740 pts/2 S+ 14:08 0:00 grep --color=auto sysbench
doug@s19:~$ pmap 11347 | grep อานนท์ | เกรป " 4195"
00007f37dbe3c000 4195456K rw--- [ ไม่ระบุ ]

และ:

โอน 524288.00 MiB (12521.74 MiB/วินาที)

3X:

doug@s19:~$ ps aux | grep สำรอง
ดั๊ก 11388 100 21.0 8391108 6889064 แต้ม/0 R 14:12 0:09 ./สำรอง
ดั๊ก 11389 103 19.2 8391108 6292368 แต้ม/0 R 14:12 0:08 ./สำรอง
ดั๊ก 11390 100 16.3 8391108 5334328 แต้ม/0 R 14:12 0:07 ./สำรอง
ดั๊ก 11392 0.0 0.0 9040 724 pts/2 S+ 14:12 0:00 grep --color=auto reservem
doug@s19:~$ pmap 11388 | grep อานนท์ | เกรป " 8388612K"
00007f2b83d2d000 8388612K rw--- [ อานนท์ ]
doug@s19:~$ pmap 11389 | grep อานนท์ | เกรป " 8388612K"
00007f2921e0c000 8388612K rw--- [ อานนท์ ]
doug@s19:~$ pmap 11390 | grep อานนท์ | เกรป " 8388612K"
00007f2a23f2b000 8388612K rw--- [ อานนท์ ]
doug@s19:~$ ps aux | grep sysbench
ดั๊ก 11402 107 12.8 4227496 4204420 pts/1 Sl+ 14:12 0:07 sysbench --test=memory --memory-block-size=4G --memory-total-size=512G --num-threads=1 --time = 60 วิ่ง
ดั๊ก 11405 0.0 0.0 9040 672 pts/2 S+ 14:12 0:00 grep --color=auto sysbench
doug@s19:~$ pmap 11402 | grep อานนท์ | เกรป " 4195"
00007fe64b54b000 4195456K rw--- [ อานนท์ ]

และ:

524288.00 MiB ที่โอน (12504.34 MiB/วินาที)

สำหรับการอ้างอิง ประสิทธิภาพของระบบนี้เทียบกับ memory-block-size:

ขนาดบล็อก: ประสิทธิภาพ (MiB/วินาที):
256 2750.99
512 4937.70
  1K 8216.82
  2K 12290.93
  4K 16334.92
  8K 19498.37
 16ก21663.68
 32ก22514.94
 64ก23372.45
128K 23815.14
256K 23967.98
512K 24126.43
  1ม24226.70
  2ม24279.93
  4ม24310.19
  8M23632.07
 16ม20622.04
 32ม16149.71
 64ม14206.06
128M 13303.15
256ม12853.12
512M 12720.34
  1ก12584.68
  2G 12538.66
  4G 12502.66
  8ก12490.63
 16ก12482.25

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา